- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经构建了许多 sklearn 分类器模型来执行多标签分类,我想校准它们的 predict_proba
输出,以便获得置信度分数。我还想使用诸如 sklearn.metrics.recall_score
之类的指标来评估它们。
我有 4 个标签要预测,真实标签是多热编码的(例如 [0, 1, 1, 1]
)。结果,CalibratedClassifierCV
不直接接受我的数据:
clf = tree.DecisionTreeClassifier(max_depth=15)
clf = clf.fit(train_X, train_Y)
calibrated_clf = CalibratedClassifierCV(clf, cv="prefit", method="sigmoid")
calibrated_clf.fit(dev_X, dev_Y)
这会返回一个错误:
ValueError: classes [[0 1]
[0 1]
[0 1]
[0 1]] mismatch with the labels [0 1 2 3] found in the data
因此,我尝试将其包装在 OneVsRestClassifier
中:
clf = OneVsRestClassifier(tree.DecisionTreeClassifier(max_depth=15), n_jobs=4)
clf = clf.fit(train_X, train_Y)
calibrated_clf = CalibratedClassifierCV(clf, cv="prefit", method="sigmoid")
calibrated_clf.fit(dev_X, dev_Y)
请注意,MultiOutputClassifier
和 ClassifierChain
不起作用,即使它们可能更适合我的问题。
有效,但校准分类器的预测
输出是多类而不是多标签,因为its implementation .有四个类([0 1 2 3]
)但是如果不需要放标签,它仍然预测一个0
。
通过校准曲线进一步检查后,发现包裹在校准分类器中的基本估计器根本没有校准。也就是说,(calibrated_clf.calibrated_classifiers_)[0].base_estimator
返回与校准前相同的 clf
。
我想观察我的(已校准)模型执行确定性(predict
)和概率性(predict_proba
)预测的性能。我应该如何设计我的模型/将东西包装在其他容器中以获得每个标签的校准概率和可理解的标签预测?
最佳答案
在您的示例中,您使用的是 DecisionTreeClassifier
,默认情况下为 support targets维度 (n, m),其中 m > 1。
但是如果你想得到 marginal probability 的结果然后使用 OneVsRestClassifier。
请注意 CalibratedClassifierCV
需要 target to be 1d所以“技巧”是扩展它以支持带有 MultiOutputClassifier 的多标签分类.
完整示例
from sklearn.datasets import make_multilabel_classification
from sklearn.tree import DecisionTreeClassifier
from sklearn.multioutput import MultiOutputClassifier
from sklearn.model_selection import train_test_split, StratifiedKFold
import numpy as np
# Generate a sample multilabel target
X, y = make_multilabel_classification(n_classes=4, random_state=0)
y
>>>
array([[1, 0, 1, 0],
[0, 0, 0, 0],
[1, 0, 1, 0],
...
[0, 0, 0, 0],
[0, 1, 1, 1],
[1, 1, 0, 1]])
# Split in train/test
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.9, random_state=42
)
# Splits Stratify target variable
cv = StratifiedKFold(n_splits=2)
# Decision tree support by default multiclass target or use OneVsRest if marginal probabilities
clf = OneVsRestClassifier(DecisionTreeClassifier(max_depth=10))
# Calibrate estimator probabilities
calibrated_clf = CalibratedClassifierCV(base_estimator=clf, cv=cv)
# calibrated_clf target is one dimensional, extend classifier to multi-target classification.
multioutput_clf = MultiOutputClassifier(calibrated_clf).fit(X_train, y_train)
# Check predict
multioutput_clf.predict(X_test[-5:])
>>>
array([[0, 0, 1, 1],
[0, 0, 0, 1],
[0, 0, 0, 1],
[0, 0, 0, 1],
[0, 0, 0, 1]])
# Check predict_proba
multioutput_clf.predict_proba(X_test[-5:])
>>>
[array([[0.78333315, 0.21666685],
[0.78333315, 0.21666685],
[0.78333315, 0.21666685],
[0.78333315, 0.21666685],
[0.78333315, 0.21666685]]),
array([[0.59166537, 0.40833463],
[0.59166537, 0.40833463],
[0.40833361, 0.59166639],
[0.59166537, 0.40833463],
[0.59166537, 0.40833463]]),
array([[0.61666922, 0.38333078],
[0.61666427, 0.38333573],
[0.80000098, 0.19999902],
[0.61666427, 0.38333573],
[0.61666427, 0.38333573]]),
array([[0.26874774, 0.73125226],
[0.26874774, 0.73125226],
[0.45208444, 0.54791556],
[0.26874774, 0.73125226],
[0.26874774, 0.73125226]])]
请注意,predict_proba
的结果是一个包含 4 个数组的列表,每个数组是属于第 i 类的概率。例如,第一个数组的第一个样本里面是第一个样本属于第1类的概率等等。
关于校准曲线,scikit-learn 提供了示例来绘制 two dimension 的概率路径和 three dimension目标。
关于python - 学习 : Calibrate a multi-label classification with CalibratedClassifierCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70388422/
在我们正在开发的定制 Android 设备中,磁力计放置在非常靠近内部扬声器的位置。扬声器中的永磁体会影响磁力计的值。 x、y、z 值已达到磁力计可以报告的最大值。 重新校准可以解决这个问题吗? 是否
我正在学习相机矩阵的东西。我已经知道我可以通过在对象空间的平面上使用四个点来获得相机的单应性(3*3 矩阵)。我想知道我们是否可以得到不在平面上的四个点的单应性?如果是,我怎样才能得到矩阵?我应该看什
当尝试使用此页面中的说明在 Linux 上安装 PDF 转换器 Calibre 时: http://calibre-ebook.com/download_linux 我收到这个错误: # python
我正在使用 Python 和 scikit-learn 处理具有不同分类器的多类分类问题。我想使用预测概率,基本上是为了比较特定情况下不同分类器的预测概率。 我开始阅读有关“校准”的内容,例如在 sc
我尝试通过命令行使用 calibre 将文档转换为 epub,但收到此错误。 Traceback (most recent call last): File "site.py", line 61,
我正在使用 Calibre 从各种新闻源下载提要并将它们发送到我的 kindle。我想知道是否可以使用自定义配方来仅下载标题或内容中包含“魔法”关键字的文章。如果您使用自定义配方并覆盖 parse_f
本文整理了Java中boofcv.alg.geo.calibration.Zhang99ComputeTargetHomography类的一些代码示例,展示了Zhang99ComputeTargetH
本文整理了Java中boofcv.alg.geo.calibration.Zhang99DecomposeHomography类的一些代码示例,展示了Zhang99DecomposeHomograph
本文整理了Java中boofcv.alg.geo.calibration.Zhang99OptimizationJacobian类的一些代码示例,展示了Zhang99OptimizationJacob
本文整理了Java中boofcv.alg.geo.calibration.Zhang99IntrinsicParam类的一些代码示例,展示了Zhang99IntrinsicParam类的具体用法。这些
本文整理了Java中boofcv.alg.geo.calibration.Zhang99CalibrationMatrixFromHomographies类的一些代码示例,展示了Zhang99Cali
我想使用 Matlab Camera Calibrator app ,但我无法确定相机内在函数的主要点,即 c_x 和 c_y(参见 here)是否使用从 1 开始的标准 Matlab 索引(参见 h
作为机械罗盘的用户,我注意到磁力计提供的航向经常偏离 45 度或更多,尽管在这种情况下没有出现校准显示。 如果我在户外测试或使用我的应用程序,我会在罗盘 View 出现时校准磁力计。这行得通,看来这是
我正在尝试为我的程序实现倒计时功能。这是一个秒计时器,所以我使用一个时间间隔为 1.0 秒的 NSTimer 对象来更新 UI。但为了不累积误差(每1.0秒间隔会产生一点延迟),程序会计算当前时间与开
我正在使用 OpenCv 2.4.10 (C++ API) 中的 fisheye::calibrate() 函数来校准鱼眼相机。当我对针孔相机使用标准 cv::calibrateCamera() 函数
所以我使用棋盘和 matlab 相机校准工具箱进行了相机校准。因此,我为该特定 session 获得的内在矩阵如下: 内部矩阵:[349.3601,0,0;0,349.7267,0;258.0883,
我希望能够从 Calibre 程序内部打开 .exe。 http://calibre-ebook.com/ (用Python编码的开源代码) 目前,详细信息窗口将显示用户定义的 URL,该 URL 将
本文整理了Java中boofcv.alg.geo.calibration.Zhang99ComputeTargetHomography.computeHomography()方法的一些代码示例,展示了
本文整理了Java中boofcv.alg.geo.calibration.Zhang99ComputeTargetHomography.getHomography()方法的一些代码示例,展示了Zhan
本文整理了Java中boofcv.alg.geo.calibration.Zhang99ComputeTargetHomography.()方法的一些代码示例,展示了Zhang99ComputeTar
我是一名优秀的程序员,十分优秀!