0

Python と scikit-learn を使用して、onehotencoding プロセスの出力を理解しようとしています。1 つのホット エンコーディングのアイデアが得られると思います。つまり、離散値を「on」の値を持つ拡張特徴ベクトルに変換して、分類のメンバーシップを識別します。おそらく私はそれを間違えたので、混乱していますが、それが私の理解です。

したがって、ここのドキュメントから: http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

次の例が表示されます。

>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])  
OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>,
       handle_unknown='error', n_values='auto', sparse=True)
>>> enc.n_values_
array([2, 3, 4])
>>> enc.feature_indices_
array([0, 2, 5, 9])
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.]])

[[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]] が [[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]]?

変換引数 [0, 1, 1] はどのように使用されますか?

これについて何か助けてくれてありがとう

ジョン

4

2 に答える 2

0

それで...さらに掘り下げた後、これを理解し、他の人のために答える1つの方法を明確にする私の試みがここにあります.

1) 元のデータセットは [0, 0, 3]、[1, 1, 0]、[0, 2, 1]、[1, 0, 2]

2) 次に、これらを (位置ごとに) 一意の順序付けられた値のリストに減らす必要があります。

そう...

For position 1 (0, 1, 0, 1) --> [0, 1]
For position 2 (0, 1, 2, 0) --> [0, 1, 2]
For position 3 (3, 0, 1, 2) --> [0, 1, 2, 3]

これを変換するときは、変換された配列内の各位置アイテムを、一意の順序付けられたアイテムのリスト内の位置と比較するだけです

変換された配列 [0, 1, 1] の場合

The first '0' generates a [1, 0] ('0' matches value in position one, not position two)
The next '1' generates a [0, 1, 0] ('1' only matches value in position two)
the last '1' generates a [0, 1, 0, 0] ('1' only matches value in position two)

まとめると、これは [1, 0, 0, 1, 0, 0, 1, 0, 0] に相当します。

他の多くのデータセットでこれを試しましたが、ロジックは一貫しています。

于 2016-12-27T15:01:23.387 に答える