OneHotEncoded功能在输入分类器时导致错误

时间:2016-07-25 17:41:47

标签: python pandas machine-learning scikit-learn categorical-data

我正在尝试准备数据以输入决策树和多项式朴素贝叶斯分类器。

这就是我的数据(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

我需要对功能进行离散化,以便分类器将它们视为分类而不是数字。

我正在尝试使用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)

1 个答案:

答案 0 :(得分:1)

首先,您必须交换chkY考虑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')