ワンホットエンコーディングを一意の整数で表されるカテゴリに変換する必要があります。次のコードで作成されたので、ワンホットエンコーディング:Scikit:ワンホットエンコーディングを整数でエンコーディングに変換
[1,2,3]または[11,37、45:
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.]]
は、例えば、一意の整数の集合に変換することでし]または各整数が一意的に単一のクラスを表すその他のもの。
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)
ない私はあなたが以下のようにnp.where
を使用していることを行うことができます
他の配列長では機能しません。私の更新された質問 – dokondr
を参照してください(実際には)二次元配列ではなく、一次元配列のリストを作成しました。 – ml4294
@dokondr forループの代わりに単に 'lst = enc.transform(labels).toarray()'を使うと、どちらの解決法にも問題はありません。 – ml4294