gpt4 book ai didi

python - 具有独立类结果的 Scikit SGD 分类器?

转载 作者:太空宇宙 更新时间:2023-11-04 02:01:26 28 4
gpt4 key购买 nike

我用scikit做了多类分类。但我希望独立预测每个类(class)的结果,而不是将它们相加为 1。

我知道,它类似于多标签。但是必须为预测输出中的每个类生成独立的 0-1 值。

clf = OneVsRestClassifier(SGDClassifier(alpha=0.001, loss="log", random_state=42,
max_iter=100, shuffle=True, verbose=1))


Output:
[0.04188954 0.01330129 0.01330501 0.02050405 0.03726504 0.01412006
0.01753864 0.01250115 0.02342872 0.0124999 0.05234852 0.0161394
0.01250032 0.01330749 0.01403075 0.0149792 0.0125048 0.01250406
0.01412335 0.01413113 0.01412246 0.06543099 0.01249486 0.01250054
0.01308784 0.01330463 0.01250242 0.02252353 0.02037271 0.0133038
0.01250215 0.0125009 0.01537566 0.02023355 0.01600915 0.01762224
0.01496796 0.01496522 0.01412407 0.01250198 0.01239722 0.01249967
0.01763284 0.01573462 0.01250276 0.01451515 0.01330437 0.01329294
0.01249999 0.01485671 0.01249419 0.01858113 0.01250192 0.01585085
0.01330439 0.01250573 0.01250585 0.01715666 0.01249392]

总结我得到 1。但我希望他们每个人独立地与 0-1 进行比较。怎么可能?

根据 scikit 说明,“在单标签多类情况下,返回矩阵的行总和为 1。”

引用:https://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html

如何覆盖这个?

创建二维矩阵:

The shape of matrix is (342, 2)

[[ 4 0]
[ 4 0]
[ 4 0]
[ 21 0]
[ 21 0]]

出现错误:

ValueError: Multioutput target data is not supported with label binarization

使用标签二值化器我得到了 (349,59) 有 59 个标签和 349 个样本。

使用多输出分类器

clf = SGDClassifier(loss="log", random_state=42, verbose=0)
clf = MultiOutputClassifier(clf)

结果:

clf.predict_proba(x_test)

[array([[0.99310559, 0.00689441]]), array([[0.9942846, 0.0057154]]), array([[0.0051056, 0.9948944]])]

根据评论,https://scikit-learn.org/stable/modules/generated/sklearn.multioutput.MultiOutputClassifier.html#sklearn.multioutput.MultiOutputClassifier.predict_proba

结果是有 3 个类。

如何将其解释为单一值?例如:array([[0.99310559, 0.00689441]]) => 0.5 或 o.6

最佳答案

如果您想将问题解决为多标签问题,请使用 multiOutput 包装器而不是 OneVsRestClassifier()

这是一个例子:

from sklearn.multioutput import MultiOutputClassifier
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import load_iris
from sklearn import preprocessing

X,y = load_iris(return_X_y=True)

clf = MultiOutputClassifier(SGDClassifier(loss='log',max_iter =10))
lb = preprocessing.LabelBinarizer()
y_onehot = lb.fit_transform(y)
clf.fit(X, y_onehot)

clf.predict_proba([X[0]])

输出:

[array([[0., 1.]]),
array([[1.00000000e+00, 5.63826474e-52]]),
array([[1., 0.]])]

第二个元素是给定记录属于该类的概率。现在,您可以看到所有类的概率总和不为 1。

关于python - 具有独立类结果的 Scikit SGD 分类器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55610763/

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