pycaret 上的概率与预测标签不匹配

Lui*_*uez 5 python classification machine-learning pycaret

I\xe2\x80\x99m 使用 pycaret 使用以下代码处理分类模型:

\n
sample = pd.DataFrame(sample)\nexp_clf = setup(sample, target = \'match\',fix_imbalance = True)\nclf_model = create_model(\'lightgbm\')\ntuned_clf_model = tune_model(clf_model, optimize = \'Recall\')\ntuned_tuned_clf_model_pred = predict_model(tuned_clf_model, data = sample)\n
Run Code Online (Sandbox Code Playgroud)\n

现在问题就出现在这一点上,因为标签 1 和 0 的分数重叠:

\n

在此输入图像描述

\n

这是我正在使用的数据,它可以转换为作为字典读取,并转换为数据帧,如上面代码的第一行所示。

\n

\r\n
\r\n
sample = pd.DataFrame(sample)\nexp_clf = setup(sample, target = \'match\',fix_imbalance = True)\nclf_model = create_model(\'lightgbm\')\ntuned_clf_model = tune_model(clf_model, optimize = \'Recall\')\ntuned_tuned_clf_model_pred = predict_model(tuned_clf_model, data = sample)\n
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

Dav*_*tan 4

奇怪的是,Score被设置为标签的概率。换句话说,如果模型的原始输出为 0.01,则数据帧将读取Label = 0 | Score = 0.99。如果模型的原始输出为 0.99,则数据帧将读取为Label = 1 | Score = 0.99。我认为当你做的不仅仅是二元分类时,这可能更有意义。

如果您对仅仅相信我的话不满意(我不会责怪您),您可以通过将预测线更改为来获得原始分数

tuned_tuned_clf_model_pred = predict_model(tuned_clf_model, raw_score=True, data = sample)
Run Code Online (Sandbox Code Playgroud)

请注意raw_score=True. 然后您的数据框将有两个分数列(Score_0Score_1)。从那里,您可以通过执行以下操作获得您想要的直方图

tuned_tuned_clf_model_pred[tuned_tuned_clf_model_pred["Label"]==0].Score_1.hist()
tuned_tuned_clf_model_pred[tuned_tuned_clf_model_pred["Label"]==1].Score_1.hist() 
Run Code Online (Sandbox Code Playgroud)