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

很早之前就有写博客来记录自己学习的过程,入 的坑也有一年了,在理论与实践上也有了一定的积累(其实主要是实践,理论水平还在积极补救),恰逢最近有时间参加了的组队学习活动,以任务的形式push着我写下了第一篇博客 。后续有时间的话还会多分享所学,请大家多多指教 。
逻辑回归简介
开头先着重强调,逻辑回归是分类算法啊!虽然在数学建模中,模型好像也叫逻辑回归来着,可以用来拟合生物种群繁衍、生物生长发育、疾病传播等等的回归问题,毕竟自然界中绝大多数的事物都符合“S曲线”的发展规律,但这跟在机器学习中广泛应用的逻辑回归差别不小 。机器学习中的逻辑回归实际上是 分布中位置参数为0,尺度参数为1的特例(即函数) 。其次,基于回归的生长模型是拟合 分布,而机器学习中的逻辑回归是以y=wx+b的基本回归方程作为函数的输入 。网上很多博客也没有对两者作出一些比较,搜索逻辑回归的话,以上两者都会被搜出来,这一点感觉较容易混淆 。
言归正传,机器学习中的逻辑回归看着挺简单,也比较好理解,或者各大深度框架中调用一下就完事了,但深究其原理,还是太多太多东西要去学习了,特别是看了这位大佬的文章,膝盖已经在地上了 。正因为逻辑回归的可解释性非常强,处理速度比较快,而且比较容易实现并行,目前在众多领域仍具有重要地位,仍作为众多应用场景的基准算法,例如现今国际通用的ICU风险监测手段—— IV评分就是利用多变量逻辑回归来估计患者ICU内死亡的概率所建立起来的模型 。除此之外,由于逻辑回归后输出值位于0与1之间,具有概率意义,使模型的输出结果具有概率可解释性,特别是在需要强解释性的场景中,例如医疗应用场景中,往往只提供一个正或负的结果是不够的,还必须告诉医生正、负的程度,概率表示便能满足此要求,因此逻辑回归或者层作为许多机器学习模型的标准配件 。
先直观了解函数长啥样:
import numpy as npimport matplotlib.pyplot as pltx = 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 pdimport matplotlib.pyplot as pltimport seaborn as snsfrom sklearn import metrics##利用sklearn中自带的iris数据作为数据载入from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressiondata = http://www.kingceram.com/post/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##查看逻辑回归模型训练后的权重wprint('逻辑回归模型训练后的权重w为:',clf.coef_)##查看逻辑回归模型训练后的截距项w0print('逻辑回归模型训练后的截距项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)