如何在拟合集合模型上使用预测函数获得分数作为概率估计?

62次浏览(过去30天)
在运行了本文中的第一个示例() -“火车分类集合”后,我试图获得一个观测在两个类别之一的概率/分数。然而,通过传递这个函数[label,score] = predict(Mdl1,pX);分数很奇怪;
7.0616 - -7.0616
3.9722 - -3.9722
....
有可能把这个转换成概率吗?

接受的答案

MathWorks支万博1manbetx援小组
命令'[label, score] = predict(Mdl1,pX)'不返回分数作为概率估计的原因是模型中使用的'LogitBoost'算法不将分数作为概率估计。相反,分数代表对一个类别的分类的信心,越高,越有信心。
下面的文档链接解释了这一点:
< //www.tianjin-qmedu.com/help/stats/compactclassificationensemble.predict.htmlbvciha4 >
如果你想获得分数的概率估计,你可以考虑以下两种选择之一:
1)你可以将“fitcensemble”中的“ScoreTransform”名-值对设置为“logit”。这个名称-值对将分数转换为概率估计。
//www.tianjin-qmedu.com/help/stats/fitcensemble.html#bvcj_s0-1_sep_shared-ScoreTransform
然后在模型上使用predict返回每个类的概率值。
例如:
MdlFinal = fitcensemble(X,Y,“NumLearningCycles”idxNumTrees,...
“学习者”tFinal,“LearnRate”learnRate (idxLR),“ScoreTransform”分对数的
>> [~,scores] = predict(MdlFinal,X)
成绩=
0.0360 - 0.9640
0.8054 - 0.1946
0.0278 - 0.9722
...
2)设置“fitcensemble”的“Method”名称-值对为“Bag”。
正如文档链接中提到的 在这里 ,“Bag”算法将分数作为概率值返回。
'Method'名称-值对的文档链接可以在这里找到:
6个评论
kubilay muameleci
kubilay muameleci 2022年1月7日
我不能得到两个分数列,即使我有两个类标签为“1”和“0”。我通过预测函数得到的分数只有一列。为什么呢?你能帮忙吗?
数据=可读数据(“clean_data.csv”);
Split_size = 0.15;
N = size(data,1);
split = false(N,1);
split(1:round(split_size*N)) = true;
排列= randperm(N);
Split =分裂(排列);
trainingSet = data(~split,:);
testingSet = data(split,:);
trainingPredictors = trainingSet{:,2:29};
trainingOutcomes = trainingSet{:,31};
testingPredictors = testingSet{:,2:29};
testingOutcomes = testingSet{:,31};
X = trainingPredictors;
y = trainingOutcomes;
SVMModel = fitcsvm(X,y,“KernelFunction”“rbf”“KernelScale”sigmaOpts,...
“BoxConstraint”boxOpts,“类名”, {' 0 '' 1 '});
[predictedLabels,scores] = predict(svm模型,testingPredictors);

登录评论。

更多答案(1)

达里奥沃尔特
达里奥沃尔特 2020年8月20日
因此, “ScoreTransform”、“分对数的 AdaboostM1接收概率估计。Bagging不需要任何转换,因为默认情况下它返回概率估计。但是RUSBoost呢?当我为(1)无变换,(2)logit和(3)doublelogit绘制精度-召回曲线时,我得到了三条不同的曲线。哪一个是正确的?当我对Adaboost M1分数应用分数转换时,我总是得到相同的精度召回曲线(这很好)。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!

翻译的