Geo*_*Liu 2 machine-learning scikit-learn
我有一个10类的多类分类任务.因此,我使用sklearn的OneHotEncoder将单列标签转换为10列标签.我试图拟合训练数据.虽然我能够使用RandomForestClassifier执行此操作,但在使用GaussianNB时出现以下错误消息:
ValueError: bad input shape (1203L, 10L)
Run Code Online (Sandbox Code Playgroud)
我理解这两个分类器中允许的y形状是不同的:
GaussianNB:
y : array-like, shape (n_samples,)
Run Code Online (Sandbox Code Playgroud)
随机森林:
y : array-like, shape = [n_samples] or [n_samples, n_outputs]
Run Code Online (Sandbox Code Playgroud)
问题是,这是为什么?难道这不会与"scikit-learn中的所有分类器开箱即用的多类分类"相矛盾吗?有什么方法可以绕过它吗?谢谢!
问题是,这是为什么?
这是因为一个轻微的误解,在scikit-learn你不编码标签,你把它作为标签的一维向量传递,因此而不是
1 0 0
0 1 0
0 0 1
Run Code Online (Sandbox Code Playgroud)
你真的通过了
1 2 3
Run Code Online (Sandbox Code Playgroud)
那么为什么随机森林会接受不同的方案呢?因为它不适合多类设置!它适用于多标签,其中每个实例都可以有许多标签,例如
1 1 0
1 1 1
0 0 0
Run Code Online (Sandbox Code Playgroud)
难道这不会与"scikit-learn中的所有分类器开箱即用的多类分类"相矛盾吗?
相反 - 这是最简单的解决方案 - 除非是多标签,否则永远不要求一热
有什么方法可以绕过它吗?
是的,只是不编码 - 传递原始标签:-)
| 归档时间: |
|
| 查看次数: |
1154 次 |
| 最近记录: |