如何在一些sklearn分类器中使用单热编码标签?

时间:2016-11-13 20:44:29

标签: machine-learning scikit-learn

我有一个包含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"相矛盾吗?有什么方法可以绕过它吗?谢谢!

1 个答案:

答案 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中的所有分类器都可以开箱即用的多类分类"?

相反 - 这是最简单的解决方案 - 除非是多标签,否则永远不要求一热,

  

有什么办法吗?

是的,只是不要编码 - 传递原始标签: - )