Python 回归,python中回归分析的算法
为什么不是普通的线性回归?
使用普通的线性回归技术,必须保证回归技术对研究问题的适用性,才能相信回归结果是可靠的。为了确定回归技术的适用性,我们需要对回归分析进行诊断。诊断内容是线性回归的六个最基本假设是否成立,即
误差项是预期为0的随机变量;
对于解释变量的所有观测值,随机误差项具有相同的方差;
随机误差项互不相关;
解释变量是确定性变量,不是随机变量,与随机误差项无关。
解释变量之间没有精确(完全)的线性关系,即解释变量的样本观测矩阵是满秩矩阵;
随机误差项服从正态分布。
那么,当我们遇到被解释变量为分类变量的特殊情况时,如果可以使用普通的线性回归技术,就必须满足上面提到的六个基本假设。我们来做一个简单的模拟。
我使用火箭发射成功或失败的数据集进行下一次测试。首先,我们读取数据集。
将numpy作为np导入
进口熊猫作为pd
data=PD . read _ CSV( challenger . CSV )
data . drop(columns=[ Unnamed:0 ],inplace=True)
数据集如下:
num _ at _ riskdisstresslaunch _ temple AK _ check _ pressure order
06170502
16069503
26068504
36067505
46072506
560731007
660701008
761572009
8616320010
9617020011
10607820012
11606720013
13606720015
14607520016
15607020017
16608120018
17607620019
18607920020
19607520021
20607620022
21615820023
我们使用statsmodels提供的线性回归分析API来完成回归,然后进行简单的可视化。
将statsmodels.formula.api作为smf导入
model=smf . ols( distress ~ num _ at _ risk launch _ temp leak _ check _ pressure order ,data=data)
result=model.fit()
#结果.摘要()
将matplotlib.pyplot作为plt导入
plt.figure(figsize=(10,8),dpi=80)
PLT . scatter(result . fitted values,result.resid)
plt.plot([-0.3,1.3],[0,0],color=black )
plt.show()
通过观察图像,我们可以很容易地看到,当使用普通的线性回归技术来完成离散变量的回归时,上面提到的第一个和第二个假设已经被打破,即
误差项的预期值不是0;
随机误差项的方差随着对解释变量的观察而变化。
因此,在分类变量回归的情况下,使用普通的线性回归似乎不再是一种非常合适的方法,所以我们使用链接函数来构造一种适合分类变量的回归技术。
链接功能是什么?
考虑最简单的二元分类问题。如果我们用普通的线性回归技术来回归一个二元分类问题,结果会如上图。预测值不是类别标签,而是一条线上的任意一点,这显然不是我们想要的结果。
为了解决这个问题,我们引入了链接函数的概念。什么是链接功能?实际上是普通线性回归结果的非线性变化,目的是将现象回归的结果缩放到0到1之间的值。有了这个变化,回归后的拟合值就有意义了,因为这个数可以看作是被分到指定类别的概率,可以支持我们对类别预测的判断。
有两个最流行的链接函数,一个是Probit,另一个是Logit(逻辑回归),它们的函数表达式是:
probit(z)=(z)=z122exp(z22)probit\left( z \ right)=\ phi \ left(z \ right)=\int^{z}_{-\infty } \ frac { 1 } exp \ left(-\ frac{z^{2}}{2} \ right)probit(z)=(z)=z 22 1 exp(2z 2)
logit(z)=exp(z)1 exp(z)logit\left( z \右)=\ frac { \ exp(z)} { 1 \ exp \ left(z \ right)} logit(z)=1 exp(z)exp(z)
对应的图像是:
其实两者差别不大,Probit相对更陡,Logit的变换更软。
如何实现(statsmodelssklearn)?
接下来我将介绍Python中分类变量回归的两种技术,首先介绍必要的工具和数据。
进口熊猫作为pd
将numpy作为np导入
从实例导入支撑向量机
从sklearn.metrics导入roc曲线,auc
将matplotlib.pyplot作为血小板计数导入
将海生的作为社交网站(Social Network Site的缩写)导入
来自sklearn。预处理导入标签_二进制化
来自sklearn.metrics导入混淆_矩阵,分类_报告
从sklearn.neural_network导入MLP分类器
从sklearn.model_selection导入训练_测试_拆分
来自sklearn。预处理导入标准缩放器
来自sklearn.linear_model导入逻辑回归
将statsmodels.api作为钐导入
从统计模型。离散的。离散模型导入逻辑,概率,逻辑
从皮拉布导入数学编程语言(Mathematical Programming Language)
导入plotly.graph_objects as go
导入警告
将绘制精美的图表作为数学编程语言(Mathematical Programming Language)导入
警告.过滤器警告("忽略")
#设置风格、尺度
sns.set_style(whitegrid )
sns.set_context(paper )
酒=PD。read _ CSV(酒质-红色。CSV’)
数据可在下方链接下载:
红酒质量数据集下载
统计模型(统计学分析场景推荐)
先把问题简化为一个二分类问题
X=wine.iloc[:-1]
Y=葡萄酒[质量]
binary_Y=[]
对于范围内的我(len(Y)):
如果Y[i]=5:
binary_Y.append(0)
否则:
binary_Y.append(1)
概率单位
概率单位模型=概率单位(二进制y,sm.add常数(十))
结果=probit_model.fit()
结果。摘要()
分对数
logi _ model=Logit(binary _ Y,sm.add_constant(X))
result=logist _ model.fit()
结果。摘要()
多法线
MNLogit就是当分类变量非二分类,而是多分类时的符号逻辑的回归方法,具体实现很简单。(输出表很长,就不展示了)
mnLogit_model=MNLogit(Y,sm.add_constant(X))
result=mnLogit_model.fit()
结果。摘要()
sklearn(机器学习场景推荐)
实例也封装有符号逻辑的回归的方法,也可以实现统计模型类似的功能,但是可视化表格却非常的差劲,因此在统计学分析(推论)里面我们一般不太使用sklearn。但是如果把回归技术用于预测目的的话,我们也是可以选择实例的。以下展示使用实例进行多变量符号逻辑的回归的模型训练效果。
logit _ model=逻辑回归(multi _ class=多项式,惩罚=l2 )
logit_model.fit(X,Y)
predict=logit_model.predict(X)
Y _ one _ hot=label _ binary ize(Y,np.arange(3,9))
predict _ proba=logit _ model。预测_ proba(X)
fpr,tpr,threshold=roc _ curve(y _ one _ hot。ravel()、predict_proba.ravel()) ###计算真正率和假正率
roc_auc=auc(fpr,tpr) ###计算皇家对空观察队曲线下的面积的值
mpl。RC params[ font。family ]=无衬线
mpl。RC params[ font。sans-serif ]= NSimSun,Times New Roman
font={family :无衬线,
颜色: k ,
重量:粗体,
size: 20,}
图表()
plt.figure(figsize=(12,10),dpi=80)
plt.plot(fpr,tpr,color=darkorange ,
lw=5,label=ROC曲线(面积=% 0.3f)% ROC _ AUC)# # #假正率为横坐标,真正率为纵坐标做曲线
plt.plot([0,1],[0,1],color=navy ,lw=3,linestyle= -)
plt.xlim([-0.01,1.01])
plt.ylim([-0.01,1.01])
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.xlabel(假阳性率,fontsize=15)
plt.ylabel(真阳性率,fontsize=15)
Sklearn计算的皇家对空观察队曲线,fontsize=18)
plt.legend(loc=右下角,fontsize=15)
plt.show()
原文链接:https://博客。csdn。net/weixin _ 41677876/文章/详情/106686250
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。