我用scikit做过多类分类。但是我想要对每个班级的结果进行独立预测,而不是将它们加起来为 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:标签二值化不支持多输出目标数据
使用我得到的标签二值化器 (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 个班级。
我如何将其解释为单个值?例如:数组([[0.99310559, 0.00689441]]) => 0.5 或 o.6
饮歌长啸
相关分类