首页 >> 大全

小白的逻辑回归学习笔记(入门)

2023-11-15 大全 29 作者:考证青年

很早之前就有写博客来记录自己学习的过程,入 的坑也有一年了,在理论与实践上也有了一定的积累(其实主要是实践,理论水平还在积极补救),恰逢最近有时间参加了的组队学习活动,以任务的形式push着我写下了第一篇博客。后续有时间的话还会多分享所学,请大家多多指教。

逻辑回归简介

开头先着重强调,逻辑回归是分类算法啊!虽然在数学建模中,模型好像也叫逻辑回归来着,可以用来拟合生物种群繁衍、生物生长发育、疾病传播等等的回归问题,毕竟自然界中绝大多数的事物都符合“S曲线”的发展规律,但这跟在机器学习中广泛应用的逻辑回归差别不小。机器学习中的逻辑回归实际上是 分布中位置参数为0,尺度参数为1的特例(即函数)。其次,基于回归的生长模型是拟合 分布,而机器学习中的逻辑回归是以y=wx+b的基本回归方程作为函数的输入。网上很多博客也没有对两者作出一些比较,搜索逻辑回归的话,以上两者都会被搜出来,这一点感觉较容易混淆。

言归正传,机器学习中的逻辑回归看着挺简单,也比较好理解,或者各大深度框架中调用一下就完事了,但深究其原理,还是太多太多东西要去学习了,特别是看了这位大佬的文章,膝盖已经在地上了。正因为逻辑回归的可解释性非常强,处理速度比较快,而且比较容易实现并行,目前在众多领域仍具有重要地位,仍作为众多应用场景的基准算法,例如现今国际通用的ICU风险监测手段—— IV评分就是利用多变量逻辑回归来估计患者ICU内死亡的概率所建立起来的模型。除此之外,由于逻辑回归后输出值位于0与1之间,具有概率意义,使模型的输出结果具有概率可解释性,特别是在需要强解释性的场景中,例如医疗应用场景中,往往只提供一个正或负的结果是不够的,还必须告诉医生正、负的程度,概率表示便能满足此要求,因此逻辑回归或者层作为许多机器学习模型的标准配件。

先直观了解函数长啥样:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-5,5,0.01)
y = 1/(1+np.exp(-x))plt.plot(x,y)
plt.xlabel('z')
plt.ylabel('y')
plt.grid()
plt.show()

函数表达式长这样(注意z为基本回归函数):

此函数导数有以下等式(推BP算法什么的很常用):

通过观察函数表达式以及函数图像,很明显可以得出当z≥0 时,y≥0.5,分类为1,当 z 逻辑回归代码示例

下面示例基本展示了逻辑回归的实现过程:

import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import metrics
##利用sklearn中自带的iris数据作为数据载入
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
data = load_iris() #得到数据特征
iris_target = data.target #得到数据对应的标签
iris_features=pd.DataFrame(data=data.data,columns=data.feature_names) #转化为DataFrame格式## 合并标签和特征信息
iris_all = iris_features.copy() ##进行浅拷贝,防止对于原始数据的修改
iris_all['target'] = iris_target## 合并标签和特征信息
iris_all = iris_features.copy() ##进行浅拷贝,防止对于原始数据的修改
iris_all['target'] = iris_target##选择其类别为0和1的样本(不包括类别为2的样本)
iris_features_part=iris_features.iloc[:100]
iris_target_part=iris_target[:100]
##测试集大小为20%,80%/20%分
x_train,x_test,y_train,y_test=train_test_split(iris_features_part,iris_target_part,test_size=0.2,random_state=2020)##定义逻辑回归模型
clf=LogisticRegression(random_state=0,solver='lbfgs')
##训练模型
clf = clf.fit(x_train, y_train) #其拟合方程为 y=w0+w1*x1+w2*x2+w3*x3+w4*x4##查看逻辑回归模型训练后的权重w
print('逻辑回归模型训练后的权重w为:',clf.coef_)
##查看逻辑回归模型训练后的截距项w0
print('逻辑回归模型训练后的截距项w0为:',clf.intercept_)##在训练集和测试集上分布利用训练好的模型进行预测
train_predict=clf.predict(x_train)
test_predict=clf.predict(x_test)##输出预测的概率值
test_predict_proba=clf.predict_proba(x_test)print('逻辑回归在训练集上的准确度为:',metrics.accuracy_score(y_train,train_predict))
print('逻辑回归在测试集上的准确度为:',metrics.accuracy_score(y_test,test_predict))confusion_matrix_result=metrics.confusion_matrix(test_predict,y_test)
print('混淆矩阵为:\n',confusion_matrix_result)

多分类时的调用也是一样的,不过对应多个逻辑回归模型,例如3分类对应3个逻辑回归模型(相当于做了3次one vs rest)的各参数说明可以参考官方文档,或者参考下这篇文章,讲的非常详细。

逻辑回归部分要点总结 的优缺点总结

优点:

1、将预测范围压缩至[0,1]

2、使模型更加关注分类边界(只在0附近敏感)

3、作输出层时使模型结果具有概率上的解释性

缺点:

1、容易造成梯度消失

2、由于以0为中心,梯度为全正或全负,优化时为“之”字线路, 故寻找最优参数耗时较长

3、包含指数函数,计算代价较高

关于逻辑回归的其它要点

离散化

LR 属于广义线性模型,表达能力有限,离散化后每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,离散后特征可以进行特征交叉,提升拟合能力,且特征离散后模型鲁棒性更强,相当于引入了正则化。

与其它模型的对比(线性回归、SVM、最大熵模型)以及逻辑回归的并行运算,上面提到的那位大佬讲得非常详细。

【机器学习】逻辑回归(非常详细)

种群竞争模型 — (Lotka-模型) 回归

-逻辑回归

《深度学习原理与实践》黄理灿

《机器学习实战—基于平台的机器学习理论与实践》星环科技人工智能平台团队

代码部分参考教程

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了