Scikit-learn DictVectorizer用于分类变量

时间:2015-02-08 11:35:34

标签: python csv machine-learning scikit-learn

我有一个.csv文件,条目如下所示:

b0002,0,> 0.00,3,< = 0.644,< = 0.472,< = 0.690,< = 0.069672,> 15.00,> 21.00,> 16.00,> 6.00,> ; 16.00,> 21.00,> 9.00,> 11.00,> 20.00,> 7.00,> 4.00,> 9.00,> 9.00,> 13.00,> 8.00,> 14.00,> 3.00 ,“(1.00,8.00)”,> 10.00,> 9.00,> 183.00,1

我想使用GaussianNB()对此进行分类。到目前为止,我设法使用另一个带有数字数据的csv来做到这一点,现在我想使用它但是我被卡住了。

为分类器转换分类数据的最佳方法是什么?

此:

p = read_csv("C:path to\\file.csv")

trainSet = p.iloc[1:20,2:5] //first 20 rows and just 3 attributes
dic = trainSet.transpose().to_dict()

vec = DictVectorizer()
vec.fit_transform(dic)

发出此错误:

Traceback (most recent call last):
  File "\prova.py", line 23, in <module>
vec.fit_transform(dic)
File "\dict_vectorizer.py", line 142, in fit_transform
return self.transform(X)
File "\\dict_vectorizer.py", line 230, in transform
values.append(dtype(v))
TypeError: float() argument must be a string or a number

为分类器转换分类数据的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

问题在于转置的数据框&#39;在调用dict时返回嵌套.to_dict()

#create a dummy frame
df = pd.DataFrame({'factor':['a','a','a','b','c','c','c'], 'factor1':['d','a','d','b','c','d','c'], 'num':range(1,8)})

#transpose the dataframe and get the inner dict from to_dict()
feats =df.T().to_dict().values()

from sklearn.feature_extraction import DictVectorizer
Dvec = DictVectorizer()
Dvec.fit_transform(feats).toarray()

解决方案是致电.values()上的dict以获取内部dict

Dvec获取新的功能名称:

Dvec.get_feature_names()
相关问题