1

私はOneHotEncoder自分のプロジェクトで Scikit-learn のを使用しています。n_valueそして、が に設定されている場合、各ワンホット ベクトルのサイズを知る必要がありますauto。私はそれを示すと思っn_value_たが、訓練サンプルを試す以外に方法がないようだ. 問題を示すために、このおもちゃのサンプル コードを作成しました。他の解決策を知っていますか?

from sklearn.preprocessing import OneHotEncoder

data = [[1], [3], [5]] # 3 different features

encoder = OneHotEncoder()
encoder.fit(data)

print(len(encoder.transform([data[0]]).toarray()[0])) # 3 number of dimensions in one-hot-vector
print(encoder.n_values_) # [6] == len(range(5))
4

2 に答える 2

1

これはあなたが探しているものですか?

>>> encoder.active_features_
array([1, 3, 5])

>>> len(encoder.active_features_)
3
于 2016-10-13T16:22:41.930 に答える
0

より良い解決策は、ベクトル サイズを で定義することだと思いますn_values。自動オプションは、範囲外のフィーチャー番号と比較して欠落しているフィーチャーで奇妙な動作を作成するためです。この例をもう一度試すと、欠落している数値に対してゼロ ベクトルが生成されます。

from sklearn.preprocessing import OneHotEncoder

data = [[1], [3], [5]] 

encoder = OneHotEncoder()
encoder.fit(data)

print(encoder.transform([
            [0],
            [1],
            [2],
            [3],
            [4],
            [5]
        ]).toarray()) 

結果は次のとおりです。

[[ 0.  0.  0.]
 [ 1.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  1.]]

そして、私が試し6てみると、エラーがスローされます:

print(encoder.transform([[6]]).toarray()) 

結果:

ValueError: unknown categorical feature present [6] during transform.

前述したように、ベスト プラクティスは最初からベクトルのサイズを定義することです。

from sklearn.preprocessing import OneHotEncoder

data = [[1], [3], [5]] 

encoder = OneHotEncoder(n_values=50) # maximum size for my vocabulary, fits for my memory and my future development.
encoder.fit(data)

この場合、active_features_属性はencoderもうないことに注意してください。

于 2016-10-13T18:57:33.367 に答える