特徵預處理是資料探勘中最重要的步驟。在這篇文章中,我將向你介紹特徵預處理的概念,它的重要性,不同的機器學習模型下的數值特徵的不同特徵預處理技術。
模型的品質在很大程度上取決於輸入模型的資料。當從資料探勘過程中收集資料時,會丟失一些資料(我們將其稱為丟失值)。此外,它很容易受到噪音的影響。這都導致低品質資料的結果,正如你可能已經聽說過的,模型的好壞取決於它所訓練的資料。
這就是特徵預處理的由來,特徵預處理將原始資料轉換為機器學習模型可用的資料。
不同型別的機器學習模型首先,讓我們看看機器學習模型的不同類別。這裡,我們將模型分為兩種型別:
基於樹的模型:基於樹的模型是一種監督學習模型,能夠在捕捉複雜非線性關係的同時提供高精度和穩定性。基於樹的決策樹模型有隨機森林模型和梯度增強決策樹模型。非樹模型:所有其他監督學習模型都屬於非樹模型的範疇。線性模型、K近鄰模型和神經網路是基於非樹模型的一些例子。不同的資料型別或特徵一個數據集可以包含各種資料型別或特徵。以下是一些最常見的資料型別:
數值特徵分類特徵和順序特徵日期和時間文字影象不同的資料型別和不同的機器學習模型需要不同型別的特徵預處理。一些預處理方法對於所有資料型別都是通用的。
數值資料的特徵預處理數值資料有測量或計數的意義。數值資料的例子包括僱員的工資、年齡和擁有的房屋數量。數值資料可以進一步分為兩種型別:離散型和連續型。在上面的例子中,一個員工的工資是連續的資料,一個人的年齡和擁有的房屋數量是離散的資料。
讓我們研究一下來自Kaggle的SF salary資料集中舊金山市的員工工資資料。
在這個資料集中,特徵BasePay, OvertimePay, OtherPay, TotalPay, TotalPayBenefits和Year是數值特徵。
讓我們選擇一個特徵並對其進行探索性資料分析。
這裡是TotalPay特徵的直方圖。
從上圖中我們可以看出,資料的分佈是巨大的。值的範圍從0到50,000左右。
如果我們使用panda中的describe()函式看資料分佈,我們得到:
count 148654.000000mean 74768.321972std 50517.005274min -618.13000025% 36168.99500050% 71426.61000075% 105839.135000max 567595.430000Name: TotalPay, dtype: float64為了有效地使用該特徵,我們需要使用以下任何一種方法對該特徵進行預處理。
1. 特徵縮放(歸一化)特徵縮放是一種對資料的自變數或特徵範圍進行歸一化的方法。它通常被稱為標準化。與基於樹的模型相比,特徵縮放對非樹模型的影響更大。因此,如果你想使用非基於樹的模型獲得良好的結果,你應該考慮規範化你的數值特徵。
有不同的方法來歸一化特徵。以下是一些常見的例子:
Rescaling (Min-Max歸一化):這是一種最簡單的歸一化,將特徵重新劃分為[0,1]範圍。
下面是使用sklearn庫中的MinMaxScaler函式在python中執行Min-Max歸一化的程式碼片段。
對TotalPay特徵進行Min-Max歸一化後使用describe()檢視的結果如下。我們可以看到TotalPay的最小值是0,最大值是1。
count 148654.000000mean 0.132673std 0.088905min 0.00000025% 0.06474250% 0.12679275% 0.187354max 1.000000Name: TotalPay, dtype: float64Standardization (Z-score歸一化):在這種歸一化中,對一個特徵進行縮放,使其均值為零,方差為1。
讓我們對原始的TotalPay特徵執行Z-score歸一化。下面是使用sklearn庫中的StandardScaler函式在python中執行此類歸一化的程式碼片段。
對TotalPay特徵進行Z-score歸一化後的結果如下。我們可以看到,TotalPay的均值接近於0,標準差為1。
count 1.486540e+05mean -2.707706e-15std 1.000003e+00min -1.492304e+0025% -7.640884e-0150% -6.615046e-0275% 6.150586e-01max 9.755700e+00Name: TotalPay, dtype: float642. 離群值刪除在統計學中,離群點是一個與其他觀測值距離較遠的觀測點。 --維基百科
去除離群值後使用describe()檢視TotalPay特徵的結果如下。
count 148654.000000mean 74502.923277std 49644.336571min 286.97100025% 36168.99500050% 71426.61000075% 105839.135000max 207015.797400Name: TotalPay, dtype: float643. 排序變換
基於非樹的模型可以從秩變換中獲益。如果你沒有時間手動處理離群值,這是一種非常方便的技術。當變數是標稱變數時,排序變換特別有用,在標稱變數中,不同值之間的順序比值更重要。
可以使用scipy庫中的rankdata方法將特徵值轉換為對應排序後的索引。
4. 對數變換當你希望降低資料的可變性時,對數變換是另一種常用的技術。對數變換的另一個流行用法是當資料分佈高度傾斜時。
下面是用Python執行對數變換的程式碼片段。
對TotalPay特徵執行對數變換後使用describe()的結果如下。值的範圍從最小值-618.130和最大值567595.43更改為最小值0.00和最大值13.25。通過對這個特徵執行對數變換,我們已經減少了資料中的方差,即原始特徵的標準差約為50,500,而對數變換特徵的標準差為1.41。
count 148653.000000mean 10.739295std 1.413888min 0.00000025% 10.49599350% 11.17644675% 11.569692max 13.249166Name: LogTotalPay, dtype: float64
在本文中,我討論了為什麼特徵預處理被認為是資料探勘過程中的一個重要步驟。我列出了資料集中不同型別的特徵,並簡要討論了基於樹和非基於樹的模型。然後,通過程式碼示例和直方圖圖,詳細闡述了數值特徵常用的特徵預處理技術,包括歸一化、離群點去除和對數變換等。