OneHotEncoder dengan nilai kategoris string

Saya memiliki matriks numpy berikut:

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

Saya ingin menyandikan nilai kategorikal ('a', 'b', '', 'as'). Saya mencoba menyandikannya menggunakan OneHotEncoder. Masalahnya adalah tidak berfungsi dengan variabel string dan menghasilkan kesalahan.

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

Saya tahu bahwa saya harus menggunakan categorical_features untuk menunjukkan nilai mana yang akan saya enkode dan saya pikir dengan memberikan dtype saya akan dapat menangani nilai string, tetapi saya tidak bisa. Jadi apakah ada cara untuk menyandikan nilai kategorikal dalam matriks saya?


person Salvador Dali    schedule 08.10.2015    source sumber


Jawaban (1)


Anda dapat menggunakan 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_ menyimpan korespondensi pada kolom:

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

person hellpanderr    schedule 08.10.2015