Python AI極簡入門:3、對數據進行預處理

Python AI極簡入門:3、對數據進行預處理

來自專欄州的碎碎碼

一、數據預處理的重要性

在機器學習中,數據的準確性關乎著機器學習任務的成敗、直接影響著預測測的結果。

而數據的準確性,一方面指數據的完整度,用於機器學習預測的數據是否全面;另一方面則指數據的統一度,數據與數據之間的分布是否統一。

二、在Python中進行機器學習數據預處理

對數據進行預處理的方式有很多中,比如規範化、標準化、二值化、編碼分類等等。我們可以通過sklearn模塊的preprocessing子模塊對數據進行預處理,其中包含了各種數據預處理的集成函數:

假如,我們有一組數據:

每一行特徵數據的數值都相差比較大,比如第一行最大值為3.5,最小值為-6,相差為9.5;第二行最大值為4,最小值為-0.3,相差為4.3。

將其轉化為數組可以直觀地看出來:

下面,我們一一介紹各種數據預處理方法以及在Python中的實現方法:

1、標準化處理

對數據集進行標準化處理是很多許多機器學習估計器的通用要求 ,因為如果單個特徵看起來不像標準正態分布數據那麼它們可能會表現得很差。

來看看實際的例子:

我們調用preprocessing模塊的StandardScaler()方法,對data數組進行標準化縮放,結果返回了一個數值差異比原始數組小多了的數組。

2、將值縮放到0-1之間

還有一種標準化方法MinMaxScaler()能夠將數值縮放到0到1之間,更好的約束的數組特徵:

可以發現,data數組中所有的值都化為了0到1之間的數據。

3、數據正常化

數據的正常化處理(Normalization)則是將個體樣本數值縮放為單位標準。

我們可以在preprocessing中的Normalizer()方法進行調用,下面看實際的處理效果:

4、數據二值化

前面介紹的數據預處理方法都是對數據進行縮放,除了對數據進行縮放之外,我們還可以對數據進行二值化處理,將不同的數據全部處理為0或1這兩個數值。

下面看看實際的效果:

對比一下原始的數據:

似乎其將小於0的數據都處理為了0,大於1的數據都處理為了1。我們可以對其指定threshold參數來設置二值化的閥值,下面請看:

可以發現,默認情況下被處理為1的一些數據(比如1),已經被處理為了0。

5、處理分類編碼

除了上述示例中的數值數據,我們在實際的數據處理過程中還會遇到數據為分類字元串的情況,比如下面這種情況:

這樣的字元串數據既不能轉換為數據,也無從縮放。不過這種數據多是用於表示分類的,我們可以使用編碼分類特徵來對這類數據進行預處理。

在sklearn中,對應的處理方法為preprocessing.LabelEncoder(),下面我們看一個實際的演示:

可以發現,我們的四個城市名稱字元串被編碼為了值為1、0、2、3的數組。那麼如果取回之前的字元串數據呢,可以使用classes_屬性進行取回:

同時還能根據編碼後的數字,來獲取到真實的分類字元串:

6、處理缺失值

在實際的數據集中,還經常會出現有缺失值的情況,其中有一些缺失值表示為None,有一個則是表示為一個空字元串"",面對這種情況,我們可以將有缺失值的行數刪除,但是如果數據量大的話,可能會影響到機器學習模型的準確性。一個比較好的方法是填充這些缺失值。

處理缺失值在pandas模塊中就有很成熟的方法來實現,比如fillna()方法。

我們在data中新增一列空值:

再使用fillna()方法,對空值進行填充:

這樣就完成了缺失值的填充了。

7、更多

除了上述介紹的sklearn的數據預處理方法,還有很多沒有提及到,在sklearn的官方文檔中,大家可以詳細去了解:

三、下一篇

在了解了數據預處理的幾種基本方法後,在下一篇我們將介紹創建一個機器學習回歸模型。

有問題或疑問請關注微信公眾號「州的先生」留言交流。


推薦閱讀:

Python AI極簡入門4:使用機器學習回歸模型預測房價
Leetcodes Solution 32 Longest Valid Parentheses
2進位的一個主要優點是什麼?
集智的廣告日常(1)
每一個不曾起舞的日子都是對生命的辜負

TAG:Python | 編程 | 機器學習 |