综合实例--波士顿房价数据集回归分析

Boston 数据集的线性,二次多项式,三次多项式回归。

使用线性回归,二次多项式回归,三次多项式回归,分别训练boston 房价回归模型,并使用训练的模型对数据集进行房价预测。
综合实例--波士顿房价数据集回归分析_第1张图片
使用线性回归,上图给出了原始数据集的目标房价和训练的线性回归模型的预测结果。可以看出两者还是存在一定的差异的,说明对波士顿房价的数据集来说,线性模型并不是最好的模型。
下面将进行训练多项式特征模式,将原始数据集变换为线性形式,然后使用线性回归模分析对变换的数据集进行拟合。使用训练好的多项式特征模式和线性回归模式分别转换原始数据集。预测转换后的数据集,获取房价的目标值并将预测值与实际值进行对比。
由于不知道模型中项的最高次数,因此先从指数2开始训练
综合实例--波士顿房价数据集回归分析_第2张图片
综合实例--波士顿房价数据集回归分析_第3张图片
综合实例--波士顿房价数据集回归分析_第4张图片
从上图中可以看出,训练的三个模型中,线性回归模型的相对误差最大,二次多项式回归次之,三次多项式回归模型的相对误差较小,且拟合程度最好。

from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
boston = load_boston()
print('boston房价数据集的特征名字为:',boston.feature_names)
X = boston.data
y = boston.target
print('X的形状为:',X.shape)
print('y的形状为:',y.shape)

#线性回归\n",
lin_reg = LinearRegression().fit(X,y)
#原书中语句:y_lin_reg_pred = clf_lin_reg.predict(X)\n",
#应为:\n",
y_lin_reg_pred = lin_reg.predict(X)
import matplotlib.pyplot as plt
#可视化\n",
plt.rcParams['font.sans-serif'] = 'SimHei'#设置字体为SimHei显示中文\n",
plt.rcParams['axes.unicode_minus']=False#坐标轴刻度显示负号\n",
plt.rc('font', size=14)#设置图中字号大小\n",
plt.figure(figsize=(15,4))
plt.rcParams['axes.unicode_minus']=False#坐标轴刻度显示负号\n",
plt.plot(y,marker='o')
plt.plot(y_lin_reg_pred,marker='*')
plt.legend(['真实值','预测值'])
plt.title('Boston房价线性回归预测值与真实值的对比')
plt.show()


#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
boston_poly = PolynomialFeatures(2)
boston_poly.fit(X)#拟合多项式模型\n",
X2=boston_poly.transform(X)#使用拟合模型变换X\n",
print('原始数据集X的形状为:',X.shape)
print('X转换为X2后的形状为:',X2.shape)

lin_reg = LinearRegression()#生成线性回归模型实例\n",
lin_reg.fit(X2,y)#使用变换后的数据集拟合线性回归模型\n",
y_poly2_predict=lin_reg.predict(X2)
#可视化\n",
plt.figure(figsize=(15,4))
plt.plot(y,marker='o')
plt.plot(y_poly2_predict,marker='*')
plt.legend(['真实值','预测值'])
plt.title('Boston房价2次多项式回归预测值与真实值的对比')
plt.show()

boston_poly3 = PolynomialFeatures(3)
boston_poly3.fit(X)#拟合多项式模型\n",
X3=boston_poly3.transform(X)#使用拟合模型变换X\n",
print('原始数据集X的形状为:',X.shape)
print('X转换为X3后的形状为:',X3.shape)

lin_reg = LinearRegression()#生成线性回归模型实例\n",
lin_reg.fit(X3,y)#使用变换后的数据集拟合线性回归模型\n",
y_poly3_predict=lin_reg.predict(X3)
#可视化\n",
plt.figure(figsize=(15,4))
plt.plot(y,marker='o')
plt.plot(y_poly3_predict,marker='*')
plt.legend(['真实值','预测值'])
plt.title('Boston房价3次多项式回归预测值与真实值的对比')
plt.show()

#计算三种回归模型预测值与真实值的相对误差\n",
error_linear=(y_lin_reg_pred-y)/y
error_poly2=(y_poly2_predict-y)/y
error_poly3=(y_poly3_predict-y)/y
#可视化,绘制相对误差\n",
plt.figure(figsize=(15,4))
plt.plot(error_linear,c='r')
plt.plot(error_poly2,c='y')
plt.plot(error_poly3,c='b')
plt.legend(['linear','ploy2','ploy3'])
plt.title('3个估计器对Boston房价预测值与真实值的相对误差')
plt.show()


上面就是全部得代码了,可以直接运行,但要注意配置好所需的环境。

你可能感兴趣的:(回归,机器学习,python)