機(jī)器學(xué)習(xí)模型必不可少的5種數(shù)據(jù)預(yù)處理技術(shù)
如果您曾經(jīng)參與過數(shù)據(jù)科學(xué)項(xiàng)目,那么您可能會(huì)意識(shí)到數(shù)據(jù)挖掘的第一步和主要步驟是數(shù)據(jù)預(yù)處理。在現(xiàn)實(shí)生活問題中,我們得到的原始數(shù)據(jù)往往非?;靵y,機(jī)器學(xué)習(xí)模型無法識(shí)別模式并從中提取信息。
1.處理空值:
空值是數(shù)據(jù)中任何行或列中缺失的值。空值出現(xiàn)的原因可能是沒有記錄或數(shù)據(jù)損壞。在python中,它們被標(biāo)記為“Nan”。您可以通過運(yùn)行以下代碼來檢查它
- data.isnull().sum()
我們可以用該列的平均值或該列中最頻繁出現(xiàn)的項(xiàng)來填充這些空值。或者我們可以用-999這樣的隨機(jī)值替換Nan。我們可以使用panda庫(kù)中的fillna()函數(shù)來填充Nan的值。如果一列有大量的空值(假設(shè)超過50%),那么將該列從dataframe中刪除會(huì)更好。您還可以使用來自同一列中不為空的k近鄰的值來填充空值。Sklearn的KNNImputer()可以幫助您完成這項(xiàng)任務(wù)。
2. 處理離群值:
離群值是與數(shù)據(jù)中的其他值保持一定距離的數(shù)據(jù)點(diǎn)。我們可以使用可視化工具(例如Boxplots)來檢測(cè)離群值:

通過繪制兩個(gè)特征向量之間的散點(diǎn)圖:
散點(diǎn)圖中的離群值
如果您了解數(shù)據(jù)背后的科學(xué)事實(shí)(例如這些數(shù)據(jù)點(diǎn)必須位于的范圍),則可以將離群值排除在外。例如,如果年齡是您數(shù)據(jù)的特征,那么您就知道它必須介于0到100之間(或在某些情況下介于0到130歲之間)。但是,如果數(shù)據(jù)中的年齡值有些荒謬,例如300,那么必須將其刪除。如果機(jī)器學(xué)習(xí)模型的預(yù)測(cè)很關(guān)鍵,即微小的變化都很重要,那么您就不應(yīng)該放棄這些離群值。同樣,如果離群值大量存在(例如25%或更多),那么它們很有可能代表有用的東西。在這種情況下,您必須仔細(xì)檢查離群值。
3. 歸一化或數(shù)據(jù)縮放:
如果您使用的是基于距離的機(jī)器學(xué)習(xí)算法,例如K近鄰,線性回歸,K均值聚類或神經(jīng)網(wǎng)絡(luò),那么在將數(shù)據(jù)輸入機(jī)器學(xué)習(xí)模型之前,對(duì)數(shù)據(jù)進(jìn)行歸一化是一個(gè)好習(xí)慣。歸一化是指修改數(shù)值特征的值以使其達(dá)到共同的標(biāo)度而不改變它們之間的相關(guān)性。不同數(shù)值特征中的值位于不同的范圍內(nèi),這可能會(huì)降低模型的性能,因此歸一化可以確保在進(jìn)行預(yù)測(cè)時(shí)為特征分配適當(dāng)?shù)臋?quán)重。一些常用的歸一化技術(shù)是:
a)Min-Max歸一化 -將特征縮放到最小和最大值之間的給定范圍。公式為:
X(scaled)=a+ (b-a)(X - Xmin)/(Xmax - Xmin)
其中a是最小值,b是最大值。
b)Z-score歸一化 -我們從每個(gè)特征中減去均值,然后除以其標(biāo)準(zhǔn)差,以使得到的縮放特征具有零均值和單位方差。公式為:
X(scaled)=(X - mean(X)) /σ
這樣,您可以將數(shù)據(jù)的分布更改為正態(tài)分布。
4. 編碼分類特征
分類特征是包含離散數(shù)據(jù)值的特征。如果一個(gè)分類特征有字符、單詞、符號(hào)或日期作為數(shù)據(jù)值,那么這些數(shù)據(jù)必須被編碼成數(shù)字,以便機(jī)器學(xué)習(xí)模型能夠理解,因?yàn)樗鼈冎惶幚頂?shù)字?jǐn)?shù)據(jù)。有三種方法來編碼你的數(shù)據(jù):
a)標(biāo)簽編碼:在 這種類型的編碼中,分類特征中的每個(gè)離散值都根據(jù)字母順序分配一個(gè)唯一的整數(shù)。在下面的示例中,您可以看到為每個(gè)水果分配了一個(gè)相應(yīng)的整數(shù)標(biāo)簽:

標(biāo)簽編碼通常適用于線性模型,如線性回歸,Logistic回歸以及神經(jīng)網(wǎng)絡(luò)。
b)One-hot:在這種編碼類型中,分類特征中的每個(gè)離散值都分配有唯一的one-hot向量或由1和0組成的二進(jìn)制向量。在one-hot向量中,僅離散值的索引標(biāo)記為1,其余所有值標(biāo)記為0。在下面的示例中,您可以看到為每個(gè)水果分配了對(duì)應(yīng)的長(zhǎng)度為5的one-hot向量:

one-hot編碼通??膳c基于樹的模型(例如隨機(jī)森林和梯度提升機(jī))配合使用。
c)均值編碼-在 這種類型的編碼中,分類特征中的每個(gè)離散值都使用相應(yīng)的均值目標(biāo)標(biāo)簽進(jìn)行編碼。為了更好地理解,讓我們看下面的示例:

我們有三個(gè)水果標(biāo)簽['Apple','Banana','Orange']。每個(gè)水果標(biāo)簽的平均編碼公式如下:
Encoded feature = True targets/Total targets
對(duì)于Apple來說,true targets是3,total targets是4,因此Apple的均值編碼是3/4 =0.75。類似地,Orange的編碼是1/2=0.5,banana的編碼是3/3 =1。均值編碼是標(biāo)簽編碼的擴(kuò)展版本,由于它考慮了目標(biāo)標(biāo)簽,因此與之相比更符合邏輯。
5. 離散化:
這也是一種很好的預(yù)處理技術(shù),有時(shí)可以通過減小數(shù)據(jù)大小來提高模型的性能。它主要用于數(shù)值特征。在離散化中,數(shù)字特征分為bin / intervals。每個(gè)bin都包含一定范圍內(nèi)的數(shù)值。一個(gè)bin中的值數(shù)量可以相同,也可以不同,然后將每個(gè)bin視為分類值。我們可以使用離散化將數(shù)值特征轉(zhuǎn)換為分類特征。
這些是實(shí)現(xiàn)機(jī)器學(xué)習(xí)模型時(shí)可以用來預(yù)處理數(shù)據(jù)的不同方法。希望本文對(duì)您有所幫助。