Y += [label] * lenx #批量添加lenx個標(biāo)簽label list * int 意思是將數(shù)組重復(fù) int 次并依次連接形成一個新數(shù)組
one-hot編碼(實(shí)現(xiàn)將分類特征的每個元素轉(zhuǎn)化為一個可以用來計(jì)算的值)
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
enc.fit([[0, 0, 3],
[1, 1, 0],
[0, 2, 1],
[1, 0, 2]])
ans = enc.transform([[0, 1, 3]]).toarray() # 如果不加 toarray() 的話,輸出的是稀疏的存儲格式,即索引加值的形式,也可以通過參數(shù)指定 sparse = False 來達(dá)到同樣的效果
print(ans) # 輸出 [[ 1. 0. 0. 1. 0. 0. 0. 0. 1.]]
下面解釋輸出結(jié)果的意思。對于輸入數(shù)組,這依舊是把每一行當(dāng)作一個樣本,每一列當(dāng)作一個特征,
第一列 [0,1,0,1],也就是說它有兩個取值 0 或者 1,那么 one-hot 就會使用兩位來表示這個特征,[1,0] 表示 0, [0,1] 表示 1,在上例輸出結(jié)果中的前兩位 [1,0...] 也就是表示該特征為 0
第二列 [0,1,2,0],它有三種值,那么 one-hot 就會使用三位來表示這個特征,[1,0,0] 表示 0, [0,1,0] 表示 1,[0,0,1] 表示 2,在上例輸出結(jié)果中的第三位到第六位 [...0,1,0,0...] 也就是表示該特征為 1
第三列 [3,0,1,2],它有四種值,那么 one-hot 就會使用四位來表示這個特征,[1,0,0,0] 表示 0, [0,1,0,0] 表示 1,[0,0,1,0] 表示 2,[0,0,0,1] 表示 3,在上例輸出結(jié)果中的最后四位 [...0,0,0,1] 也就是表示該特征為 3