数据挖掘一般流程及模型整理
https://mp.weixin.qq.com/s/mtU-58ZPW9ruOj7H16zpVQ
?
一.數據讀取:
?
1.????csv文件:csv_data= pd.read_csv('/路徑/test.csv')
2.????txt文件:f= open('/路徑/test.txt',?'r')
3.????excel文件:
import xlrd
f=xlrd.open_workbook(r'\路徑\demo.xlsx',formatting_info=True)
table =data.sheet_by_name("Sheet2")
or
df = pd.read_excel("\路徑\window regulator.xlsx",sheetname="Sheet2")
?
二.數據處理和清洗:
?
1.????數據清洗:
A.調整數值及格式,去掉噪聲,不可信值,缺失值較多的字段
1)去掉空格,換行符:
" xyz ".strip() # returns "xyz"
" xyz ".lstrip() # returns "xyz "
" xyz ".rstrip() # returns " xyz"
" x y z ".replace(' ', '') # returns "xyz"
2)用split斷開再合上 ''.join(your_str.split())
3)用正則表達式來完畢替換: import re strinfo = re.compile('word') b = strinfo.sub('python',a)print b 輸出的結果也是hello python
4)刪除pandas DataFrame的某一/幾列:
方法一:直接del DF['column-name']
方法二:采用drop方法,有下面三種等價的表達式:
i. DF= DF.drop('column_name', 1);
ii. DF.drop('column_name',axis=1,inplace=True)
iii. DF.drop([DF.columns[[0,1, 3]]],axis=1,inplace=True) ?
5)刪除DataFrame某行
DataFrame.drop(labels=None,axis=0,index=None,columns=None, inplace=False)?
在這里默認:axis=0,指刪除index,因此刪除columns時要指定axis=1;inplace=False,默認該刪除操作不改變原數據,而是返回一個執行刪除操作后的新dataframe;inplace=True,則會直接在原數據上進行刪除操作,刪除后就回不來了。
6) 數據類型轉換:
?
B.歸一化處理,離散化處理,數據變換(log,0-1,exp,box-cox):
?
1)0-1標準化:這是最簡單也是最容易想到的方法,通過遍歷feature vector里的每一個數據,將Max和Min的記錄下來,并通過Max-Min作為基數(即Min=0,Max=1)進行數據的歸一化處理。
def MaxMinNormalization(x,Max,Min):
x = (x - Min) / (Max - Min);
???? return x;
?
2)Z-score標準化:這種方法給予原始數據的均值(mean)和標準差(standard deviation)進行數據的標準化。經過處理的數據符合標準正態分布,即均值為0,標準差為1,這里的關鍵在于復合標準正態分布,個人認為在一定程度上改變了特征的分布。
def Z_ScoreNormalization(x,mu,sigma):
???? x = (x - mu) / sigma;
???? return x;
?
3)Sigmoid函數:Sigmoid函數是一個具有S形曲線的函數,是良好的閾值函數,且在(0, 0.5)處中心對稱,在(0, 0.5)附近有比較大的斜率,而當數據趨向于正無窮和負無窮的時候,映射出來的值就會無限趨向于1和0,是個人非常喜歡的“歸一化方法”,之所以打引號是因為我覺得Sigmoid函數在閾值分割上也有很不錯的表現,根據公式的改變,就可以改變分割閾值,這里作為歸一化方法,我們只考慮(0, 0.5)作為分割閾值的點的情況:
def sigmoid(X,useStatus):
???? if useStatus:
??????????? return 1.0 / (1 +np.exp(-float(X)));
???? else:
??????????? return float(X);
?
4)變換數據范圍:除了上述介紹的方法之外,另一種常用的方法是將屬性縮放到一個指定的最大和最小值(通常是1-0)之間,這可以通過preprocessing.MinMaxScaler類實現。
X_std=(X-X.min(axis=0))/(X.max(axis=0)-X.min(axis=0))
X_scaled=X_std/(max-min)+min
?
5)正則化:正則化的過程是將每個樣本縮放到單位范數(每個樣本的范數為1),如果后面要使用如二次型(點積)或者其它核方法計算兩個樣本之間的相似性這個方法會很有用。正則化的主要思想是對每個樣本計算其p-范數,然后對該樣本中每個元素除以該范數,這樣處理的結果是使得每個處理后樣本的p-范數(l1-norm,l2-norm)等于1。
?
?????????????p-范數的計算公式:||X||p=(|x1|^p+|x2|^p+...+|xn|^p)^1/p
?
該方法主要應用于文本分類和聚類中。例如,對于兩個TF-IDF向量的l2-norm進行點積,就可以得到這兩個向量的余弦相似性。可以使用preprocessing.normalize()函數對指定數據進行轉換,用processing.Normalizer()類實現對訓練集和測試集的擬合和轉換。
?
6)Box-cox變換(stats.boxcox):Box-Cox變換是Box和Cox在1964年提出的一種廣義冪變換方法,是統計建模中常用的一種數據變換,用于連續的響應變量不滿足正態分布的情況。Box-Cox變換之后,可以一定程度上減小不可觀測的誤差和預測變量的相關性。Box-Cox變換的主要特點是引入一個參數,通過數據本身估計該參數進而確定應采取的數據變換形式,Box-Cox變換可以明顯地改善數據的正態性、對稱性和方差相等性,對許多實際數據都是行之有效的。
?
2.????數據采樣:
?
A.無放回的抽樣?
使用 random.sample
import random
idxTest = random.sample(range(nPoints),nSample)??????
#得到的idxTest 是一個list形式
?
B.有放回的抽樣?
使用 random.choice (一次選一個)
BagSamples=50
for i in range(nBagSamples):
? ? idxBag.append(np.random.choice(range(len(xTrain))))
#choice直接選出的不是list
?
更多方法詳見pandas.DataFrame.resample
?
三.特征工程:
1.????特征處理:數值型,類別型,時間型,文本型,統計型,組合特征,特征衍生,如:
1) 定量特征二值化
2) 定性特征啞變量化
3)單一變量的基礎轉換,比如通過對單一變量進行平方,開根號,log轉換等。
4)變量通過添加時間維度進行衍生,比如3個月交易數據,6個月交易數據等5)多變量的運算,比如兩個變量相加,相乘或變量間計算一個比率后得到新變量。
6) 多個變量進行PCA,LDA降維化。
?
Python sklearn類總結:
?
?
2.????特征選擇:當數據預處理完成后,我們需要選擇有意義的特征輸入機器學習的算法和模型進行訓練。首先基于業務理解,選擇對因變量有明顯影響的特征,要評估特征的獲取難度,覆蓋率,準確率。然后基于數據層面進行特征選擇,通常來說,從兩個方面考慮來選擇特征:
-
特征是否發散:如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什么用。
-
特征與目標的相關性:這點比較顯見,與目標相關性高的特征,應當優選選擇。除移除低方差法外,本文介紹的其他方法均從相關性考慮。
特征選擇主要有兩個目的:一是減少特征數量、降維,使模型泛化能力更強,減少過擬合;二是增強對特征和特征值之間的理解。
根據特征選擇的形式又可以將特征選擇方法分為3種:
?
A.過濾型:按照發散性或者相關性對各個特征進行評分,設定閾值或者待選擇閾值的個數,選擇特征。sklearn.feature_selection.SelectKBest
?
1)方差選擇法
使用方差選擇法,先要計算各個特征的方差,然后根據閾值,選擇方差大于閾值的特征。使用feature_selection庫的VarianceThreshold類來選擇特征。
2)相關系數法
使用相關系數法,先要計算各個特征對目標值的相關系數以及相關系數的P值。用feature_selection庫的SelectKBest類結合相關系數來選擇特征。
3)卡方檢驗
經典的卡方檢驗是檢驗定性自變量對定性因變量的相關性。假設自變量有N種取值,因變量有M種取值,考慮自變量等于i且因變量等于j的樣本頻數的觀察值與期望的差距,構建統計量:
這個統計量的含義簡而言之就是自變量對因變量的相關性。用feature_selection庫的SelectKBest類結合卡方檢驗來選擇特征。
4)互信息法
經典的互信息也是評價定性自變量對定性因變量的相關性的,互信息計算公式如下:
為了處理定量數據,最大信息系數法被提出,使用feature_selection庫的SelectKBest類結合最大信息系數法來選擇特征。?
?
B.包裹型:根據目標函數(通常是預測效果評分),每次選擇若干特征,或者排除若干特征。遞歸特征消除法:遞歸消除特征法使用一個基模型來進行多輪訓練,每輪訓練后,消除若干權值系數的特征,再基于新的特征集進行下一輪訓練。使用feature_selection庫的RFE類來選擇特征。
?
C.嵌入型:先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據系數從大到小選擇特征。類似于過濾法,但是是通過訓練來確定特征的優劣。
?
1)基于懲罰項的特征選擇法
使用帶懲罰項的基模型,除了篩選出特征外,同時也進行了降維。使用feature_selection庫的SelectFromModel類結合帶L1懲罰項的邏輯回歸模型。
2)基于樹模型的特征選擇法
樹模型中GBDT也可用來作為基模型進行特征選擇,使用feature_selection庫的SelectFromModel類結合GBDT模型。
?
3.????特征有效性分析:特征權重分析,監督特征的有效性,防止特征質量下降,影響模型性能。
?
四. 模型選擇
總結
以上是生活随笔為你收集整理的数据挖掘一般流程及模型整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 霍夫变换原理说明
- 下一篇: 煤柱群下重复开采覆岩与地表移动变形数值模