线性回归预测房价(学会scikit-learn)
说明:这篇就是为了让我们更好的利用scikit-learn做机器学习,现以简单的线性回归为例子了解下如何调用scikit-learn一些基本流程。每一块代码下面我们会进行一些分析。
任务:
基于usa_housing_price.csv数据,建立线性回归模型,预测合理房价:
1、以面积为输入变量,建立单因子模型,评估模型表现,可视化线性回归预测结果
2、以income、house age、numbers of rooms、population、area 为输入变量,建立多因子模型,评估模型表现
3、预测income = 65000,House Age = 5,Number of Rooms=5,Polulation = 30000,size = 200的合理房价
分析:以上先加载数据集,pandas和numpy是进行数据科学运算的工具包,读取数据我们一般用pd.read_csv,读取后的数据是dataFrame类型,可以用head()查看前五行数据,你也可以查看更多行,head(10)就是查看前10行数据。可以从图表中看到地区平均收入,地区平均房龄,地区平均房屋数,地区人口量,房屋大小这几个特征,Price是房价,也是标签。
分析:我们拿到数据一般会画图比如散点图来看下特征和标签之间的关系,我们分别画了这5个特征和房价之间的关系,收入,房屋数,人口数,面积大小这四个特征,基本上越大,房价越高,呈上升趋势,而房龄越大房价会越低。
1.我们先单因子研究下算法,只看size和price的关系
结果:
0 1.059034e+06
1 1.505891e+06
2 1.058988e+06
3 1.260617e+06
4 6.309435e+05
Name: Price, dtype: float64
结果:
(5000,)
结果
array([[188.2142121],
[160.0425258],
[227.2735445],
…,
[139.4917852],
[184.845371 ],
[148.5894227]])
分析:以上我们通过dataframe的loc方法取出size特征和标签Price,但是注意,如果要放入scikit-learn中的模型拟合数据的话,特征必须是向量,我们的X显然不是向量,通过numpy.array变换,reshape变换转化成矩阵。
结果:
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
结果
[1276881.85636623 1173363.58767144 1420407.32457443 … 1097848.86467426 1264502.88144558 1131278.58816273]
结果:
108771672553.6264 0.1275031240418234
分析:以上,我们调用了scikit中线性模型中的线性回归,fit就是在拟合数据,做好了训练过程。生成的LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)就是我们的模型!就是这么简单。然后我们对X进行了预测。以上mse我们不太好辨别,数据很大,毕竟是房价,但是r2我们知道越接近1模型效果越好。0.1275显然拟合的模型不好。最后我们通过图形查看拟合情况,更直观。
2.我们用多因子研究下算法,考虑所有的特征。
结果:
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
分析:以上我们来看多因子拟合模型,说白了,多因子就是把所有特征都用于拟合模型,这时候我们X是dataframe类型,多行多列也算是矩阵,是可以被拟合的,不用做类型变换。因为单因子时X是一维数据,只有size,我们把它转化成矩阵才用fit拟合的,不然会报错,你们可以试验,会报类型错误。
结果
[1223968.89166087 1497306.33188629 1250884.31019438 … 1020693.92390376 1260503.36914585 1302737.79157629]
结果:
10219846512.177862 0.9180229195220739
分析:以上我们可以看到,通过多因子也就是把所有特征数据都用于拟合模型后,模型的效果好很多,从R2确定系数就能看出,0.918越接近1模型越好。
3.来用测试数据预测下房价
结果:
[[65000 5 5 30000 200]]
结果:
[817052.19516299]
分析:X_test显然不是矩阵也不是dataframe类型,那么变换吧。然后做预测。
数据和代码:https://github.com/Sirow/Linear_Regression
总结:
这个流程很好的让我们学习了用scikit-learn如何进行机器学习实验,大致的框架。调用模型,模型评估,画图。
那我给大家提个问题,为啥用线性回归预测房价?我们的房价是连续值,不是分类,是回归问题。所以我们用线性回归。那为啥用R2来评估呢。因为线性回归模型评估重点就是MSE,SSE,R2确定系数。之后我还会补充更复杂的房租预测,比赛项目。特征很多,过程更复杂,设计特征工程,模型混合。其中官方比赛的评价函数规定用的就是R2。
关于线性回归模型评估我自己总结了一篇大家可以参考:
https://blog.csdn.net/Sirow/article/details/109630056





版权说明:
1.版权归本网站或原作者所有;
2.未经本网或原作者允许不得转载本文内容,否则将视为侵权;
3.转载或者引用本文内容请注明来源及原作者;
4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。