2015-10-08 15 views
6

I mają następujące numpy macierz:OneHotEncoder sznurkiem wartości kategoryczne

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

chciałbym zakodowania wartości kategorycznie ('a', 'b', '', 'as'). Próbowałem go zakodować przy użyciu OneHotEncoder. Problem polega na tym, że nie działa ze zmiennymi łańcuchowymi i generuje błąd.

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

wiem, że muszę używać categorical_features pokazać wartości, które mam zamiar kodować i pomyślałem, że poprzez zapewnienie dtype będę w stanie obsłużyć wartości ciągów, ale nie mogę. Czy istnieje sposób kodowania wartości kategorycznych w mojej macierzy?

Odpowiedz

15

Można użyć 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_ przechowuje korespondencję do kolumn:

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

Powiązane problemy