接觸資料探勘以及相關的演算法也有快兩年的時間了。整理下自己使用過的預處理方法,以及一些必備知識。總體來說,預處理包括大概四個部分:清理,整合,歸約和變形。預處理中使用的技術不如「演算法」那麼「高階」,但是元資料本身質量的好壞直接決定著模型的上界。
資料編碼格式:unicode/utf-8/gbk是我常遇到的型別。改編碼格式可以預先修改,也可以寫入資料以後再使用encode decode
修改。文件也可以用vim來修改。
資料型別轉化:str int float等互相轉換(python沒有double)
時間序列處理:時間窗的大小可以通過直方圖和折線圖判斷
小數點精度控制。
1.1 缺失值處理(6種方法)
忽略元祖、手動填值、全域性填充(全填unknown或無窮)、用中心值填充(mean、median等)、用同一類中的mean或median填充、用概率最大的值填充(最流行的方法)
1.2 雜訊和離群點
首先,雜訊和離群點的區別: 觀測量(measurement) = 真實資料(true data) + 雜訊 (noise)
雜訊是資料集中的隨機誤差值,離群點是和大部分觀測值明顯不同的觀測值,可能是真實的資料,也可能是由雜訊產生的,是在資料集中極端大或極端小,或是極端遠離大部分數值的值。雜訊可以通過平滑資料或回歸擬合來解決(分箱等等)。離群點一般剔除,在欺詐分析中也有進行分析的。
雜訊光滑
分箱法/回歸方法平滑資料,下圖為分箱法的例子:分別為等頻/均值光滑/箱邊界光滑
剔除離群點
直觀來看,簇外的就是離散點。在下圖中,o代表的就是單個離群點。在c2之外還有乙個簇是c1,被稱作是全域性離群點。
離群點的處理:由上圖可以進一步想到,聚類可以作為判斷離群點的依據。另外,還可以使用zscore方法 z−
scor
e=xi
−μσ z−s
core
=xi−
μσ一般認為【-3,3】範圍之外的點為離群點。
合併來自多個儲存的資料,解決冗餘和不一致問題等等。
1. 實體識別:有時我們會遇到這樣一種情況:兩個資料庫中的兩個表,對於同乙個屬性會有不同的名字,舉個例子:在student表中的cs_id代表選修課程id,而在課程表course中,id代表課程id。判斷時可以判斷數值範圍/資料型別/名字/含義等等。
2. 冗餘和相關分析:用卡方(pearson)檢測標稱屬性,用相關係數和協方差檢驗數值屬性,這裡有更詳細的介紹 。
得到資料集的簡化版,資料的size小得多,但是能起到同樣的作用。方法大概三種:降維/資料縮減(儲存乙個能生成資料的模型),資料壓縮。
1. 降維:
1.1. pca(主成分分析),用協方差矩陣計算特徵向量降低維度,假設原始資料為m元素n特徵(m*n),則特徵矩陣為(n*k),經計算結果為m*k,過程:特徵篩選:1)對資料規範化(標準化),資料排列成n行m列的矩陣a,求a的協方差矩陣c;
2)求c的特徵值和特徵向量(也就是主成分);
3)排列主成分(大-小),選擇前k行組成特徵矩陣p(k*n);
4)結果矩陣b=pa。b(k*m)。
1.2. lda(線性判別法)
1.3 dwt(小波變換):將向量x變換成不同的數值小波係數向量x`,一種很好的有失真壓縮,和傅利葉變換(dft)有關係,比傅利葉提供與原始資料更接近的近似資料。(看到傅利葉這裡就可以撤了)
過濾的方法嵌入式2.1. 相關係數
2.2 互資訊
2.3 卡方檢驗
2.4 計算方差
2.5 基於罰項:lasso/ridge,核心思想是將部分特徵的係數降為0,即不在模型中參與計算或少參與計算,起到降低模型複雜度的作用。2.6 基於樹模型
另外還有一種遞迴特徵消除。
標準化:縮放資料的範圍。其中最特別的是歸一化,歸一化後,矩陣每列的均值為0,標準差為1。標準化可將不同量綱的屬性歸為無量綱資料,使得目標函式梯度下降更快更準確。
正則化/二值化/缺失值處理
import sklearn
from sklearn import preprocessing
import numpy as np
x = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
#標準化1
# use function preprocessing.scale to standardize x
x_scale = preprocessing.scale(x)
print(x_scale)
# 標準化2
scaler = preprocessing.standardscaler() #zscore
x_scaled = scaler.fit_transform(x) #例項化
print(x_scaled)
# 歸一化
min_max_scaler = preprocessing.minmaxscaler() #feature_range = (-1,1)
x_minmax = min_max_scaler.fit_transform(x)
print(x_minmax)
#歸一化2
x_train = preprocessing.standardscaler().fit_transform(x)
# 正則化1
x_normalized = preprocessing.normalize(x, norm='l2')
print(x_normalized)
# 正則化2
normalizer = preprocessing.normalizer().fit_transform(x) # fit does nothing
print(normalizer)
# 二值化
binarizer = preprocessing.binarizer().fit_transform(x) # fit does nothing
print(binarizer)
參考資源: 資料探勘之資料預處理
現實情況中,你的資料可能是不完整的 缺少屬性值或某些感興趣的屬性或僅包含聚類資料 含雜訊的 包含錯誤或存在偏離期望的離群值 並且是不一致的。資料清理 填寫缺失的值 光滑雜訊資料 識別或刪除離群點並解決不一致性 資料整合 當資料來自多個資料來源時,而同乙個屬性在不同資料來源不同,合成時存在冗餘 資料規...
資料探勘 資料預處理
1 資料預處理 對於建立資料倉儲和資料探勘都是乙個重要的問題,因為現實世界中的資料多半是不完整的 有噪音的和不一致的。資料預處理包括資料清理 資料整合 資料變換和資料歸約。2 資料清理 可以用於填充遺漏的值,平滑資料,找出局外者並糾正資料的不一致性。3 資料整合 將來自不同資料來源的資料整合成一致的...
資料探勘 資料預處理
1.多維度衡量資料質量 正確性 完整性 一致性 時效性 可信度 可解釋性 2.資料清洗 補全缺失資料 專家補充完整 自動填充 unknown 均值 眾數 根據其他屬性採樣本均值等 平滑雜訊資料 隨機錯誤 技術限制等 裝箱 回歸 人機結合 聚類識別並移除異常資料 識別移除異常資料 利用屬性元資料 如身...