我需要將單熱編碼轉換爲由唯一整數表示的類別。用下面的代碼創建的,因此一個熱編碼:Scikit:將單熱編碼轉換爲整數編碼
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
labels = [[1],[2],[3]]
enc.fit(labels)
for x in [1,2,3]:
print(enc.transform([[x]]).toarray())
Out:
[[ 1. 0. 0.]]
[[ 0. 1. 0.]]
[[ 0. 0. 1.]]
可以轉換回一組唯一的整數,例如:
[1,2,3]或[11,37,45 ]或其他每個整數唯一代表一個類的其他任何其他類。
是否可以使用scikit-learn或任何其他python庫?
*更新*
試過:
labels = [[1],[2],[3], [4], [5],[6],[7]]
enc.fit(labels)
lst = []
for x in [1,2,3,4,5,6,7]:
lst.append(enc.transform([[x]]).toarray())
lst
Out:
[array([[ 1., 0., 0., 0., 0., 0., 0.]]),
array([[ 0., 1., 0., 0., 0., 0., 0.]]),
array([[ 0., 0., 1., 0., 0., 0., 0.]]),
array([[ 0., 0., 0., 1., 0., 0., 0.]]),
array([[ 0., 0., 0., 0., 1., 0., 0.]]),
array([[ 0., 0., 0., 0., 0., 1., 0.]]),
array([[ 0., 0., 0., 0., 0., 0., 1.]])]
a = np.array(lst)
np.where(a==1)[1]
Out:
array([0, 0, 0, 0, 0, 0, 0], dtype=int64)
不是我所需要
對於其他數組長度不起作用。請參閱我的更新問題 – dokondr
您構建了(實際上)一維數組的列表,而不是二維numpy數組。 – ml4294
@dokondr如果您只是使用'lst = enc.transform(labels).toarray()'而不是for循環,那麼您應該對這兩種解決方案中的任何一種都沒有問題。 – ml4294