數據預處理之One-Hot

  • 2019 年 10 月 6 日
  • 筆記

數據預處理之One-Hot

0.說在前面

1.什麼是One_Hot?

2.One_Hot編碼處理離散特徵

3.One_Hot編碼實現

4.作者的話

0.說在前面

前面一節我們講了機器學習過程中的特徵工程處理,那麼這一節是不是該到數據預處理了呢,對頭!

接下來,我們進入數據預處理環節,而在數據預處理過程中,非常重要的一節就是One-Hot編碼問題,之前在研究TensorFlow時候,聽說過One-Hot編碼(獨熱編碼),但不清楚是什麼,那麼我們現在一起來深入學習一下什麼是One-Hot編碼,它對我們的機器學習過程的模型又有什麼影響呢?

對於這些問題我們從問題由來,問題分析,及實戰操作,深入探究!

1.什麼是One_Hot?

對於這個問題,之前Google了一下,還涉及暫存器了(one-hot編碼是N位狀態暫存器為N個狀態進行編碼的方式)。。真的無語。這裡不說那些很底層的,我們只需要了解one-hot編碼是將類別變數轉換為機器學習演算法中容易處理的一種形式

概念太抽象了,對太抽了,那麼從實際例子來說明。

如下我們有兩個特徵:

我們看到有兩個特證名為:animal與food,解釋一下兩列值意思,第一列代表的是動物的名字,第二列是食物的個數,比如第一行cat 2 描述為貓吃了兩個食物,這裡是測試數據,主要是想通過,這些數據給予直觀的認識及實際操作。

而對上述數據做one-hot編碼後得結果為:

animal列數據類型是字元串,而第二列是數值型,如果我們能將這些特徵值用0/1表示,是不是在機器學習中,對這些非連續值非常有幫助。

綜上,我們推論出,如果你在處理的數據中,通過特徵工程這一步操作,能夠將特徵的類型判別出來,哪些是連續的,哪些是非連續的,那麼我們就可以對它進行特殊處理,比如此處的one-hot編碼!

對於定義我們有了基礎的了解之後,下面我們來深入了解一下為什麼one-hot編碼可以用來處理非連續(離散)特徵?

2.One_Hot處理離散特徵

在使用one-hot編碼中,我們可以將離散特徵的取值擴展到歐式空間,在機器學習中,我們的研究範圍就是在歐式空間中,首先這一步,保證了能夠適用於機器學習中;而另外對於one-hot處理的離散的特徵的某個取值也就對應了歐式空間的某個點!

那麼對於上面這句話,你會有很多疑問,比如:為何one-hot編碼能將離散特徵映射到歐式空間?

原因是,在統計機器學習演算法中的回歸,分類這些問題中,特徵之間距離的計算或相似度計算非常重要,比如大家常用的k-means,而我們常用的這些計算都在歐式空間中進行相似度計算。換句話說,就是我上面說的研究範圍在歐式空間,保證了one-hot編碼的成立!

3.One_Hot編碼實現

還是以上述animal為例:

數據展示

import pandas as pd  data = {      'animal':['cat','dog','cat','lion'],      'food':[2,3,5,3],  }  data_learn = pd.DataFrame(data)  data_learn

完整特徵編碼

dummies = pd.get_dummies(data_learn,columns=data_learn.columns)  dummies

特定特徵編碼

dummies = pd.get_dummies(data_learn['animal'])  dummies = dummies.add_prefix("{}_".format('animal'))  data_learn.drop('animal',axis=1,inplace=True)  data_learn = data_learn.join(dummies)  data_learn

對於這裡的特定特徵編碼,我這裡只選取了一個特定特徵,你也可以選擇多個,通過列表存儲,遍歷操作,即可實現!

4.作者的話

最後,您如果覺得本公眾號對您有幫助,歡迎您多多支援,轉發,謝謝!