机器学习第二篇逻辑回归
转载自 追梦程序员 公众号
前面介绍了机器学习中最简单的线性回归模型,机器学习第一篇——线性模型。今天,我们就来看看传说中的逻辑回归(logistic regression)。
大家首先想一想,如果我们想要用已求得的线性模型来完成对样本的二分类,一个最简单的做法如下。
这样虽然可以完成对数据样本的分类,但这样的分类有许多的弊端:
1.没有体现输出值越大的样本属于正样本的可能性越大;
2.分类函数其实是单位阶跃函数,不具有连续、可导的性质。
为了解决以上两点的弊端,我们试图找到一个分类函数,希望它在作用上和单位阶跃函数类似,但具有连续、可导的性质。这样就引出了对数几率函数(logistic function)。
它的函数图像如下。
它在x>0时输出大于0.5,我们可以设为正样本,并且x越大,输出越接近1,则认为样本属于正样本的概率越大。在x<0的情况类似。我们利用这个函数进行分类的原理如下。
那么问题就来了,假设我们有一批已知分类的数据样本,我们通过什么办法求出W和b呢。我们可以利用极大似然的思想,就是让每个数据样本属于其真实分类的概率越大越好。具体做法如下。
我们的目标就是max lnL(w,b)。具体的解法如下。
好了,到此为止,逻辑回归的原理就讲清楚了。下面我们来看看如何使用scikit-learn上的LogisticRegression。一个简单的例子如下。
from sklearn.linear_model import LogisticRegression
XTrain = [[0,0],[1,1]]
YTrain = [0,1]
reg = LogisticRegression()
reg.fit(XTrain, YTrain)
print(reg.score(XTrain,YTrain))
下面对LogisticRegression中的参数进行说明:
Parameters:
penalty : str, ‘l1’ or ‘l2’, default: ‘l2’
选择以哪种方式进行正则化,有 ‘l1’ 和 ‘l2’两种选择,分别对应L1和L2的正则化,默认 ‘l2’。正则化的主要作用是缓解模型过拟合问题。
tol : float, default: 1e-4
算法停止的容忍标准,当相邻的两个迭代差小于该值是,算法停止运行。
C : float, default: 1.0
正则化系数λ的倒数,C越小,正则化力度越大。
fit_intercept : bool, default: True
和线性回归一样,是否使用独立变量b。
class_weight : dict or ‘balanced’, default: None
class_weight参数用于标示分类模型中各种类别的权重,可以不输入,即不考虑权重,或者说所有类别的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重,比如对于0,1的二元分类模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类别0的权重为90%,而类别1的权重为10%。
如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。
该参数的主要作用:
第一种是误分类的代价很高。比如对癌症患者和非癌症患者进行分类,将癌症患者分类为非癌症患者的代价很高,因为这样的错分
可以会使一个患者没有得到及时的治疗。但将非癌症患者分类为癌症患者则没有那么严重,这样再进行检查就能知道错分了。此时,我们可以适当提高癌症患者的权重。
第二种是样本是高度失衡的,比如我们有合法用户和非法用户的二元样本数据10000条,里面合法用户有9995条,非法用户只有5条,如果我们不考虑权重,则我们可以将所有的测试集都预测为合法用户,这样预测准确率理论上有99.95%,但是却没有任何意义。这时,我们可以选择balanced,让类库自动提高
- 原文作者:知识铺
- 原文链接:https://geek.zshipu.com/post/%E4%BA%92%E8%81%94%E7%BD%91/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%AC%E4%BA%8C%E7%AF%87%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com