深度学习第一次作业 - 波士顿房价预测
文章目录
- 划分训练集和测试集
- 建立线性回归模型
- 特征选择重建模型
- 尝试使用GradientBoosting
import pandas as pd
import numpy as np
import seaborn as sns
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
from matplotlib import pyplot as plt
from sklearn.decomposition import PCA
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置在matplotlib上的中文字体
plt.rcParams['axes.unicode_minus'] = False # 在matplotlib绘图正常显示符号x_data = load_boston().data # 导入所有特征变量
y_data = load_boston().target # 导入目标变量房价
feature_name = load_boston().feature_names # 导入特征名
df = pd.DataFrame(x_data,columns=feature_name)
df['MEDV'] = y_data
df.head()
CRIM | ZN | INDUS | CHAS | NOX | RM | AGE | DIS | RAD | TAX | PTRATIO | B | LSTAT | MEDV | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.00632 | 18.0 | 2.31 | 0.0 | 0.538 | 6.575 | 65.2 | 4.0900 | 1.0 | 296.0 | 15.3 | 396.90 | 4.98 | 24.0 |
1 | 0.02731 | 0.0 | 7.07 | 0.0 | 0.469 | 6.421 | 78.9 | 4.9671 | 2.0 | 242.0 | 17.8 | 396.90 | 9.14 | 21.6 |
2 | 0.02729 | 0.0 | 7.07 | 0.0 | 0.469 | 7.185 | 61.1 | 4.9671 | 2.0 | 242.0 | 17.8 | 392.83 | 4.03 | 34.7 |
3 | 0.03237 | 0.0 | 2.18 | 0.0 | 0.458 | 6.998 | 45.8 | 6.0622 | 3.0 | 222.0 | 18.7 | 394.63 | 2.94 | 33.4 |
4 | 0.06905 | 0.0 | 2.18 | 0.0 | 0.458 | 7.147 | 54.2 | 6.0622 | 3.0 | 222.0 | 18.7 | 396.90 | 5.33 | 36.2 |
- CRIM: 城镇人均犯罪率
- ZN: 住宅用地所占比例
- INDUS: 城镇仲非住宅用地所占比例
- CHAS: 虚拟变量,用于回归分析
- NOX: 环保指数
- RM: 每栋住宅的房间数
- AGE: 1940年以前建成的自祝单位的比例
- DIS: 距离5个波士顿的就业中心的加权距离
- RAD: 距离高速公路的便利指数
- TAX: 每一万美元的不动产税率
- PTRATIO: 城镇中的教师学生比例
- B: 城镇中的黑人比例
- LSTAT: 地区中有多少房东属于低收入人群
- MEDV: 自住房屋房价中位数
查看各个特征是否有相关性,判断用哪种模型合适
plt.figure(figsize=(12,8))
sns.heatmap(df.corr(), annot=True, fmt='.2f', cmap='PuBu')
<AxesSubplot: >
数据不存在相关性较小的属性,也不用担心共线性,故我们可以用线性回归模型去预测
df.corr()['MEDV'].sort_values()
LSTAT -0.737663
PTRATIO -0.507787
INDUS -0.483725
TAX -0.468536
NOX -0.427321
CRIM -0.388305
RAD -0.381626
AGE -0.376955
CHAS 0.175260
DIS 0.249929
B 0.333461
ZN 0.360445
RM 0.695360
MEDV 1.000000
Name: MEDV, dtype: float64
尝试了解因变量和自变量,自变量和自变量之间的关系
sns.pairplot(df[["LSTAT","RM","PTRATIO","MEDV"]])
<seaborn.axisgrid.PairGrid at 0x2c88da29a90>
划分训练集和测试集
由于数据没有null值,并且都是连续型数据,所以暂时不用对数据进行过多的处理,不够既然要建立模型,首先就要进行对housing分为训练集和测试集,取出了大概百分之20的数据作为测试集,剩下的百分之70为训练集
X ,y = x_data,y_data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=888)
建立线性回归模型
首先,利用线性回归模型对数据进行训练,并预测测试集数据
linear_model = LinearRegression()
linear_model.fit(X_train, y_train)
coef = linear_model.coef_#回归系数
line_pre = linear_model.predict(X_test)
print('SCORE:{:.4f}'.format(linear_model.score(X_test, y_test)))
print('RMSE:{:.4f}'.format(np.sqrt(mean_squared_error(y_test, line_pre))))
coef
SCORE:0.7559
RMSE:4.3708array([-1.19007229e-01, 3.64055815e-02, 1.68552680e-02, 2.29397031e+00,-1.60706448e+01, 3.72371469e+00, 9.22765437e-03, -1.30674803e+00,3.43072685e-01, -1.45830386e-02, -9.73486692e-01, 7.89797436e-03,-5.72555056e-01])
线性回归相关的系数如下
df_coef = pd.DataFrame()
df_coef['Title'] = df.columns.delete(-1)
df_coef['Coef'] = coef
df_coef
Title | Coef | |
---|---|---|
0 | CRIM | -0.119007 |
1 | ZN | 0.036406 |
2 | INDUS | 0.016855 |
3 | CHAS | 2.293970 |
4 | NOX | -16.070645 |
5 | RM | 3.723715 |
6 | AGE | 0.009228 |
7 | DIS | -1.306748 |
8 | RAD | 0.343073 |
9 | TAX | -0.014583 |
10 | PTRATIO | -0.973487 |
11 | B | 0.007898 |
12 | LSTAT | -0.572555 |
hos_pre = pd.DataFrame()
hos_pre['Predict'] = line_pre
hos_pre['Truth'] = y_test
hos_pre.plot()
<AxesSubplot: >
- 得出score为76%,从上图得知预测的房价整体偏小,在10-35这个区间预测结果较为准确,超过这个区间预测价格偏小,可进一步对原始数据离群值做处理
- 数据比较干净,练习起来缺少特征工程部分的工作,而且是预测性模型,相比分类问题少了模型选择上的空间
特征选择重建模型
试使用相关性最高的3个特征量重建模型,并与原模型进行比较
df.corr()['MEDV'].abs().sort_values(ascending=False).head(4)
MEDV 1.000000
LSTAT 0.737663
RM 0.695360
PTRATIO 0.507787
Name: MEDV, dtype: float64
X2 = np.array(df[['LSTAT','RM','PTRATIO']])
X2_train, X2_test, y_train, y_test = train_test_split(X2, y, random_state=1,test_size=0.2)
linear_model2 = LinearRegression()
linear_model2.fit(X2_train,y_train)
print(linear_model2.intercept_)
print(linear_model2.coef_)
line2_pre = linear_model2.predict(X2_test) #预测值
print('SCORE:{:.4f}'.format(linear_model2.score(X2_test, y_test)))#模型评分
print('RMSE:{:.4f}'.format(np.sqrt(mean_squared_error(y_test, line2_pre))))#RMSE(标准误差)
24.112838451644947
[-0.59061956 3.81700007 -0.97465491]
SCORE:0.6959
RMSE:5.4820
在选取的特征数量远小于第一个模型情况下,得分0.695,略小于第一个模型的0.7559
尝试使用GradientBoosting
X ,y = x_data,y_data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=888)
from sklearn import ensemble
clf = ensemble.GradientBoostingRegressor()
clf.fit(X_train, y_train)
clf_pre=clf.predict(X_test) #预测值
print('SCORE:{:.4f}'.format(clf.score(X_test, y_test)))#模型评分
print('RMSE:{:.4f}'.format(np.sqrt(mean_squared_error(y_test, clf_pre))))#RMSE(标准误差)
SCORE:0.9188
RMSE:2.5209
可以看出,梯度决策树(Gradient Boosted Decision Tree)算法能得到非常良好的结果
深度学习第一次作业 - 波士顿房价预测相关推荐
- 统计学习基础:数据挖掘、推理和预测_百度零基础深度学习笔记(三) 波士顿房价预测...
波士顿房价预测 波士顿房价预测是一个经典的机器学习任务,期待构建一个房价预测模型,其数据中包含13个影响房价的因素和该类型房屋均价. 波士顿房价影响因素 数据预处理 数据预处理包括: 数据导入 数据形 ...
- 【深度学习】实战Kaggle竞赛之线性模型解决波士顿房价预测问题(Pytorch)
[深度学习]实战Kaggle竞赛之线性模型解决波士顿房价预测问题 文章目录 1 概述1.1 Competition Description1.2 Practice Skills 2 数据处理 3 训练 ...
- 教你使用百度深度学习框架PaddlePaddle完成波士顿房价预测(新手向)
首先,本文是一篇纯新手向文章,我自己也只能算是入门,有说错的地方欢迎大家批评讨论 目录 一.人工智能.机器学习.深度学习 二.PaddlePaddle(飞桨) 三.波士顿房价预测模型 数据处理 模型设 ...
- 深度学习入门——波士顿房价预测
基于神经网络模型的波士顿房价预测 波士顿房价预测是一个经典的机器学习任务,类似于程序员世界的"Hello World".以"波士顿房价预测"任务为例,我们学习如 ...
- 使用Python和Numpy进行波士顿房价预测任务(二)【深度学习入门_学习笔记】
使用Python和Numpy进行波士顿房价预测任务–详解 目录: 一.数据处理 (1)读入数据 (2)数据形状变换 (3)数据集划分 (4)数据归一化处理 (5)封装成load data函数 二.模型 ...
- 深度学习:波士顿房价预测
深度学习:波士顿房价预测 1.代码 #加载波士顿房价数据 import keras from keras.datasets import boston_housing (train_data,trai ...
- 深度学习(波士顿房价预测)
本程序采用百度paddlepaddle深度学习框架,并在百度AI Studio平台上运行. 目录 1实验背景 2 实验过程 2.1 数据处理 2.1.1数据集导入并按规定形状保存 2.1.2数据集的划 ...
- 深度学习经典入门项目—波士顿房价预测
目录 房价预测--线性回归 数据处理 数据形状变换 数据集划分 数据归一化处理 housing.data数据格式 模型设计 线性回归模型设计 训练配置 训练过程 保存并测试模型 保存模型 测试模型 房 ...
- 使用Python和Numpy进行波士顿房价预测任务(一)【深度学习入门_学习笔记】
波士顿房价预测是一个经典的机器学习任务,类似于程序员世界的"Hello World".和大家对房价的普遍认知相同,波士顿地区的房价是由诸多因素影响的. 下载数据集:https:// ...
- MOOC网深度学习应用开发1——Tensorflow基础、多元线性回归:波士顿房价预测问题Tensorflow实战、MNIST手写数字识别:分类应用入门、泰坦尼克生存预测
Tensorflow基础 tensor基础 当数据类型不同时,程序做相加等运算会报错,可以通过隐式转换的方式避免此类报错. 单变量线性回归 监督式机器学习的基本术语 线性回归的Tensorflow实战 ...
最新文章
- 验证(verification)和确认(validation)
- 处理点云数据 点云与生成前视图
- 关于Jquery中ajax方法data参数用法
- String 创建对象问题
- Application 用法
- 培训班出来的程序员能找到工作吗?
- IBus拼音无法选择候选词故障
- GprMax2D ——ABC(吸收边界条件)相关命令
- html表格数据按公式自动计算,Word表格怎么自动填充和计算数据
- SLAM Evaluation 之轨迹对齐论文翻译Closed-Form Solution of Absolute Orientation Using Orthonormal Matrices
- OWASP juice shop靶场闯关题解
- 孩子学python_小孩子的内心世界
- ensp路由器注册_使用ensp进行简单的路由器互连实验
- pytorch快速上手-使用自动标注软件Openlabeling和yolov5快速完成目标检测
- Win10 易升更新 安装wls2 部署docker
- pygame用blit()实现动画效果
- 长春理工大学成人高考报名流程
- Vue table 点击按钮展开折叠面板
- GooglePlay OAuth使用
- LCD接口设计系列一:基于eDP接口屏的硬件电路设计
热门文章
- 一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子以及角谷定理的计算
- 401832-00-4,Thalidomide-O-PEG4-Amine在EDC或HATU存在下与NHS酯基或羧酸反应的合成化合物
- matplotlib 全局字体改为 Times New Roman
- uniapp 总结篇 (小程序)
- 捡到的苹果手机怎么解id锁_苹果手机维修中软解和硬解的区别
- RSA算法详解与举例
- 为什么没什么人玩呢?凰华学院主校剧情有感
- 软件开发实习做什么_为什么要有开发人员实习时间
- NPN和PNP三极管收录笔记
- js 深浅拷贝的整理