【发布时间】:2018-08-31 04:27:39
【问题描述】:
在执行 scikit-learn 教程中的多类示例时
我遇到了一些奇怪的事情。
>>> import sklearn
>>> sklearn.__version__
0.19.1
>>> from sklearn.svm import SVC
>>> from sklearn.multiclass import OneVsRestClassifier
>>> from sklearn.preprocessing import LabelBinarizer
>>> X = [[1, 2], [2, 4], [4, 5], [3, 2], [3, 1]]
>>> y = [0, 0, 1, 1, 2] # Three classes
>>> clf = OneVsRestClassifier(estimator=SVC(random_state=0))
>>> clf.fit(X, y).predict(X)
array([0, 0, 1, 1, 2])
这一切都很好。现在使用 one-hot 编码:
>>> y = LabelBinarizer().fit_transform(y)
>>> y
array([[1, 0, 0],
[1, 0, 0],
[0, 1, 0],
[0, 1, 0],
[0, 0, 1]])
我希望标签 binarizer 只encode 目标,但对分类器没有影响。但是它会产生不同的结果:
>>> clf.fit(X, y).predict(X)
array([[1, 0, 0],
[1, 0, 0],
[0, 1, 0],
[0, 0, 0],
[0, 0, 0]])
Google Colab 上的笔记本(奇怪的是,相同的代码会产生不同的错误):
【问题讨论】:
标签: python machine-learning scikit-learn svm one-hot-encoding