gpt4 book ai didi

python - LabelBinarizer 在多类示例中产生不同的结果

转载 作者:行者123 更新时间:2023-11-30 08:36:04 24 4
gpt4 key购买 nike

执行 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]])

我希望标签二值化器对目标进行编码,但不会对分类器产生影响。然而它产生了不同的结果:

>>> clf.fit(X, y).predict(X)
array([[1, 0, 0],
[1, 0, 0],
[0, 1, 0],
[0, 0, 0],
[0, 0, 0]])

Google Colab 上的笔记本(奇怪的是,相同的代码产生不同的错误):

最佳答案

OneVsRestClassifier 在底层应用 LabelBinarizer 本身(源代码 sklearn/multiclass.py ):

def fit(self, X, y):
...
self.label_binarizer_ = LabelBinarizer(sparse_output=True)
Y = self.label_binarizer_.fit_transform(y)
Y = Y.tocsc()
self.classes_ = self.label_binarizer_.classes_

因此不需要额外的手动转换。事实上,它将您的单热编码 y 解释为多标签输入。来自 documentation :

y : (sparse) array-like, shape = [n_samples, ], [n_samples, n_classes]

Multi-class targets. An indicator matrix turns on multilabel classification.

关于python - LabelBinarizer 在多类示例中产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49416716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com