我正在尝试准备数据以输入决策树和多项式朴素贝叶斯分类器。
这就是我的数据(pandas dataframe)
self.save_path or value
我已将数据拆分为dataLabel和dataFeatures。
使用Label Feat1 Feat2 Feat3 Feat4
0 1 3 2 1
1 0 1 1 2
2 2 2 1 1
3 3 3 2 3
我需要对功能进行离散化,以便分类器将它们视为分类而不是数字。
我正在尝试使用dataLabel.ravel()
OneHotEncoder
我收到此错误 - enc = OneHotEncoder()
enc.fit(dataFeatures)
chk = enc.transform(dataFeatures)
from sklearn.naive_bayes import MultinomialNB
mnb = MultinomialNB()
from sklearn import metrics
from sklearn.cross_validation import cross_val_score
scores = cross_val_score(mnb, Y, chk, cv=10, scoring='accuracy')
这是标签和输入的形状
bad input shape (64, 16)
dataLabel.shape = 72
为什么分类器不接受onehotencoded功能?
编辑 - 整个堆栈跟踪代码
chk.shape = 72,16
ValueError:输入形状错误(64,16)
答案 0 :(得分:1)
首先,您必须交换chk
和Y
考虑cross_val_score
文档。接下来,你没有指定Y
是什么,所以我希望它是一个1d阵列。而最后一个而不是单独使用它更好地使用Pipeline
在一个分类器中组合所有变换器。像那样:
from sklearn import metrics
from sklearn.cross_validation import cross_val_score
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
clf = Pipeline([
('transformer', OneHotEncoder()),
('estimator', MultinomialNB()),
])
scores = cross_val_score(clf, dataFeatures.values, Y, cv=10, scoring='accuracy')