波士顿房价预测

波士顿房价数据集介绍
波士顿房价数据说明:此数据源于美国某经济学杂志上,分析研究波士顿房价( Boston HousePrice)的数据集。数据集中的每一行数据都是对波士顿周边或城镇房价的情况描述。本问题是一个回归问题。每个类的观察值数量是均等的,共有 506 个观察,13 个输入变量和1个输出变量。
数据特征:

  1. CRIM: 城镇人均犯罪率
  2. ZN: 住宅用地所占比例
  3. INDUS: 城镇中非住宅用地所占比例
  4. CHAS: 虚拟变量,用于回归分析
  5. NOX: 环保指数
  6. RM: 每栋住宅的房间数
  7. AGE: 1940 年以前建成的自住单位的比例
  8. DIS: 距离 5 个波士顿的就业中心的加权距离
  9. RAD: 距离高速公路的便利指数
  10. TAX: 每一万美元的不动产税率
  11. PTRATIO: 城镇中的教师学生比例
  12. B: 城镇中的黑人比例
  13. LSTAT: 地区中有多少房东属于低收入人群
  14. MEDV: 自住房屋房价中位数(也就是均价)

一、加载需要的包

from sklearn.datasets import load_boston
import matplotlib.pyplot as plt
import numpy as np

二、数据预处理

(1)读入数据和观察数据 看看是否需要进行数据预处理。如是否需要 1. 去除唯一属性;2. 处理缺失值;3. 特征编码;4. 数据标准化、正则化; 5. 特征选择(降维)

dataset = load_boston()
x_data = dataset.data
y_data = dataset.target
name_data =dataset.feature_names
print(name_data)

输出结果:
[‘CRIM’ ‘ZN’ ‘INDUS’ ‘CHAS’ ‘NOX’ ‘RM’ ‘AGE’ ‘DIS’ ‘RAD’ ‘TAX’ ‘PTRATIO’
‘B’ ‘LSTAT’]
(2)特征工程-可视化各个特征与房价的关系

for i in range(13):plt.subplot(7,2,i+1) #7行2列第i+1个图plt.scatter(x_data[:,i],y_data,s=10)  #横纵坐标和点的大小plt.title(name_data[i])plt.show()print(name_data[i],np.corrcoef(x_data[:i]),y_data)#打印刻画每个维度特征与房价相关性的协方差矩阵

产生如图所示的结果

查看房价数据分布,发现有一部分数据等于50,视为异常数据

for i in range(len(y_data)):   plt.scatter(i,y_data[i],s=10)  #横纵坐标和点的大小

(3)、特征工程-处理数据 基于散点图,分析因变量与自变量的相关性,把不相关的数据剔除。经过上面散点图的分析,可以看到数据异常的变量需要特殊处理,根据散点图分析,房屋的’RM(每栋住宅的房间数)’,‘LSTAT(地区中有多少房东属于低收入人群)’,'PTRATIO(城镇中的教师学生比例)’特征与房价的相关性最大,所以,将其余不相关特征剔除。

i_=[]
for i in range(len(y_data)):if y_data[i] == 50:i_.append(i)#存储房价等于50 的异常值下标
x_data = np.delete(x_data,i_,axis=0)                #删除样本异常值数据
y_data = np.delete(y_data,i_,axis=0)                #删除标签异常值
name_data = dataset.feature_names
j_=[]
for i in range(13):if name_data[i] =='RW'or name_data[i] == 'PTRATIO'or name_data[i] == 'LSTAT'                                               : #提取'RM'、'PTRATIO'、'LSTAT'三个主要特征continuej_.append(i)#存储其他次要特征下标
x_data = np.delete(x_data,j_,axis=1)#在总特征中删除次要特征
print(np.shape(y_data))
print(np.shape(x_data))
for i in range(len(y_data)):   plt.scatter(i,y_data[i],s=10)


(4)、数据分割:数据分割为训练集和测试集

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test =train_test_split(x_data,y_data,random_state = 0,test_size = 0.20)
print(len(X_train))
print(len(X_test))
print(len(y_train))
print(len(y_test))

输出结果:
392
98
392
98

(5)、数据归一化

from sklearn import preprocessingmin_max_scaler = preprocessing.MinMaxScaler()
X_train = min_max_scaler.fit_transform(X_train)
X_test = min_max_scaler.fit_transform(X_test)#标签归一化的目的是什么呢,实验证明,归一化之后结果好了0.1左右
y_train = min_max_scaler.fit_transform(y_train.reshape(-1,1)) #转化为任意行一列
y_test = min_max_scaler.fit_transform(y_test.reshape(-1,1)) #转化为一列

三、模型训练


越接近1效果越好,为0表示与取均值接近,为负则表示连平均值都不如

1.线性回归

from sklearn import linear_model
#请完成线性回归的代码,生成lr_y_predict作为测试集的预测结果
lr = linear_model.LinearRegression() #选择线性回归模型
lr.fit(X_train,y_train) #模型的训练
lr_y_predict = lr.predict(X_test) #预测数据
from sklearn.metrics import r2_score
score_lr = r2_score(y_test,lr_y_predict)
score_lr

其中lr_y_predict为预测出的结果,score_lr表示的为使用测试数据查看该模型训练是否较好
结果:0.6439270371515048
2.岭回归

#请完成岭回归的代码,并设置适当的alpha参数值
rr=linear_model.Ridge() #选择模型岭回归
rr.fit(X_train,y_train) #模型的训练
rr_y_predict=rr.predict(X_test)
score_rr = r2_score(y_test,rr_y_predict)
score_rr

结果:0.6393923188987708
3.lasso

lassr = linear_model.Lasso(alpha=.0001)
lassr.fit(X_train,y_train)
lassr_y_predict=lassr.predict(X_test)score_lassr = r2_score(y_test,lassr_y_predict)
print(score_lassr)

4.SVR

from sklearn.svm import SVR
svr_rbf = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=.1) #高斯核
svr_lin = SVR(kernel='linear', C=100, gamma='auto') #线性核
svr_poly = SVR(kernel='poly', C=100, gamma='auto', degree=3, epsilon=.1,coef0=1) #径向基核函数
svr_rbf_y_predict=svr_rbf.fit(X_train, y_train).predict(X_test)
score_svr_rbf = r2_score(y_test,svr_rbf_y_predict)
svr_lin_y_predict=svr_lin.fit(X_train, y_train).predict(X_test)
score_svr_lin = r2_score(y_test,svr_lin_y_predict)
svr_poly_y_predict=svr_poly.fit(X_train, y_train).predict(X_test)
score_svr_poly = r2_score(y_test,svr_poly_y_predict)
#绘制真实值和预测值对比图
def draw_infer_result(groud_truths,infer_results):title='Boston'plt.title(title, fontsize=24)x = np.arange(-0.2,2) y = xplt.plot(x, y)plt.xlabel('ground truth', fontsize=14)plt.ylabel('infer result', fontsize=14)plt.scatter(groud_truths, infer_results,color='green',label='training cost') plt.grid()plt.show()
draw_infer_result(y_test,lr_y_predict)
draw_infer_result(y_test,rr_y_predict)
draw_infer_result(y_test,lassr_y_predict)
draw_infer_result(y_test,svr_rbf_y_predict)
draw_infer_result(y_test,svr_lin_y_predict)
draw_infer_result(y_test,svr_poly_y_predict)
print("score of lr:",score_lr)
print("score of rr:",score_rr)
print("score of lassr:",score_lassr)
print("score of svr_rbf:",score_svr_rbf)
print("score of svr_lin:",score_svr_lin)
print("score of svr_poly:",score_svr_poly)


可以看出效果并不是特别的好。

机器学习入门实战---波士顿房价预测相关推荐

  1. Python机器学习/数据挖掘项目实战 波士顿房价预测 回归分析

    Python机器学习/数据挖掘项目实战 波士顿房价预测 回归分析 此数据源于美国某经济学杂志上,分析研究波士顿房价( Boston HousePrice)的数据集. 在这个项目中,你将利用马萨诸塞州波 ...

  2. 深度学习经典入门项目—波士顿房价预测

    目录 房价预测--线性回归 数据处理 数据形状变换 数据集划分 数据归一化处理 housing.data数据格式 模型设计 线性回归模型设计 训练配置 训练过程 保存并测试模型 保存模型 测试模型 房 ...

  3. 机器学习项目实践——波士顿房价预测

    基于线性回归预测波士顿房价 摘要:分类和回归属于机器学习领域有监督学习算法的两种方法,有监督学习是通过已有的训练样本去训练得到一个模型,再使用这个模型将所有的输入映射到相应的输出,若输出结果是离散型称 ...

  4. kaggle房价预测特征意思_Kaggle实战-波士顿房价预测

    本文数据集来自Kaggle波士顿房价预测项目https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data 1.数据 ...

  5. 机器学习入门实例-加州房价预测-1(数据准备与可视化)

    问题描述 数据来源:California Housing Prices dataset from the StatLib repository,1990年加州的统计数据. 要求:预测任意一个街区的房价 ...

  6. python数据分析项目实战波士顿房价预测——手写梯度下降法

    导入所需要的库 import numpy as np import pandas as pd from matplotlib import font_manager as fm, rcParams i ...

  7. MOOC网深度学习应用开发1——Tensorflow基础、多元线性回归:波士顿房价预测问题Tensorflow实战、MNIST手写数字识别:分类应用入门、泰坦尼克生存预测

    Tensorflow基础 tensor基础 当数据类型不同时,程序做相加等运算会报错,可以通过隐式转换的方式避免此类报错. 单变量线性回归 监督式机器学习的基本术语 线性回归的Tensorflow实战 ...

  8. 波士顿房价预测python决策树_波士顿房价预测 - 最简单入门机器学习 - Jupyter

    机器学习入门项目分享 - 波士顿房价预测 该分享源于Udacity机器学习进阶中的一个mini作业项目,用于入门非常合适,刨除了繁琐的部分,保留了最关键.基本的步骤,能够对机器学习基本流程有一个最清晰 ...

  9. 机器学习入门实践——线性回归模型(波士顿房价预测)

    机器学习入门实践--线性回归模型(波士顿房价预测) 一.背景介绍 给定一个大小为 n n n的数据集 { y i , x i 1 , . . . , x i d } i = 1 n {\{y_{i}, ...

最新文章

  1. 拒绝泡沫,客观评价!让我们从18个分立的视角来看AI
  2. service层加需要加锁吗_Redis分布式锁,你真的用对了吗?
  3. android 系统gpu 调试_【资讯】高通公布首批可OTA更新GPU驱动手机:谷歌Pixel 4/三星S10在列...
  4. 计算机专业的双证在职研究生,计算机类在职研究生最终能获得双证吗难度是不是很大呢...
  5. 内存泄漏和内存溢出的区别
  6. i2c_add_driver函数用法
  7. 【模式识别与机器学习】——3.9势函数法:一种确定性的非线性分类方法
  8. 利用ACS来实现AAA服务
  9. 阿里开发者招聘节 | 面试题08:NAS(Network Attached Storage)协议NFS和SMB相关问题
  10. SoftWater——SDN+UnderWater系列论文一
  11. (七)Netty与零拷贝
  12. idea通过数据库生成实体类插件_IDEA连接数据库自动生成实体类
  13. 关于 myeclipse 里面没有 add hibernate capabilities 问题解决方法
  14. 反射java 入门_[java 基础]反射入门
  15. macOS:隐私设置与数据库相关的问题
  16. 小技巧,windows电脑上多开软件的办法
  17. 微型计算机指的是重量轻,计算机与信息技术概述(答案)
  18. medusa破解ssh
  19. 备战数学建模9-层次分析法模型
  20. 基于web的拼图游戏

热门文章

  1. 上海银行公积金查询需求
  2. WordPress安装部署
  3. 苏轼《江城子》(十年生死)赏析
  4. 嵌入式物联网技术栈【协议篇】OPC UA协议
  5. 微信屏蔽app下载链接如何解决
  6. 郭光灿院士--奇妙的量子世界笔记1(量子世界和经典世界区联系)
  7. 取消大小周后首次发薪,字节跳动员工薪资普降17%
  8. 【python】利用广播星历计算BDS卫星的位置
  9. 中国经济的长周期走势
  10. 全媒体运营师胡耀文教你:大规模用户运营体系背后的3大子系统