我有一个包含10个类的多类分类任务。因此,我使用sklearn的OneHotEncoder将单列标签转换为10列标签。我试图拟合训练数据。虽然我可以使用RandomForestClassifier执行此操作,但在使用GaussianNB时出现以下错误消息:
ValueError: bad input shape (1203L, 10L)
我理解这两个分类器中允许的y形状是不同的:
GaussianNB:
y : array-like, shape (n_samples,)
RandomForest:
y : array-like, shape = [n_samples] or [n_samples, n_outputs]
问题是,这是为什么?这不会与"All classifiers in scikit-learn do multiclass classification out-of-the-box"相矛盾吗?有什么方法可以绕过它吗?谢谢!
答案 0 :(得分:5)
问题是,这是为什么?
这是因为一个轻微的误解,在scikit中 - 学习不编码标签,您将其作为标签的一维向量传递,因此而不是
1 0 0
0 1 0
0 0 1
你真的通过了
1 2 3
那么为什么随机森林接受不同的方案呢?因为多类设置不!它适用于多标签,其中每个实例都可以有许多标签,例如
1 1 0
1 1 1
0 0 0
这不会与#34相矛盾; scikit-learn中的所有分类器都可以开箱即用的多类分类"?
相反 - 这是最简单的解决方案 - 除非是多标签,否则永远不要求一热,
有什么办法吗?
是的,只是不要编码 - 传递原始标签: - )