自己动手进行线性回归计算
本文作者:孙晓玲
文字编辑:钱梦璇
导读
NumPy库与Pandas库是Python进行数据分析时基础而强大的两个第三方库,这两个库经常作为基准库进行连用解决各类数据分析问题,尤其是Pandas库,其支持大部分NumPy语言风格的数组计算。经过一段时间的NumPy数组与Pandas数组基本操作的学习,今天小编将两个库结合起来做一个实战分析——多元线性回归。
一、多元线性回归模型
在进行正式的回归分析之前,我们来回顾一下多元线性回归的基本原理。多元线性回归的一般形式为:
为计算回归系数向量β,需要设置解释变量矩阵X和被解释变量向量y,分别如下:
二、实战分析——美国汽车数据多元线性回归
本案例使用的是1978年美国汽车数据,熟悉Stata的朋友应该对这个数据很熟悉了。为了演示的方便,这里选取了汽车数据的三个变量,分别为:mpg,weight,foreign,拟合weight,foreign对mpg的二元线性回归。
(一)读入数据
这里,首先导入本案例中需要用到的两个第三方库,NumPy库和Pandas库。用Pandas库的read_csv函数读入auto.csv格式文件,设置解释变量矩阵X0和被解释变量向量y0,具体的程序如下:
import numpy as np
import pandas as pd
data=pd.read_csv(r'D:\regression\auto.csv')
data['beta0']=1
X0=data.iloc[:, [0,1,3]]
y0=data['mpg']
(二)求解多元线性模型
利用NumPy库的array函数生成X和y两个数组矩阵,使用transpose函数对矩阵转置,dot函数计算矩阵点乘,用线性代数函数模块linalg中的solve函数求解多元线性回归的系数值并输出,具体程序如下:
X=np.array(X0[:]) #将X0读成数组
y=np.transpose(np.array(y0[:])) #将y读成数组并转置
Xt=np.transpose(X) #求X的转置
XtX=np.dot(Xt,X) #矩阵点乘
Xty=np.dot(Xt,y)
beta=np.linalg.solve(XtX,Xty) #求解多元线性方程
print(beta) #输出系数值
通过上述程序计算输出结果如下:
(三)模型的预测
为比较模型的拟合效果,选取前10条观测值进行预测,并将预测值与原始数据进行比较,具体程序如下:
for index in range(10):
data1=X0.loc[index]
x = np.array([data1])
actual=y0[index]
prediction = np.dot(x,beta) #计算预测值
#print(prediction)
print('prediction = '+str(prediction)+' actual = '+str(actual))
今天的介绍就到这里了,从输出结果可知拟合值与实际值接近,拟合效果不错。虽然已经有许多库可以直接进行回归计算,但是通过自己动手写程序可以熟悉回归系数的计算方法,大家快来动手操作一下吧(#^.^#)!
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。