我在尝试将数据离散化以用于分类。它们原本是字符串,我已经将它们转换为数字0,1,2,3。
这是数据的外观(pandas数据框)。我已经将数据框分成了dataLabel
和dataFeatures
Label Feat1 Feat2 Feat3 0 0 3 0 1 1 1 2 2 0 2 2 3 1 3 3
我想使用scikit learn的决策树和多项式朴素贝叶斯,并尝试使用DictVectorizer
来离散化数据
这是我目前的代码
dictvec = dataFeatures.T.to_dict().values()
from sklearn.feature_extraction import DictVectorizer as DVvectorizer = DV( sparse = False )X = vectorizer.fit_transform(dictvec)
Y = dataLabel.ravel()
这是我输入到分类器的数据
from sklearn.naive_bayes import MultinomialNBmnb = MultinomialNB()from sklearn import metricsscores = cross_val_score(mnb, Y, X, cv=10, scoring='accuracy')
我得到一个错误bad input shape (64, 4)
,但我不确定这是否与数据的离散化方式有关。
我的问题是 – 这是离散化数据的正确方法吗?我的代码是否正确,或者是否有更好的方法来做这件事?
回答:
所以错误在于Y和X的顺序错误 – 它应该是scores = cross_val_score(mnb, X, Y, cv=10, scoring='accuracy')
。代码现在运行正常 – 通过研究不同的选项,我发现使用OneHotEncoder
比DictVectorizer
更好