请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于LogicRegression 的descion_function()

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

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2021-09-24 00:23:09

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


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


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

https://img1.sycdn.imooc.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 回复 有任何疑惑可以回复我~
  • 提问者 weixin_慕村8280326 #1
    老师您这个应该是二分类的predict_proba 吧?返回的二维数组,每个元素里头有分为两类中每一类的概率,这个分类如果把界限调到0.6的话,对于第二个元素,也就是概率均低于0.6,那能不能理解成分类为0和1的概率都不高,最后它默认就分为0了?
    回复 有任何疑惑可以回复我~ 2021-09-24 09:42:55
  • liuyubobobo 回复 提问者 weixin_慕村8280326 #2
    调成 0.6,分成 0 的概率变高了,分成 1 的概率变低了。
    回复 有任何疑惑可以回复我~ 2021-09-24 11:51:00
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信