【实战】——基于机器学习回归模型对广州二手房价格进行分析及模型评估
目录
- 1、数据导入
- 2、数据清洗
- 2.1、变量选取
- 2.2、空值处理
- 2.3、类型转化
- 2.4、数据再处理
- 3、机器学习sklearn的实现
- 3.1、训练集和测试集的拆分
- 3.2、数据的标准化
- 3.3、线性回归模型
- 3.4、随机森林模型
- 结语
1、数据导入
首先是数据分析不可或缺的模块导入
import numpy as np
import pandas as pd
然后就是数据的导入了,数据的获取的方法有很多,比如sklearn.datasets
模块内置的数据加利福尼亚的房价fetch_california_housing
而我这里选取的数据来源是广州链家二手房网站的数据,一共有4W+个数据
df = pd.read_csv('...\\house.csv', encoding='gbk')
df
2、数据清洗
由于数据是在网站上爬取的,其中有部分数据是我们不需要的,有的数据是需要修改的,因此要对数据进行清洗整理
2.1、变量选取
首先,找出可用的、对二手房价格产生显著影响的变量
gzdf = df[['room','livingroom','area','decoration','elevator','level','total_level','building_year','unit_price']]
gzdf.head()
在这里,我认为需要纳入模型的变量一共有8个,分别是:
变量 | 描述 |
---|---|
room | 卧室数量 |
livingroom | 客厅数量 |
area | 房屋面积 |
decoration | 装修程度 |
elevator | 是否有电梯 |
level | 房子所属楼层高度 |
total_level | 楼层总高度 |
building_year | 建成年份 |
最后就是我们的目标变量:
目标变量 | 描述 |
---|---|
unit_price | 每平方价格 |
2.2、空值处理
大家如果仔细观察所有筛选出来的数据就可以发现,其中有一些数据是空的或者是NaN,所以要对这些空数据进行处理:
gzdf = gzdf.dropna(axis=0, how='any', thresh=None, subset=['room','livingroom','area','decoration','elevator','level','total_level','building_year','unit_price'], inplace=False)
gzdf
因为这里我觉得数据量充足,就直接将那些包含空值的行进行删除,得出结果还有3w+个数据:
2.3、类型转化
因为其中有些变量是文本类型的,不利于对数据进行分析,所以接下来就是将这些变量的数据转换成数量数据:
装修程度
gzdf['decoration'][gzdf['decoration']=='毛坯'] = 1
gzdf['decoration'][gzdf['decoration']=='简装'] = 2
gzdf['decoration'][gzdf['decoration']=='精装'] = 3
gzdf
是否拥有电梯
gzdf['elevator'][gzdf['elevator']==False] = 0
gzdf['elevator'][gzdf['elevator']==True] = 1
gzdf
房屋所处楼层高度
gzdf['level'][gzdf['level']=='低'] = 1
gzdf['level'][gzdf['level']=='中'] = 2
gzdf['level'][gzdf['level']=='高'] = 3
gzdf
2.4、数据再处理
原本以为这样就可以了,可没想到后来进行模型回归时一直报错,一直找不到问题所在,最后只能将这些数据导出查看,发现原来unit_price等变量中有些数据竟然是“精装、简装”,导致数据清洗不干净,所以只能再次处理一下数据了
gzdf = gzdf[gzdf['unit_price']!='精装']
gzdf = gzdf[gzdf['unit_price']!='简装']
gzdf = gzdf[gzdf['decoration']!='其他']
gzdf
还好数据量不算太少,不然就不能直接删除掉这些数据了
3、机器学习sklearn的实现
数据处理就告一段落了,接下来是机器学习部分的内容了
3.1、训练集和测试集的拆分
首先,将所有数据拆分成训练集和测试集
from sklearn.model_selection import train_test_split
x = gzdf.drop(['unit_price'], axis=1)
y = gzdf['unit_price']
train_x, test_x, train_y, test_y = train_test_split(x,y,test_size=0.2, random_state=42)
3.2、数据的标准化
并且将数据标准化,有利于提高模型回归的准确度
from sklearn.preprocessing import StandardScaler
ss = StandardScaler().fit(train_x)
train_x = pd.DataFrame(ss.transform(train_x), columns = train_x.columns)
test_x = pd.DataFrame(ss.transform(test_x), columns = test_x.columns)
train_x
可以看到,训练集一共有2.5w+,所以测试集数据量大概也就是6000+
3.3、线性回归模型
在众多的回归模型中,我们最熟悉的、用得较多的就是线性回归了。线性回归的好处就是简单,但缺点就是其回归结果不太理想。
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(train_x, train_y)
lrscore = lr.score(test_x,test_y)*100
print("sklearn线性回归模型得分:{}%".format(lrscore))
模型评估的score描述的是回归模型的R方,数值越趋近于1,表示模型回归结果越好。但从这里可以看到线性回归模型的评估得分不太好
接下来让我们将真实数据和预测数据可视化,可以更加直接地观察到回归结果的好坏
import matplotlib.pyplot as plt
from matplotlib import rcParams
lr_pred=lr.predict(test_x)
real_data = test_y[:200]
lr_data = lr_pred[:200]
fig = plt.figure(figsize=(20,16))
plt.plot(range(len(real_data)),real_data,'r',label='real_data',linewidth=3)
plt.plot(range(len(lr_data)),lr_data,'g--',label='lr_data',linewidth=2)
fig.tight_layout()
plt.legend(loc='best')
plt.title("sklearn线性回归模型")
plt.show()
这里选取了测试集的前200个数据,红色实线表示真实数据,绿色虚线表示预测数据,可以看到预测的结果并不理想。
3.4、随机森林模型
随机森林(Random forest)指的是利用多棵树对样本进行训练并预测的一种分类器,可以产生高准确度的模型。
from sklearn import ensemble
model_rf = ensemble.RandomForestRegressor(n_estimators=20)
model_rf.fit(train_x, train_y)
rf_score = model_rf.score(test_x,test_y)*100
print("sklearn随机森林模型得分:{}%".format(rf_score))
rf_pred=model_rf.predict(test_x)
可以看到随机森林模型R方达到0.888,可以说是相当高的了
import matplotlib.pyplot as plt
from matplotlib import rcParams
real_data = test_y[:200]
rf_data = rf_pred[:200]
fig = plt.figure(figsize=(20,16))
plt.plot(range(len(real_data)),real_data,'r',label='real_data',linewidth=3)
plt.plot(range(len(rf_data)),rf_data,'g--',label='rf_data',linewidth=2)
fig.tight_layout()
plt.legend(loc='best')
plt.title("sklearn随机森林模型")
plt.show()
接下来选取数据的前200个进行可视化,通过上图可以很直接地观察到大部分数据预测的结果很准确,只有少部分误差。我们也可以随机选取200个数据进行可视化:
总体上看还是可以的,只是个别较为特殊的数据拟合的不好,可能存在一些没有纳入模型但却对目标变量产生影响的变量没有考虑到。
结语
关于机器学习回归模型就说到这里了,如果觉得写的不错文章写的不错的小伙伴记得点赞、关注、收藏三连哦~
相关数据及代码在我的资源上,大家可以下载下来自己练一练
【实战】——基于机器学习回归模型对广州二手房价格进行分析及模型评估相关推荐
- 基于机器学习梯度下降优化算法来寻找最佳的线性回归模型
https://www.toutiao.com/a6638782437587419652/ 幻风的AI之路 2018-12-25 18:12:27 线性回归模型 线性回归模型是一个非常简单的算法模型, ...
- 2021遥感应用组二等奖:基于机器学习回归算法的鄱阳湖水质遥感定量反演及时序变化监测研究
作品介绍 一.作品背景 鄱阳湖是中国第一大淡水湖,也是中国第二大湖,它在调节长江水位.涵养水源.改善当地气候等方面起着重大的作用.但近年来受围垦.环境污染等人类活动影响,鄱阳湖湿地退化严重,同时使鄱阳 ...
- 2021遥感应用组二等奖:基于机器学习回归算法的鄱阳湖水质遥感定量反演及时序变化监测研究
作品介绍 一.作品背景 鄱阳湖是中国第一大淡水湖,也是中国第二大湖,它在调节长江水位.涵养水源.改善当地气候等方面起着重大的作用.但近年来受围垦.环境污染等人类活动影响,鄱阳湖湿地退化严重,同时使鄱阳 ...
- 基于逻辑回归的金融风控贷款违约预测分析(笔记)
一.背景与思路 (一)背景 核心问题:对贷款偿债能力的评估 1. 方法:利用逻辑回归(理解简单,可解释性强) 2. 信用评分卡的构建 金融风控 定性分析 逻辑回归 定量分析 信用评分卡 (二)流程 1 ...
- 数学建模之模型代码全归纳——叁:分析类模型Ⅰ拟合法
如果一直钻研一类问题的话,思想就会固化,所以这次带来的是预测类模型中的插值与拟合,而这个也是笔者学习过程中经典的入门模型. 目录 模型 历史背景 图像概述 模型步骤 典型例题 优劣分析 优化改进 代码 ...
- 人脸识别与美颜算法实战-基于机器学习的人脸识别
机器学习根据输出的类型一般分为两类,分类和回归.分类的输出一般是离散值,回归输出的值一般是连续的.比如,人脸识别这种就属于分类问题,房价预测一般是一个回归问题. 鸢尾花分类 # -*- coding: ...
- 基于逻辑回归算法模型搭建思路
在真实工作场景中,有多种算法依据借贷数据集建立模型,主要使用的算法有逻辑回归.神经网络.决策树.贝叶斯信念网.GBDT算法等,本系列文章旨在为刚入门和对模型感兴趣的同学介绍传统风控模型算法之一--逻辑 ...
- 【ML】基于机器学习的房价预测研究(系列7:双向LSTM模型)
写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 本次实战的项目是:基于机器学习的房价预测研究(附完整代 ...
- 基于机器学习的电影票房分析与预测系统
温馨提示:文末有 CSDN 平台官方提供的博主 Wechat / QQ 名片 :) 1. 项目简介 票房作为衡量电影能否盈利的重要指标受诸多因素共同作用影响且其影响机制较为复杂,电影票房的准确预测是比 ...
最新文章
- C_str的入门级notes
- mysql删除原则_MySQL数据库的增删选查
- 简单文件传输协议TFTP分析还原
- 依赖注入@Autowired@Primary@Quelifier使用
- login控件“您的登录尝试不成功。请重试”的解决方法
- Ubuntu终端命令行不显示颜色
- eclipse配置PHP自动提示代码
- 字符串操作以及打印 —— 实现上传下载的进度条功能
- android双usb麦克风,USB麦克风24bit192K单麦芯片方案-SSS1630
- css_02 | CSS——CSS 选择器详解
- Linux数据管理——文件锁定
- Visio 2013导入图库
- 字体直链提取器_MIUI主题直链提取器下载-MIUI主题直链提取软件 v1.3.5_5577安卓网...
- 32位服务器系统支持8G内存,32位系统怎么支持8g内存条win10 64位系统闲置服务器...
- tftp命令使用说明
- 输入年份和月份输出该月有多少天python_输入年份和月份,输出该月有多少天,判断这一天是该年的第几天...
- 广东工业大学2020级年ACM第一次月赛
- jenkins发送allure测试报告
- 【怎样制作ppt课件】Focusky教程 | 设置插入的视频循环播放
- 远距离激光多脉冲测距TDC2K8S芯片使用
热门文章
- 怎么把PDF文件转换成图片?分享三个方法
- Android中的多媒体开发(一)——使用SoundPool来播放音效
- TeraCopy - 快速拷贝文件工具
- 基于C#实现的坦克大战游戏的最短路
- 香农公式--通信的浅显理解--单纯只是为了弄懂功率和信道容量的关系
- android手机 GPRS 已断开连接 无法连接
- 语音的频率、频率分辨率、采样频率、采样点数、量化、增益
- html实现鼠标移动波纹效果,js实现拖动滑块和点击水波纹效果
- iOS录音播放简例-AVFoundation
- html怎么做成锁屏壁纸,抖音怎么把视频做成壁纸 抖音短视频怎么弄成锁屏壁纸-站长资讯中心...