关于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。)
一个典型的代码是这样的:
其中,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 得到的预测结果,得到多分类的分类结果。
继续加油!:)
022021-09-24
相似问题