关于LogicRegression 的descion_function()

来源:1-1 什么是机器学习

weixin_慕村8280326

2021-09-22

老师我研究了一下,多分类的置信分数,是一个二维数组,它每一行都是对于各个类别的分数,它的比较机制应该不同,就是在每个样本的分数中选最大的然后判断属于哪一类,这样的话threshold好像没法调整啊?老师能给个思路吗

写回答

1回答

liuyubobobo

2021-09-24

首先,sklearn 提供的所有模型,都没有一个内置的方式,直接修改模型的 threshold,之后调用 predict,就按照自己定义的新的 threshold 做预测了。如果想使用自定义的 threshold,就不能使用 predict。


其实最简单的方式是使用 predict_proba。predict_proba 返回的是模型预测的测试数据为不同类别的概率,默认的分界点是 0.5,但你可以在拿到这个概率之后,用自己自定义的一个新的概率作为分界点(这相当于调整了 threshold。)


一个典型的代码是这样的:

//img.mukewang.com/szimg/614ca7d909dafcb707790440.jpg


其中,In[14] 的逻辑是我们如何使用自定义的新的分界点(0.6)做预测,非常简单。


注意最终的结果,In[15] 中的第二个数据分类是 0,但是用默认的 predict(In[16] 中)第二个分类,结果为 1。因为对于第 2 个数据,分类为 1 的概率为 0.52746(见 In[11])。在 0.5 这个分界点下,分类为 1,在 0.6 这个分界点下,分类为 0。


其实如果你想使用 decision function 是同理的,只不过你要找到的是新的 decision function 对应的 threshold,这有可能没有找一个新的概率的 threshold 直观。对此可以参考这里:https://coding.imooc.com/learn/questiondetail/80264.html


注意:

如果你的 decision_function 返回的是二维数组,说明你直接用 LogisticRegression 穿进去了多类别的数据。是的,此时你已经无法调整了。LogisticRegression 将直接使用 ovr 的方式或者 multinomial 的方式(这种方式近乎可以理解成是一个新的算法,我们在这个课程中没有介绍)来进行多分类的问题。

如果你想调整这个 threshold,应该手动实现 OvR 或者 OvO,并且在二分类的时候采用新的 threshold,然后综合根据新的 threshold 得到的预测结果,得到多分类的分类结果。


继续加油!:)




0
2
liuyubobobo
回复
weixin_慕村8280326
调成 0.6,分成 0 的概率变高了,分成 1 的概率变低了。
2021-09-24
共2条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程