机器学习-------用决策树回归器构建房价评估模型    刚开始学习机器学习的朋友肯定特别蒙,这个东西确实也特别无聊,尤其看到了一些算法什么的,一个头两个大,所以说,要静下心来,慢慢学 ,用心来,不骄不躁  下面有哪些不懂的地方,还有写的错误的地方,欢迎大家指出,谢谢

最近几十年,房价一直是中国老百姓心中永远的痛,有人说,中国房价就像女人的无肩带文胸,一半人在疑惑:是 什么支撑了它?另一半人在等待:什么时候掉下去? 而女人,永不可能让它掉下来。就算快掉下来了,提一提还是 又上去了.....
虽然我们不能预测中国房价什么时候崩盘,但是却可以用机器学习来构建房价预测模型,下面我们使用波士顿房价 数据集来建立一个房价评估模型,通过房子所在的地理位置,人口居住特性等因素来综合评估房价。

  环境配置如下:

1)Graphviz 0.8.4 (安装python模块,安装代码: pip install graphviz)

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

2)安装软件:下载地址https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi

3)配置环境变量:D:\Program Files (x86)\Graphviz2.38\bin

  这是我在代码中用到的包,可以根据实际情况来更改 import sklearn import numpy as np from matplotlib import pyplot as plt import pandas as pd import matplotlib %matplotlib inline matplotlib.rcParams['font.sans-serif']=['SimHei'] #分割数据集要导的包 from sklearn.model_selection import train_test_split   from sklearn import datasets              # sklearn自带的datasets中就有Boston房价数据集.  housing_data=datasets.load_boston()     #加载波士顿房价数据数据, # print(housing_data)     dataset_X=housing_data.data              # 获取影响房价的特征向量,作为feaure X dataset_y=housing_data.target             # 获取对应的房价,作为label y #查看一下他的行与列 print(dataset_X.shape)   #分割数据集,把测试数据集和训练数据集分开 train_X,test_X,train_Y,test_Y = train_test_split(dataset_X,dataset_y,test_size=0.2,random_state=30)    #这样,就把数据(2,8)分成了测试集与训练集   #训练集为80%,测试集为20% print(train_X.shape,test_X.shape)       # 构建决策树模型 from sklearn.tree import DecisionTreeRegressor # 决定决策树的最大深度,为 4, 关于这个深度,有兴趣了解的同学,可以到这里看一看  ::::    https://www.cnblogs.com/fionacai/p/5894142.html decision_regressor =DecisionTreeRegressor(max_depth=4) #训练数据 decision_regressor.fit(train_X,train_Y)   #使用测试集来判断他的好坏 predict_test_y = decision_regressor.predict(test_X)   #决策树模型得分指标    这是以测试集为标准进行估测 from sklearn import metrics print('平均绝对误差:{}'.format(metrics.mean_squared_error(predict_test_y,test_Y))) print('均方误差MSE:{}'.format(metrics.mean_absolute_error(predict_test_y,test_Y))) print('解释方差分:{}'.format(metrics.explained_variance_score(predict_test_y,test_Y))) print('R2得分:{}'.format(metrics.r2_score(predict_test_y,test_Y))) 得分结果 机器学习中用决策树回归器,构建评估模型 (波士顿房价) 随笔 第1张 机器学习中用决策树回归器,构建评估模型 (波士顿房价) 随笔 第2张                 决策树模型的优化 #优化你的模型,让他的得分更高,这样预测出来的数据会更准确 for depth in range(2,12):     decision_regressor_test=DecisionTreeRegressor(max_depth=depth)         decision_regressor_test.fit(train_X,train_Y)     predict_test_y2=decision_regressor_test.predict(test_X)   #优化后的决策树模型得分指标 from sklearn import metrics print('平均绝对误差:{}'.format(metrics.mean_squared_error(predict_test_y2,test_Y))) print('均方误差MSE:{}'.format(metrics.mean_absolute_error(predict_test_y2,test_Y))) print('解释方差分:{}'.format(metrics.explained_variance_score(predict_test_y2,test_Y))) print('R2得分:{}'.format(metrics.r2_score(predict_test_y2,test_Y))) 得分结果 机器学习中用决策树回归器,构建评估模型 (波士顿房价) 随笔 第3张 机器学习中用决策树回归器,构建评估模型 (波士顿房价) 随笔 第4张            计算不同特征的相对重要性 这个数据中一共有13个特征,但这13个特征对于房价的影响肯定是不同的,比如从直观上来看,学区房对房价影响肯定 比较大,所以可以计算出各种不同特征对模型的影响,进而在特征比较复杂的情况下,可以忽略掉影响比较小的特征。 如下部分代码可以将各种特征的相对重要性绘制到图中,这样大家就能直观的看出来了   #  计算不同特征的相对重要性 def plot_importances(feature_importances, title, feature_names):      ''将feature_importance绘制到图表中,便于观察,并把重要性大于5的特征打印出来'''      # 将重要性都归一化为0-100之内      feature_importances=100.0*(feature_importances/max(feature_importances))          #将得分从高到低排序      # (np.argsort:将矩阵a按照axis排序(默认升序),并返回排序后的下标 )      # (np.flipud:矩阵上下翻转,np.fliplr:矩阵左右反转)      index_sorted=np.flipud(np.argsort(feature_importances))      # 让X坐标轴上的标签居中显示      pos=np.arange(index_sorted.shape[0])+0.5          # 画条形图      plt.figure()      plt.bar(pos,feature_importances[index_sorted],align='center')      plt.xticks(pos,feature_names[index_sorted])      plt.ylabel('Relative Importance')      plt.title(title)          # 把重要性结果打印出来      print('{} importance list------>>>>>'.format(title))      for importance,name in zip(feature_importances[index_sorted],feature_names[index_sorted]):     if  importance>5:       print('feature:{}, importance: {:.2f}'.format(name,importance))   decision_regressor7=DecisionTreeRegressor(max_depth=7)      # 最大深度确定为7  decision_regressor7.fit(train_X,train_y)       # 对决策树回归模型进行训练 plot_importances(decision_regressor7.feature_importances_,                  'DT regressor',housing_data.feature_names) plot_importances(ada_regressor.feature_importances_,                  'AdaBoost Optimized DT regressor',housing_data.feature_names)     结局柱状图如下:   机器学习中用决策树回归器,构建评估模型 (波士顿房价) 随笔 第5张

 

               
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄