我有以下numpy矩阵:
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()
我知道我必须使用categorical_features
来显示我要编码的值,我认为通过提供dtype
,我将能够处理字符串值,但我不能。有没有一种方法可以在矩阵中编码分类值?
您可以使用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']