机器学习和数据挖掘3——预测波士顿房价
机器学习和数据挖掘3——预测波士顿房价
来做一个demo,用python跑线性回归,来预测波士顿房价
来,首先,我们引入库sklearn,然后直接使用该类库集成的数据集。
别忘了前面两篇文章,现在我们使用eclipse搭建开发环境,后续可能会换。记得我之前用的2.6.6,现在ide需要改成3.6.3。
改的位置:window-preferences-PyDev里面需要new一下路径为3.6.3的。
我们粘贴一下代码:
import sklearn from sklearn.datasets import load_boston boston = load_boston() print(boston.keys())
缺少numpy,用pip下载一下。
成功!
波士顿数据集是scikit-learn的内置数据集,可以直接拿来使用。 波士顿数据集是scikit-learn的内置数据集,可以直接拿来使用。
然后我就这么导入啊,pip install sklearn
pip install numpy
pip install pandas
等等,
--------走到这里,还记得上一篇中,我们说的吗,直接使用Jupyter,
第一步:Python库导入
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn
第二步:数据获取和理解
from sklearn.datasets import load_boston
boston = load_boston()
print(boston.keys())
print(boston.data.shape)
print(boston.feature_names)
那我们后续可能需要一些python包,这里先pip引入:
如果依次pip导入的话,现在我们可以做一些基本的数据理解了:
请在控制台按照下列导入后,执行print输出查看data的特性,
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn
from sklearn.datasets import load_boston
boston = load_boston()
print(boston.keys())
print(boston.data.shape)
print(boston.feature_names)
来看一下输出控制台结果:
下列为字段匹配意义:
结论:波士顿数据集506个样本,14个特征。 结论:波士顿数据集506个样本,14个特征。
是从其他地方找到的。可以看到,房价的高低,暂时我们先按照这14个维度来限定,当然,在中国,具体的房价那就有太多维度了,比方说学区房、超市、菜场、高铁、机场、地铁、就业等等。
好的,我们继续做数据理解:
bos = pd.DataFrame(boston.data)
print(bos.head())
bos.columns = boston.feature_names
print(bos.head())
print(boston.target[:5])
bos['PRICE'] = boston.target
bos.head()
第三步:数据模型构建——线性回归
from sklearn.linear_model import LinearRegression
X = bos.drop('PRICE', axis=1)
lm = LinearRegression()
lm
lm.fit(X, bos.PRICE)
print('线性回归算法w值:', lm.coef_)
print('线性回归算法b值: ', lm.intercept_)
import matplotlib.font_manager as fm
myfont = fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc')
plt.scatter(bos.RM, bos.PRICE)
plt.xlabel(u'住宅平均房间数', fontproperties=myfont)
plt.ylabel(u'房屋价格', fontproperties=myfont)
plt.title(u'RM与PRICE的关系', fontproperties=myfont)
plt.show()
但是这段代码报错:
搜索了一下
myfont = fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc')
这段是
import matplotlib.font_manager as fm
matplotlib的font管理工具想要调用windows的字体,做展示字体。那我们换一个字体好了。或者是网上找一下这个字体吧。
我附上这个字体的下载链接,在我的****博客中:
http://download.****.net/download/qq_33792843/10108812
直接下载下来,20兆,如果嫌麻烦,就换别的字体,一样的。
原因在这里,我们打开这个路径:
那如果我们换一个呢?哈哈,看好了,随便找一个简体字,然后右键属性,看字体名字:
这个就是文件名了,然后我们在Jupeter上面写好:
用这个新宋体好了:C:/Windows/Fonts/simfang.ttf
第四步:数据模型应用——预测房价
lm.predict(X)[0:5]
mse = np.mean((bos.PRICE - lm.predict(X)) ** 2)
print(mse)
这个是每栋住宅的房间数和房价的关系,我们带入了横坐标为RM,每栋住宅房间数,和房价的线性关系图。接下来,可以换换别的玩一玩.
可以看到犯罪率越低,房价越高,越稳定,犯罪率高的地方,房价都很低。
再来看看,城市中,黑人的比例:
这个就不好看了:
再来看看环保指标的关系:
其实这里就是模型,
线性关系系数在此,我们可以看到,数值越大,关联性越强,越能体现线性。
当然,在此,我们也要来说一句题外话,线性回归,用来预测票房、房价等连续性的比较好,但是做分类比方说男女啊,就有很大的局限性了。可以看到线性回归算法w值,越等于0越没有关联性,负数为负相关,这个正9.几的。表示正相关性,很强。
总结
1 使用.DESCR探索波士顿数据集,业务目标是预测波士顿郊区住房的房价;
2 使用scikit-learn针对整个数据集拟合线性回归模型,并计算均方误差。
mse均方误差最小化准则,是为了算出这个算法的可用性、误差性,如果该数值越小则越好,说明这个算法越靠谱。
下面是网上找到的优化部分,有时间可以继续做一做
思考环节
1 对数据集分割成训练数据集和测试数据集
2 训练数据集训练线性回归模型,利用线性回归模型对测试数据集进行预测
3 计算训练模型的MSE和测试数据集预测结果的MSE
4 绘制测试数据集的残差图