這可能是你能找到最全面的數據預處理介紹
本文主要介紹數據詳細處理流程處理的原因,對于處理方法的原理簡略。想深入了解原理可以根據這份框架深入研究思索,將框架和細節(jié)一起把握。
數據是機器學習的原料,在把數據投入機器學習模型前,我們需要對數據進行加工。正確預處理數據對模型輸出結果有非常大的影響。
可以說,數據預處理是機器學習落地最麻煩但最具有挑戰(zhàn)的環(huán)節(jié)。
數據可能存在問題
在實際業(yè)務處理中,數據通常是臟數據。
所謂的臟,指數據可能存在以下幾種問題(主要問題):
數據缺失?(Incomplete)?:屬性值為空的情況。如 Occupancy = “ ”
數據噪聲 (Noisy):數據值不合常理的情況。如 Salary = “-100”
數據不一致 (Inconsistent):數據前后存在矛盾的情況。如 Age = “42” vs. Birthday = “01/09/1985”
數據冗余 (Redundant):數據量或者屬性數目超出數據分析需要的情況
數據集不均衡 (Imbalance):各個類別的數據量相差懸殊的情況
離群點/異常值 (Outliers):遠離數據集中其余部分的數據
數據重復(Duplicate):在數據集中出現多次的數據
數據預處理步驟
數據預處理,就是前一部分提到的,對臟數據的處理,主要有以下步驟:
1.數據清洗?Data Cleansing
2.數據轉換 Data Transformation
3.數據描述 Data Description
4.特征選擇 Feature Selection 或特征組合 Feature Combination
5.特征抽取 Feature Extraction
01 數據清洗?Data Cleansing
在數據清洗階段,主要處理第一部分提及的缺失數據、離群點、重復數據。
1)缺失數據
缺失數據主要有以下幾類:
Missing completely at random
缺失的概率是隨機的,比如門店的計數器因為斷電斷網等原因在某個時段數據為空。
Missing conditionally at random
數據是否缺失取決于另外一個屬性,比如一些女生不愿意填寫自己的體重。
Not missing at random
數據缺失與自身的值有關,比如高收入的人可能不愿意填寫收入。
處理方式主要有以下幾種:
a. 刪數據,如果缺失數據的記錄占比比較小,直接把這些記錄刪掉完事。
b. 手工填補,或者重新收集數據,或者根據領域知識來補數據。
c. 自動填補,簡單的就是均值填充,或者再加一個概率分布看起來更真實些,也可以結合實際情況通過公式計算,比如門店計數缺失,可以參考過往的客流數據,轉化數據,缺失時段的銷售額,用一個簡單公式自動計算回補。
2)離群點
離群點是遠離數據集中其余部分的數據,這部分數據可能由隨機因素產生,也可能是由不同機制產生,對于離群點的處理,取決于離群點的產生原因及應用目的:
若離群點由隨機因素產生,我們忽略或者剔除離群點,
若是由不同機制產生,離群點就是寶貝,是應用的重點。
此時的應用為異常行為檢測。如:在銀行的信用卡詐騙識別中,通過對大量的信用卡用戶信息和消費行為進行向量化建模和聚類,發(fā)現聚類中遠離大量樣本的點顯得非??梢?。
因為他們和一般的信用卡用戶特性不同,他們的消費行為和一般的信用卡消費行為也相去甚遠。
還有購物網站檢測惡意刷單等場景也重點對離群點進行分析。
不論對離群點的處理方式為提出還是做重點研究應用,首先都需要檢測出離群點。在一些機器學習包中提供了多種方法,如OneClassSVM、Isolation Forest、Local Outlier Factor (LOF),這里不展開。
3)重復數據
重復數據的處理常見方法:
如果高度疑似的樣本是挨著的,可以用滑動窗口對比,為了讓相似記錄相鄰,可以每條記錄生成一個hash key, 根據key排序。
02 數據轉換 Data Transformation
數據清洗階段結束后,得到的是沒有錯誤的數據集,接下來的數據轉換階段,我們對數據進行采樣處理、類型轉換、歸一化。
1)采樣
采樣是從特定的概率分布中抽取樣本點的過程。
采樣在機器學習中有非常重要的應用:
將復雜分布簡化為離散的樣本點;
用重采樣可以對樣本集進行調整以更好地進行調整并適應后期的模型學習;
用于隨機模擬以進行復雜模型的近似求解或推理。
采樣的一個重要作用是處理不均衡數據集。
最簡單的處理不均衡樣本集的方法是隨機采樣。
采樣一般分為過采樣(Over-sampling)和欠采樣(Under-sampling)。
隨機過采樣是從少數類樣本集 S_min中有放回地隨機重復抽取樣本,隨機欠采樣是從多數類樣本集S_max中隨機選取較少樣本。
兩種方法的問題:
隨機過采樣會擴大數據規(guī)模,容易造成過擬合;
隨機欠采樣可能損失部分有用信息,造成欠擬合。
當總體數據量不夠時,除了簡化模型,我們可以借鑒隨機過采樣的方法,對每個類進行過采樣。
具體到圖像任務,還可以直接在圖像空間進行變換,如可以通過對圖像施加一定幅度的變換(旋轉、平移、縮放、裁剪、填充、翻轉、添加噪聲、顏色變換、改變亮度、清晰度、對比度等),得到擴充的數據集。
此外,遷移學習也是在小數據集上進行建模的好方法。
整體準確率不適用于不平衡數據集,需要引入新的度量模式。比如:G-mean, 它會看正類上的準確率,再看負類上的準確率,然后兩者相乘取平方根。
另外一種常見的度量如F-score。
2)類型轉換
類型轉換處理前,先看下數據的類型。
數據類型可以簡單劃分為數值型和非數值型。
數值型有連續(xù)型和離散型。
非數值型有類別型和非類別型,其中類別型特征中如果類別存在排序問題為定序型,若不存在排序問題則為定類型,非類別型是字符串型。
如:
連續(xù)型:Real values: Temperature, Height, Weight …
離散型:Integer values: Number of people …
定序型:Rankings: {Average, Good, Best}, {Low, Medium, High} …
定類型:Symbols: {Teacher, Worker, Salesman}, {Red, Green, Blue} …
字符串型:Text: “Tsinghua University”, “No. 123, Pingan Avenue” …
不同數據類型的轉換方法:
非數值型:需要進行類別轉換,即將非數值型轉換為數值型。
定序型:可以使用序號編碼,如成績,分為Average, Good, Best三檔,序號編碼可以按照大小關系對定序型特征賦予一個數值ID,例如Average表示為1,Good表示為2,Best表示為3,轉換后依舊保留了大小關系。
定類型:使用獨熱編碼,如顏色三原色,為Red, Green, Blue,獨熱編碼可以把三原色變?yōu)橐粋€三維稀疏向量,Red表示為(0,0,1),Green表示為(0,1,0),Blue表示為(1,0,0)。
字符串型:有多種表示方式,如詞袋模型(Bag of Words),TF-IDF(Term Frequency-Inverse),主題模型(Topic Model),詞嵌入模型(Word Embedding)。各種表示有不同的適用場景和優(yōu)缺點。
在類別值較多的情況下,可以使用稀疏向量來節(jié)省空間,目前大部分算法實現均接受稀疏向量形式的輸入。
還有很多別的編碼方式,如二進制編碼等、。
3)歸一化
經過類別轉換后,所有數據均轉為了數值型。為了消除數據特征之間的量綱影響,需要對特征進行歸一化處理,使不同指標之間具有可比性。
如:分析一個人的身高和體重對健康的影響,如果使用米(m)和千克(kg)作為單位,身高在1.6-1.8m的數值范圍內,體重特征在50-100kg的數值范圍內,分析出來的結果會傾向于數值差別較大的體重特征。
數值型特征進行歸一化可以將所有特征都統(tǒng)一到一個大致相同的區(qū)間內,以便進行分析。
歸一化方式通常有線性函數歸一化(Min-Max Scaling)和零均值歸一化(Z-score Normalization)。
不是所有的數值都應進行歸一化,在實際應用中,通過梯度下降法求解的模型通常需要歸一化,因為經過歸一化后,梯度在不同特征上更新速度趨于一致,可以加快模型收斂速度。
決策樹模型并不需要,以C4.5為例,決策樹在節(jié)點分裂時主要依據數據集D關于特征x的信息增益比,而信息增益比跟特征是否經過歸一化是無關的。
03 數據描述 Data Description
數據描述階段,我們可以根據需要計算統(tǒng)計量和對數據進行可視化。
數據的一般性描述包括:
Mean:均值
Median:中位數,取數據排序后在中間位置的值,避免因為極端離群點影響客觀評價;
Mode:出現頻率最高的元素,其實用的比較少;
Variance:方差衡量數據集與其均值的偏離。
如要描述數據間的相關性可以使用Pearson correlation coefficient和Pearson chi-square進行度量。
前者適用數值數據的情況,后者適用于分類統(tǒng)計的情況。
數據可視化根據維度不同,有不同的圖表,如:
一維數據:圓餅圖
二維數據:散點圖,柱狀圖
三維數據:三維坐標呈現
高維數據:先做轉換或映射,比如用matlab的Box Plots,也可以用平行坐標呈現。
04 特征選擇?Feature Selection?或特征組合?Feature Combination
熵增益(Entropy Information Gain)、分支定界(Branch and Bound)等方式
都可以進行特征選擇。
還有sequential forward, sequential backward, simulated annealing(模擬退火), tabu search(競技搜索), genetic algorithms(遺傳算法)等方式做特征優(yōu)化。
要提高復雜關系的擬合能力,特征工程經常把一些離散特征兩兩組合,構成高階特征。
如:點擊率預測問題中,原始數據有“語言”、“類型”兩種特征,提高擬合能力可把語言、類型組合成二階特征,聯合預測對點擊率的影響。
如何找到有意義的組合特征?有一種方法是基于決策樹的組合特征尋找。
特征抽取主要有兩種方式:
主成分分析(Principal Component Analysis,PCA)
線性判別分析(Linear Discriminant Analysis,LDA)
兩者相同處為:均假設數據服從高斯分布,都使用了矩陣分解的思想。
不同之處為:PCA是無監(jiān)督的算法,對降低后的維度無限制,其目標為投影方差最大;LDA是有監(jiān)督的算法,降維后的維度小于類別數,其目標為類內方差最小,類間方差最大。