前幾天查了一些與獨熱編碼相關的資料后,發現看不進去...看不太懂,今天又查了一下,然后寫了寫代碼,通過自己寫例子加上別人的解釋后,從結果上觀察,明白了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