回归分析简介
Happy Halloween
在统计学中,回归分析(regression analysis)指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。回归分析按照涉及的变量的多少,分为一元回归和多元回归分析;按照涉及的因变量的多少,可分为简单回归分析和多重回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。
下面是回归分析中最基础的简单线性回归模型,它反映一个自变量与一个因变量之间的关系。
模型形式:Y=β0+β1X1+ε
其中:Y为因变量;X1为自变量;
β0为常数项,表示回归直线在y轴上的截距;
β1为X1的回归系数,表示在其他条件不变的情况下,X1变化一个单位所引起的因变量的变化量;
ε为随机误差,即随机因素对因变量产生的影响。
Sklearn简介
Happy Halloween
Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。在下面的例子中,我们会从sklearn中引入线性回归模型。
国内旅游人数与旅游收入回归分析的例子
Happy Halloween
接下来的是运用Python进行简单线性回归分析的例子。为了简单明了,我们选取图一中 国内旅游收入(亿元)与国内旅游人数(百万人次)的数据,作为我们进行回归分析的数据。
![57b34331136c1c0acdf1590dc6a19d73.png](https://i-blog.csdnimg.cn/blog_migrate/7ac019509bf6bc4ad2e23a8c5f8f8412.png)
![4ecfe0f46031ca0da5e78d2aa99f5344.png](https://i-blog.csdnimg.cn/blog_migrate/124c3dc0ad29e90011bc920b785b97ea.png)
01
引入因变量与自变量
将国内旅游人数(百万人次)作为自变量,命名为’numpeople’,将国内旅游收入(亿元)作为因变量,命名为’income’,引入数据。(为了让大家可以直接粘贴语句,此处直接输入数据)
import numpy as npimport pandas as pddata=pd.DataFrame({'time'[1994,1995,1996,1997,1998,1999,2000,2001,2002,2003],'income'[1023.5,1375.7,1638.4,2122.7,2391.2,2831.9,3175.5,3522.4,3878.4,3442.3],'numpeople':[524,629,639,644,695,719,744,784,878,870]}) #输入数据income和numpeople
![0aed2ad1c584c592cb5f9c906fc690b9.png](https://i-blog.csdnimg.cn/blog_migrate/855090e52b7184265a62962aab53474e.png)
02
绘制散点图,确定回归模型类型
根据数据,画出自变量与因变量的散点图。由图三可以看出,这些点有落在一条直线上的趋势,即可以说明自变量与因变量有明显的线性相关性。再求出旅游人数与旅游收入之间的相关系数(图四),为0.95,则可以确定二者之间有非常强的相关性。可以看出,国内旅游人数越多,国内旅游收入也越多。因此,我们就可以建立二者之间的简单线性回归模型。
from matplotlib import pyplot as pltplt.scatter (data.numpeople,data.income) #画出散点图data.corr() #求相关系数
![1f93519f40e53b603a478217a0414770.png](https://i-blog.csdnimg.cn/blog_migrate/c6af700f866b8626c52ea03b53473ced.png)
![ed70ddb89dbc97206ecde0f58c83c243.png](https://i-blog.csdnimg.cn/blog_migrate/d258d46238a4f83bb8ebc57f38c7a239.png)
03
建立回归模型,估计模型参数
首先由sklearn导入简单线性回归的求解类LinearRegression,然后使用该类进行建模,得到model模型变量。再引入自变量x和因变量y。调用模型的fit函数,对模型进行拟合并求得参数(可理解为模型β0和β1的估计值)。
from sklearn.linear_model import LinearRegressionmodel=LinearRegression()#建立线性回归模型’model’x = data[['numpeople']]y = data[['income']] #引入自变量x:numpeople和因变量y:incomemodel.fit(x,y) #x,y拟合线性回归模型
![b0837b12a21eb026471cb6b6214cce41.png](https://i-blog.csdnimg.cn/blog_migrate/a7975f3a185e6f70a5753f2086925a64.png)
04
模型检验
用score函数算出模型的准确率得分(此处用相关系数平方R2来表示准确率得分)。从图六可以看出得分有0.90(范围[0,1]),是一个比较高的分数,说明模型比较精确,接下来可以显示出估计参数的值。可以使用模型的intercept函数查看参数alpha(β0截距),使用coef属性查看参数beta(β1回归系数),如图七所示。
model.score(x,y) #模型检验alpha= model.intercept_[0] #显示截距beta = model.coef_[0][0] #显示回归系数
![0639b42e66c5157905a7360499cade00.png](https://i-blog.csdnimg.cn/blog_migrate/271663db1b38b7092fa9e96f95f455e5.png)
![234a5229d59919d61e1720cdf20bda55.png](https://i-blog.csdnimg.cn/blog_migrate/eaef2eb1e96f3a1b505484ff301838da.png)
![4ecfe0f46031ca0da5e78d2aa99f5344.png](https://i-blog.csdnimg.cn/blog_migrate/124c3dc0ad29e90011bc920b785b97ea.png)
代码整理
Happy Halloween
import numpy as npimport pandas as pdfrom matplotlib import pyplot as pltfrom sklearn.linear_model import LinearRegressiondata=pd.DataFrame({'time':[1994,1995,1996,1997,1998,1999,2000,2001,2002,2003],'income':[1023.5,1375.7,1638.4,2122.7,2391.2,2831.9,3175.5,3522.4,3878.4,3442.3],'numpeople':[524,629,639,644,695,719,744,784,878,870]}) #输入数据income和numpeopleplt.scatter (data.numpeople,data.income) #画出散点图data.corr() #求相关系数model=LinearRegression()#建立线性回归模型’model’x = data[['numpeople']]y = data[['income']] #引入自变量x:numpeople和因变量y:incomemodel.fit(x,y) #x,y拟合线性回归模型model.score(x,y) #模型检验alpha= model.intercept_[0] #显示截距beta = model.coef_[0][0] #显示回归系数
参考网址:
https://www.cnblogs.com/shujufenxi/p/9054439.html
https://baike.baidu.com/item/回归分析/2625498?fr=aladdin
https://wenku.baidu.com/view/be2e80132a160b4e767f5acfa1c7aa00b52a9d9e.html
https://www.jianshu.com/p/6ada34655862
Happy Halloween
![5d6f1e0905d896c888c8f88c10f426d6.png](https://i-blog.csdnimg.cn/blog_migrate/22f84761df0528da4952ba5c46c62a04.jpeg)
数据皮皮虾带你学python
本期作者 : 陈颖姝
本期编辑校对:张惠宁
Happy Halloween