用python实现最小二乘法
在上计量经济学的时候老师布置作业,要用Eviews这个软件实现最小二乘法,但是这个软件突然失灵了,在excel中的数据无法粘贴,这就非常难堪。于是我转向python语言寻求帮助。
最近在看用python库scikit进行机器学习的教程,但是掌握的并不是很好,这刚好是一个练手的机会。
在暑假的时候我们已经进行过许多数据上的操作了,虽然说没有真正的处理好一个数据,但是已经初探了pandas的门径,而这里我们直接用pandas读取excel中所要处理的数据,这要比用别的方式读取显得更为简单一些。import pandas as pdimport numpy as npdf=pd.read_excel(r"D:\BaiduNetdiskDownload\《经济计量学精要》的数据文件\Chapter_03\Table 3_6.xls")
在导入了数据之后我们要对数据进行筛选,什么标题之类的显然不属于我们想要用的信息.df.iloc[6:19]
筛选结果如下图所示: 接着选取数据x和y
x = a.iloc[:,1]y = a.iloc[:,0]x = np.array(x)x = x.reshape(-1,1)y = np.array(y)#为了使用scikit,要将pandas数据转为nump数组 ````值得注意的是,这里有个奇怪的操作:
pythonx = x.reshape(-1,1)似乎要将数组转化为矩阵,一位矩阵?这里是要注意的,我就是在这里没有处理好,引发了后面程序的报错,可以试着将这个语句去除掉,查看程序会有怎样的问题。
python
导入机器学习库
from sklearn import linear_modelreg = linear_model.LinearRegression()reg.fit(x,y)reg.coef_#斜率,为0.41996807,结果与Eviews,matlab得到的结果相近reg.intercept#截距最后用绘图库将数据和拟合结果绘制成图像
pythonimport matplotlib.pyplot as plt#用于作图k=reg.coef_#获取斜率w1,w2,w3,…,wnb=reg.intercept_#获取截距w0x0=xy0=k*x0+bplt.scatter(x,y)plt.plot(x0,y0)````