2015-10-08 4 views
6

Iは、以下のnumpyの行列があります。私は、カテゴリ値をエンコードしたいOneHotEncoder

M = [ 
    ['a', 5, 0.2, ''], 
    ['a', 2, 1.3, 'as'], 
    ['b', 1, 2.3, 'as'], 
] 
M = np.array(M) 

'a', 'b', '', 'as'を)。私はOneHotEncoderを使ってそれをエンコードしようとしました。問題は、文字列変数では機能しないため、エラーが生成されることです。

enc = preprocessing.OneHotEncoder() 
enc.fit(M) 
enc.transform(M).toarray() 

は、私はエンコードするつもりですし、私はdtypeを提供することにより、私は、文字列値を処理できるようになると思ったどの値を示すためにcategorical_featuresを使用する必要があることを知っているが、私はできません。それで、私のマトリックスにカテゴリの値をエンコードする方法はありますか?

答えて

15

あなたはDictVectorizerを使用することができます。

from sklearn.feature_extraction import DictVectorizer 
import pandas as pd 

dv = DictVectorizer(sparse=False) 
df = pd.DataFrame(M).convert_objects(convert_numeric=True) 
dv.fit_transform(df.to_dict(orient='records')) 

array([[ 5. , 0.2, 1. , 0. , 1. , 0. ], 
     [ 2. , 1.3, 1. , 0. , 0. , 1. ], 
     [ 1. , 2.3, 0. , 1. , 0. , 1. ]]) 

dv.feature_names_は、列に対応を保持している:

[1, 2, '0=a', '0=b', '3=', '3=as']