5

次のようなデータを考慮します。

from sklearn.preprocessing import OneHotEncoder
import numpy as np
dt = 'object, i4, i4'
d = np.array([('aaa', 1, 1), ('bbb', 2, 2)], dtype=dt)  

OHE 機能を使用してテキスト列を除外したい。

以下が機能しないのはなぜですか?

ohe = OneHotEncoder(categorical_features=np.array([False,True,True], dtype=bool))       
ohe.fit(d)
ValueError: could not convert string to float: 'bbb'

ドキュメントには次のように書かれています:

categorical_features: “all” or array of indices or mask :
  Specify what features are treated as categorical.
   ‘all’ (default): All features are treated as categorical.
   array of indices: Array of categorical feature indices.
   mask: Array of length n_features and with dtype=bool.

マスクを使用していますが、まだフロートに変換しようとしています。

使っても

ohe = OneHotEncoder(categorical_features=np.array([False,True,True], dtype=bool), 
                    dtype=dt)        
ohe.fit(d)

同じエラー。

また、「インデックスの配列」の場合:

ohe = OneHotEncoder(categorical_features=np.array([1, 2]), dtype=dt)        
ohe.fit(d)
4

3 に答える 3

2

Scikit-Learn のすべての推定器は、数値入力専用に設計されていることを理解する必要があります。したがって、この観点からすると、テキスト列をこの形式のままにしておく意味はありません。そのテキスト列を数値に変換するか、削除する必要があります。

Pandas DataFrame からデータセットを取得した場合は、次の小さなラッパーを見ることができます: https://github.com/paulgb/sklearn-pandas。必要なすべての列を同時に変換するのに役立ちます(または一部の行を数値形式のままにします)

import pandas as pd
import numpy as np
from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import OneHotEncoder

data = pd.DataFrame({'text':['aaa', 'bbb'], 'number_1':[1, 1], 'number_2':[2, 2]})

#    number_1  number_2 text
# 0         1         2  aaa
# 1         1         2  bbb

# SomeEncoder here must be any encoder which will help you to get
# numerical representation from text column
mapper = DataFrameMapper([
    ('text', SomeEncoder),
    (['number_1', 'number_2'], OneHotEncoder())
])
mapper.fit_transform(data)
于 2015-12-10T13:09:22.090 に答える
2

ここに混乱があると思います。数値を入力する必要がありますが、エンコーダー内で、どの値がカテゴリーでないかを指定できます。

このトランスフォーマーへの入力は、整数の行列である必要があり、カテゴリ (離散) 機能によって取得される値を示します。

したがって、以下の例では、とに変更aaaしています。このようにして、および数値と区別されます。5bbb612

d = np.array([[5, 1, 1], [6, 2, 2]])
ohe = OneHotEncoder(categorical_features=np.array([True,False,False], dtype=bool))
ohe.fit(d)

これで、機能カテゴリを確認できます。

ohe.active_features_
Out[22]: array([5, 6], dtype=int64)
于 2015-12-04T14:58:21.067 に答える