文章目录

  • 一、 观察波士顿房价数据并加载数据集
    • 1、加载数据集
  • 二、 特征选择
  • 三、 模型选择
  • 四、 模型训练和测试
    • 1、 训练模型
    • 2、打印线性方程参数
    • 3、模型预测
    • 4、 计算mae、mse
    • 5、 画出学习曲线
  • 五、 模型性能评估和优化
    • 1、 模型优化,考虑用二项式和三项式优化
    • 2、 划分数据集函数
    • 3、定义MAE、MSE函数
    • 4、定义多项式模型函数
    • 5、 训练模型
    • 6、 定义画出学习曲线的函数
    • 7、定义1、2、3次多项式
    • 8、划分数据集
    • 9、训练模型,并打印train score
    • 10、画出学习曲线
  • 六、 结论与分析

一、 观察波士顿房价数据并加载数据集

1、加载数据集

from sklearn.datasets import load_boston
import pandas as pd
import matplotlib.pyplot as plt
import numpy as npboston=load_boston()
df=pd.DataFrame(boston.data,columns=boston.feature_names)
df['target']=boston.target

数据集共506条,包含有13个与房价相关的特征,分别是:

name 释义
CRIM 城镇人均犯罪率
ZN 住宅用地所占比例
INDUS 城镇中非住宅用地所占比例
CHAS 虚拟变量,用于回归分析
NOX 环保指数
RM 每栋住宅的房间数
AGE 1940 年以前建成的自住单位的比例
DIS 距离 5 个波士顿的就业中心的加权距离
RAD 距离高速公路的便利指数
TAX 每一万美元的不动产税率
PTRATIO 城镇中的教师学生比例
B 城镇中的黑人比例
LSTAT 地区中有多少房东属于低收入人群

2、查看数据项

#查看数据项
df.head()

二、 特征选择

1、 画出各数据项和房价的散点图
2、 根据散点图粗略选择CRIM, RM, LSTAT三个特征值

features=df[['RM','CRIM', 'LSTAT']]
target=df['target']

三、 模型选择

利用多元线性回归模型,其中自变量为数据集中的 feature_names 的维度(13维度),因变量为数据集中的 target 维度(房价)

#数据集划分
split_num=int(len(features)*0.8)
X_train=features[:split_num]
Y_train=target[:split_num]
X_test=features[split_num:]
Y_test=target[split_num:]

设置标签字段,切分数据集:训练集80%,测试集20%

四、 模型训练和测试

1、 训练模型

split_num=int(len(features)*0.8)
X_train=features[:split_num]
Y_train=target[:split_num]
X_test=features[split_num:]
Y_test=target[split_num:]

2、打印线性方程参数

print(model.coef_,model.intercept_)

3、模型预测

preds=model.predict(X_test)

4、 计算mae、mse

def mae_value(y_true,y_pred):n=len(y_true)mae=sum(np.abs(y_true-y_pred))/n
return maedef mse_value(y_true,y_pred):n=len(y_true)mse=sum(np.square(y_true-y_pred))/n
return msemae=mae_value(Y_test.values,preds)
mse=mse_value(Y_test.values,preds)
print("MAE",mae)
print("MSE",mse)

5、 画出学习曲线

from sklearn.model_selection import learning_curve
from sklearn.model_selection import ShuffleSplit
import matplotlib.pyplot as plt
import numpy as np
def plot_learning_curve(plt,estimator,title,X,y,ylim=None,cv=None,n_jobs=1,train_sizes=np.linspace(.1,1.0,5)):plt.title(title)if ylim is not None:plt.ylim(ylim)plt.xlabel("Training examples")plt.ylabel("Score")train_sizes,train_scores,test_scores=learning_curve(estimator,X,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)train_scores_mean=np.mean(train_scores,axis=1)train_scores_std=np.std(train_scores,axis=1)test_scores_mean=np.mean(test_scores,axis=1)test_scores_std=np.std(test_scores,axis=1)plt.grid()plt.fill_between(train_sizes,train_scores_mean-train_scores_std,train_scores_mean+train_scores_std,alpha=0.1,color="r")plt.fill_between(train_sizes,test_scores_mean-test_scores_std,test_scores_mean+test_scores_std,alpha=0.1,color="g")plt.plot(train_sizes,train_scores_mean,'o--',color="r",label="Training scores")plt.plot(train_sizes,test_scores_mean,'o-',color="g",label="Cross-validation score")plt.legend(loc="best")return pltcv=ShuffleSplit(n_splits=10,test_size=0.2,random_state=0)
plt.figure(figsize=(10,6))
plot_learning_curve(plt,model,"Learn Curve for LinearRegression",features,target,ylim=None,cv=cv)
plt.show()

五、 模型性能评估和优化

1、 模型优化,考虑用二项式和三项式优化

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
from sklearn.model_selection import ShuffleSplit
from sklearn.model_selection import learning_curve

2、 划分数据集函数

def split_data():boston = load_boston()x = boston.datay = boston.targetprint(boston.feature_names)x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2,random_state=2)return (x, y, x_train, x_test, y_train, y_test)

3、定义MAE、MSE函数

def mae_value(y_true,y_pred):n=len(y_true)mae=sum(np.abs(y_true-y_pred))/nreturn maedef mse_value(y_true,y_pred):n=len(y_true)mse=sum(np.square(y_true-y_pred))/n
return mse

4、定义多项式模型函数

def polynomial_regression(degree=1):polynomial_features = PolynomialFeatures(degree=degree, include_bias=False)#模型开启数据归一化linear_regression_model = LinearRegression(normalize=True)model = Pipeline([("polynomial_features", polynomial_features),("linear_regression", linear_regression_model)])return model

5、 训练模型

def train_model(x_train, x_test, y_train, y_test, degrees):   res = []for degree in degrees:model = polynomial_regression(degree)model.fit(x_train, y_train)train_score = model.score(x_train, y_train)test_score = model.score(x_test, y_test)res.append({"model": model, "degree": degree, "train_score": train_score, "test_score": test_score})preds=model.predict(x_test)mae=mae_value(y_test,preds)mse=mse_value(y_test,preds)print(" degree: " ,degree, "  MAE:",mae,"    MSE",mse)for r in res:print("degree: {}; train score: {}; test_score: {}".format(r["degree"], r["train_score"], r["test_score"]))return res

6、 定义画出学习曲线的函数

def plot_learning_curve(plt,estimator,title,X,y,ylim=None,cv=None,n_jobs=1,train_sizes=np.linspace(.1,1.0,5)):plt.title(title)if ylim is not None:plt.ylim(ylim)plt.xlabel("Training examples")plt.ylabel("Score")train_sizes,train_scores,test_scores=learning_curve(estimator,X,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)train_scores_mean=np.mean(train_scores,axis=1)train_scores_std=np.std(train_scores,axis=1)test_scores_mean=np.mean(test_scores,axis=1)test_scores_std=np.std(test_scores,axis=1)plt.grid()plt.fill_between(train_sizes,train_scores_mean-train_scores_std,train_scores_mean+train_scores_std,alpha=0.1,color="r")plt.fill_between(train_sizes,test_scores_mean-test_scores_std,test_scores_mean+test_scores_std,alpha=0.1,color="g")plt.plot(train_sizes,train_scores_mean,'o--',color="r",label="Training scores")plt.plot(train_sizes,test_scores_mean,'o-',color="g",label="Cross-validation score")plt.legend(loc="best")return plt

7、定义1、2、3次多项式

degrees = [1,2,3]

8、划分数据集

x, y, x_train, x_test, y_train, y_test = split_data()

9、训练模型,并打印train score

res = train_model(x_train, x_test, y_train, y_test, degrees)

10、画出学习曲线

cv = ShuffleSplit(n_splits=10, test_size=0.2, random_state=0)
plt.figure(figsize=(10, 6))for index, data in enumerate(res):plot_learning_curve(plt, data["model"], "degree %d"%data["degree"], x, y, cv=cv)
plt.show()



六、 结论与分析

通过对波士顿房价数据的分析预测练习,运用多元回归模型(一共十三个维度),前期训练量不足导致拟合程度不理想。经过模型的参数优化,采用了全部特征值,结果显示一次多项式训练准确度72%,测试准确度76%。二次多项式训练准确度92%,测试准确度89%,mae=2.36, mse=8.67。综上所述,采用二次多项式回归方法优化效果较好。

利用波士顿房价数据集实现房价预测相关推荐

  1. ML之xgboost:利用xgboost算法对Boston(波士顿房价)数据集【特征列分段→独热编码】进行回归预测(房价预测)+预测新数据得分

    ML之xgboost:利用xgboost算法对Boston(波士顿房价)数据集[特征列分段→独热编码]进行回归预测(房价预测)+预测新数据得分 导读 对Boston(波士顿房价)数据集进行特征工程,分 ...

  2. ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)+预测新数据得分

    ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测)+预测新数据得分 导读 本文章基于前边的一篇文章,对13种机器学习的回归模型性能比较 ...

  3. ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)来比较各模型性能

    ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测)来比较各模型性能 导读 通过利用13种机器学习算法,分别是LiR.kNN.SVR.D ...

  4. TF之LSTM:利用LSTM算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)

    TF之LSTM:利用LSTM算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测) 相关文章 DL之LSTM:利用LSTM算法对Boston(波士顿房价)数据集[13+1, ...

  5. ML之RFDT:利用RF(RFR)、DT(DTR)两种算法实现对boston(波士顿房价)数据集进行训练并预测

    ML之RF&DT:利用RF(RFR).DT(DTR)两种算法实现对boston(波士顿房价)数据集进行训练并预测 目录 输出结果 实现代码 输出结果 1.两种算法的预测结果 2.回归树的可视化 ...

  6. ML之FE:基于波士顿房价数据集利用LightGBM算法进行模型预测然后通过3σ原则法(计算残差标准差)寻找测试集中的异常值/异常样本

    ML之FE:基于波士顿房价数据集利用LightGBM算法进行模型预测然后通过3σ原则法(计算残差标准差)寻找测试集中的异常值/异常样本 目录 基于波士顿房价数据集利用LiR和LightGBM算法进行模 ...

  7. 利用LightGBM对波士顿房价进行模拟和预测

    目标:根据房屋属性预测每个房子的最终价格 任务流程: 一.分析数据指标 不同指标对结果的影响 连续值与离散值的情况 二.观察数据的分布,是否正态 是否满足正态分布 数据变换操作 三.数据预处理 缺失值 ...

  8. 五、实例:在波士顿房价数据集上用随机森林回归填补缺失值

    在波士顿房价数据集上用随机森林回归填补缺失值 点击标题即可获取源代码和笔记 一.引入 我们从现实中收集的数据,几乎不可能是完美无缺的,往往都会有一些缺失值.面对缺失值,很多人选择的方式是直接将含有缺失 ...

  9. ML之FE:利用【数据分析+数据处理】算法对国内某平台上海2020年6月份房价数据集【12+1】进行特征工程处理(史上最完整,建议收藏)

    ML之FE:利用[数据分析+数据处理]算法对国内某平台上海2020年6月份房价数据集[12+1]进行特征工程处理(史上最完整,建议收藏) 目录 利用[数据分析+数据处理]算法对链家房价数据集[12+1 ...

  10. 波士顿房价数据集解读

    机器学习:波士顿房价数据集 波士顿房价数据集(Boston House Price Dataset)(下载地址:http://t.cn/RfHTAgY) 使用sklearn.datasets.load ...

最新文章

  1. jQuery中FormData的使用
  2. 在LINUX中部署Apache
  3. python编程题二
  4. LeetCode 573. 松鼠模拟(数学)*
  5. 正在从“vetur”获取代码操作_长时间运行 io.Reader 和 io.Writer 操作测算进度和估算剩余时间...
  6. Image:介绍一些跟图片有关的控件,如图片展示特效,图片生产,图片保护等
  7. java跑到linux上,Java程序在Linux上运行虚拟内存耗用很大
  8. VB案例:多功能文本处理器
  9. bzoj3555 企鹅QQ
  10. 【Spring笔记】c空间和p命名空间注入
  11. swift 笔记 (二十一) —— 高级运算符
  12. 时间分割法 计算机组成,时间分割
  13. java做万年历,Java做的万年历
  14. Java 发送短信工具类
  15. 字符串的解读和标签模板
  16. 什么叫做云计算?学习云计算先要理解
  17. 【高德地图进阶】--- 带图片的点(1)
  18. 选择粘贴性无html,用好Office的选择性粘贴
  19. 安卓开发者网站!Android开发岗还不会这些问题,Android面试题及解析
  20. [附源码]Java计算机毕业设计SSM菜鸟驿站快递分发系统

热门文章

  1. CocosBuilder学习之一:认识CocosBuilder
  2. omitted for duplicate_EMC_Measurement_and_Reduction_Techniques_for_SwitchMode_Power
  3. SAP ABAP开发视频学习(视频教程)
  4. 手把手从零开始学习树莓派教程
  5. Google 本地搜索 实例
  6. C#身份证号码验证器(检验格式是否正确)
  7. 计算机打印服务总是自动关闭,XP系统Print spooler总是自动关闭的解决方法
  8. 周志华《机器学习》习题3.4——用UCI数据集比较10折交叉验证法和留一法
  9. 二进制编码转ASCII字符与字符转二进制码的小解码器、编码器
  10. 精讲RestTemplate第6篇-文件上传下载与大文件流式下载