- 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/
我对处理多标签分类问题的方法有疑问。 根据文献综述,我发现一种最常用的方法是问题转化方法。它将多标签问题转化为多个单标签问题,分类结果只是每个单标签分类器的简单并集,采用二元相关方法。 由于单标签问题
我正在编写一个 Spark 应用程序,并且希望使用 MLlib 中的算法。在 API 文档中,我发现同一算法有两个不同的类。 例如,org.apache.spark.ml.classification
假设我们有一个经过训练的卷积神经网络,可以在 Tensor-Flow 中对(w.l.o.g. 灰度)图像进行分类。 给定经过训练的网络和测试图像,我们可以追踪其中哪些像素是显着的,或者“等效地”哪些像
如果您有一个为一组类训练的贝叶斯分类器,如何检测输出是否足够重要以选择一个类?这对于检测无法分配给类的样本很有用。我曾尝试测试类概率是否高于所有类的概率的均值+2*stddev,但我认为它不会很健壮。
我目前正在寻找一种可以将多个模型的输出组合成一个模型的方法,我需要创建一个进行分类的 CNN 网络。 图像被分成多个部分(如颜色所见),每个部分作为输入给某个模型(1,2,3,4)每个模型的结构是相同
我目前正在处理 convolutional neural network用于病理变化检测 x-ray images .这是一个简单的binary classification任务。在项目开始时,我们聚
你知道我在哪里可以找到这个算法的一些信息,研究它吗??。是否已经有其实现的示例,或者只有 Quinlan知道它的实现吗?? 最佳答案 他的公司 rulequest 拥有:http://ruleques
我有7个类别需要分类,并且有10个功能。在这种情况下,我是否需要使用k的最佳值,还是我必须针对1到10(大约10)之间的k值运行KNN,并借助算法本身确定最佳值? 最佳答案 除了我在评论中发布的the
我正在使用 Orange 进行数据挖掘 ( http://orange.biolab.si/ ) 1 尤其是 LinearSVM。有没有办法保存学习到的模型并将其与看不见的测试集一起使用?我需要查看预
我有一个用例,其中要对聊天文本进行分类。我想在 Apache OpenNLP 中使用 DocumentCategorizer 对聊天进行分类。但为此,我必须拥有已经对聊天进行分类的训练数据。我是否必须
我正在尝试使用Mahout对用户进行聚类和分类。目前,我正处于计划阶段,我的想法与想法完全融合在一起,并且由于我是该领域的新手,所以我一直坚持进行数据格式化。 假设我们有两个数据表(足够大)。在第一个
当训练集中的示例太少时,如何使用 ID3 修剪决策树构建。 我不能把它分成训练集、验证集和测试集,所以这是不可能的。 是否有任何可以使用的统计方法或类似方法? 最佳答案 是的,当您的数据量较少时,可以
抱歉,我是WEKA的新手,正在学习。 在我的决策树(J48)分类器输出中,有一个混淆矩阵: a b <----- classified as 130 8 a = functiona
我正在尝试训练一个 CNN 模型,根据它们的美学分数对图像进行分类。有 2,00,000 张图像,每张图像都由 100 多个对象评分。计算平均分数并且将分数归一化。 分数的分布近似高斯分布。所以我决定
考虑具有以下混淆矩阵的三类分类问题。 cm_matrix = predict_class1 predict_class2 predict_class3
考虑具有以下混淆矩阵的三类分类问题。 cm_matrix = predict_class1 predict_class2 predict_class3
我们如何使用朴素贝叶斯解释 weka 中的分类结果? 平均值、标准偏差、权重总和和精度是如何计算的? kappa 统计量、平均绝对误差、均方根误差等如何计算? 混淆矩阵的解释是什么? 最佳答案 下面是
我得到了混淆矩阵,但由于我的实际数据集有很多分类类别,因此很难理解。 例子 - >>> from sklearn.metrics import confusion_matrix >>> y_test
我需要对来自由 8 个加速度计组成的传感器网络的数据流进行分类。每个加速度计给我一个 X Y 和 Z 值。因此,在每个样本中,我有 8 x 3 = 24 个加速度值。我以大约 30 Hz 的频率进行采
我正在寻找完全免费的免费分类法。在我的研究中,杜威有法律问题。美国国会图书馆分类受版权保护,但在美国除外。 DMOZ 需要用户更新。如果我错了,请纠正我。 那么,是否有任何完全免费的商业用途分类法?
我是一名优秀的程序员,十分优秀!