人工智能 | 基于波士顿房价预测线性回归实践

声明:凡代码问题,欢迎在评论区沟通。承蒙指正,一起成长!

目录

 一、实验目的

二、算法步骤

三、实验结果

1. 实验结果图

2.实验结果数据

3.实验分析


 一、实验目的

通过波士顿地区房屋相关信息数据集,采用线性回归模型对该地区的房价进行预测。此外,通过随机生成数据,对一元线性回归进行验证。

二、算法步骤

第一种方式(随机值数据):

1.准备数据
(1)用随机数生成1000个符合正态分布且含有1个特征的随机变量。
num_sample=1000;num_feature=1; #定义样本和特征数量
feature=np.random.normal(size=(num_sample,num_feature));
(2)设置斜率weight、截距b_true和扰动数据random的回归线,其函数式为                                        label=weight*feature+b_true+np.random.normal(
                size=(num_sample,num_feature));
(3)分割数据,将1000个数据集分割成900个用于拟合的训练数据和100个测试数据。
    X_train = feature[:-100,:]; X_test = feature[-100:,:];
    y_train = label[:-100]; y_test = label[-100:];
2.模型训练
定义无正则项的一般回归函数reg,根据训练数据x、y拟合出回归线模型。
reg=linear_model.LinearRegression(); # 定义函数
reg.fit(X_train,y_train); # 拟合模型
3.模型评估
将100条待测试一维向量数据读入模型中进行房价预测,并评估模型整体性能。
y_predict=reg.predict(X_test); # 预测测试数据
 打印出真值和预测值之间均方差mean_square_error:
print("mean_square_error:%.2f"%mean_squared_error(y_test,y_predict)); 
 打印出sklearn.metrics中r2_score对真值和预测值的评估系数。
print('Coefficient of determination: %.2f' % r2_score(y_test, y_predict)); 
 打印出reg模型的整体评价系数reg.coef_ :
print("coefficient of the model:%.2f"%reg.coef_)
3.数据绘图
输出测试集的真值点(用红色点表示),预测的回归线预测值(用黑色线表示)。
plt.scatter(X_test, y_test,  color='red'); # 绘出真值点
plt.plot(X_test,y_predict,color='black',linewidth=3);#绘出预测值
plt.show() #显示图形

第二种方式(波斯顿房价真实数据):

1.准备数据
(1)加载波斯顿房价的数据,数据部分存到x中,每一个样本对应的值存到y中
b_datas = datasets.load_boston()
x = b_datas.data; y = b_datas.target;
(2)分割数据集,将总共有506个数据,50个数据作为测试数据,剩下的作为求解模型的训练数据,数据标准化处理,对数据进行标准化处理,把它们归到0、1之间;
x_train, x_test, y_train, y_test = train_test_split(x, y,test_size=0.1);
2.模型训练
    创建模型:
lr = LinearRegression();#创建普通线性回归模型,并赋值给lr
ridge = Ridge(alpha=0.1);#创建岭回归模型,并赋值给ridge
lasso = Lasso(alpha=0.1);#创建lasso回归模型,并赋值给lasso
elasticNet = ElasticNet();#创建稳健回归模型,并赋值给elasticNet
训练模型,即求回归模型系数:
lr.fit(x_train, y_train)#将训练数据代入并求解线性回归模型系数
ridge.fit(x_train, y_train)#将训练数据代入并求解岭回归模型系数
lasso.fit(x_train, y_train)#将训练数据代入并求解lasso回归模型系数
elasticNet.fit(x_train, y_train)#将训练数据代入求解稳健回归模型系数
3.数据预测与绘图
使用求解好的模型进行预测,将测试数据带进去求解相应的预测值,得到四个回归模型的预测值。分别显示出4张linear、ridge、lasso和elasticNet不同回归方式的真实值和预测值的偏差图。
4.模型评估
打印各个模型得到的评价指标:
print("linear_score:", linear_score)#打印linear回归模型得到的评价指标
print("ridge_score:", ridge_score)#打印ridge回归模型得到的评价指标
print("lasso_score:", lasso_score)#打印lasso回归模型得到的评价指标
print("elasticNet_score:", elasticNet_score)#打印elasticNet回归模型得到的评价指标

三、实验结果

1. 实验结果图

第一种方式(回归线斜率weight=3.7,截距b_true=4.3):

 

第二种方式(linear、ridge、lasso和elasticNet回归): 

 

 

 

 

2.实验结果数据

第一种方式:

 

第二种方式:

3.实验分析

        通过图形数据显示,可知线性回归模型具有较好的拟合性,可根据影响房价元素的一维特征向量的整体分布情况拟合成回归曲线,由此曲线可预测未知房价走势。
        本实验中,为显示出影响因素和房价的图形关系,只包括了一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种一元线性回归分析具有数据分析局限性,不能对于房价进行全部特征拟合;若更好地回归分析出房价预测数据,需采用多元线性回归分析,对两个或两个以上的自变量进行线性关系回归分析。


 

猜你喜欢

转载自blog.csdn.net/kndjg/article/details/124643204