One-Hot Encoding(獨熱編碼)


  前幾天查了一些與獨熱編碼相關的資料后,發現看不進去...看不太懂,今天又查了一下,然后寫了寫代碼,通過自己寫例子加上別人的解釋后,從結果上觀察,明白了sklearn中獨熱編碼做了什么事。

  下面舉個例子解釋一下:

  code:

from sklearn.preprocessing import OneHotEncoder
import numpy as np

train = np.array([
                    [0, 1, 2],
                    [1, 1, 0],
                    [2, 0, 1],
                    [3, 1, 1]
                 ])
one_hot = OneHotEncoder()
one_hot.fit(train)
print(one_hot.transform([[1, 0, 1]]).toarray())

  Output:

   這里的output輸出的是什么?怎么與例子中的矩陣關系起來?例子給的是一組4行3列的矩陣,從列來看它的特點是第1列4個數都不同,第2列只有二進制數(0,1),第3列有3個不同的數。

  這樣的數值矩陣對應的文本類表單可以是這樣的:

姓名 性別 成績
鳴人:0 男:1 32:2
佐助:1 男:1 99:0
小櫻:2 女:0 87:1
佐井:3 男:1 87:1

  於是

one_hot.transform([[1, 0, 1]]).toarray()

  編碼的結果這樣理解:

  第1列:矩陣第一列有4個不同的數,用4位表示,1出現在[0,1,2,3]中的下標為1的位置上,所以對應的獨熱碼為:[0,1,0,0]。

  第2列:矩陣第二列有2個不同的數,用2位表示,0出現在[0,1]中的下標為0的位置上,所以對應的獨熱碼為:[1,0]。

  第3列:矩陣第三列有3個不同的數,用3位表示,1出現在[0,1,2]的下標為1的位置上,所以對應的獨熱碼為:[0,1,0]。

  可以用例子證明上面的結論:

  Input:[[1,0,2]]

  Output:

  Input:[[3,1,1]

  Output:

  假如要進行編碼的數據沒有出現在對應列中將會出現錯誤:

  Input:[[4,1,1]]

  Output:

  等等,還可以自行寫其他例子驗證一下。

  現在我們就知道了獨熱編碼做了什么了,它先統計每列中每個數據出現的次數並去除重復的,然后在沒有重復數據的數據集上對不同列的數據進行相應的編碼。按這樣的規則編碼的結果就可以只有0,1出現了。

  參考資料:

    1.https://blog.csdn.net/google19890102/article/details/44039761

    2.https://blog.csdn.net/pipisorry/article/details/61193868

    3.https://blog.csdn.net/counsellor/article/details/60145426


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM