Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >手把手带你开启机器学习之路——房价预测(一)

手把手带你开启机器学习之路——房价预测(一)

作者头像
超哥的杂货铺
发布于 2020-04-01 06:59:41
发布于 2020-04-01 06:59:41
2.2K2
举报
文章被收录于专栏:超哥的杂货铺超哥的杂货铺

本文我们使用加州住房价格数据集,从零开始,一步一步建立模型,预测每个区域的房价中位数。目的是完整实现一个机器学习的流程。

问题分析
获取数据

为了方便,我已经事先将数据下载到本地,后台回复“房价”,即可获取。该数据集以每一个街区为单位,包含街区的经纬度,居民年龄中位数,总房间数,总卧室数,人口数量,家庭数量,收入中位数,房价中位数,距离海边的描述等信息。街区在后文中也被称为区域,我们最终是要根据每个区域的其他特征预测该区域的房价中位数。

查看数据的结构

1.使用pandas读取数据,并用head()方法查看前5行样例。可以看到一共有10个属性(特征)

2.使用info()方法查看数据集的整体描述信息

我们可以获得以下信息:数据集一共包含20640个实例,其中total_bedroom有一些的缺失值。一共有9个float类型的属性,一个object类型的属性,ocean_proximity。

3.对于唯一一个分类属性,使用value_counts()方法查看它的分布情况

可以看到,该属性共有5个取值,每个取值都是字符串类型,后面我们需要对其进行一定的转换。

4.对于数值属性,使用describe()方法查看摘要,该方法默认处理数值类型的属性

结果输出了每个属性的个数count,平均值mean,标准差std,最小值min,最大值max,还有25%,50%,75%三个百分位数。需要注意这里的空值会被忽略,所以total_bedroom的count值是20433。

5.用直方图观察每个属性,了解数据的分布情况

(点击查看大图,黑色的坐标轴标签不太容易看)

以其中一个属性median_income为例,从第二行第三列的子图中我们可以看到,大多数的区域收入中位数约为2-4(单位未知)。收入超过10的区域很少。类似的可以对其他属性有一个认识。

划分训练集和测试集

以上我们对整个数据集进行了熟悉,包括数据类型,缺失情况。每个属性单独的取值等等。接下来我们首先将数据划分为训练集和测试集,为后续建立模型做铺垫。建立模型要在训练集上进行分析,而不关注任何测试集的信息,这样有助于提升模型的泛化能力。需要注意的是,在进行划分时,有纯随机抽样的方式和分层抽样的方式。

1.纯随机抽样

2.分层抽样

这里使用分层抽样需要结合实际的情境。我们从某渠道了解到,收入中位数对于预测房价的中位数有较大的影响。所以我们考虑在测试集中,该属性各取值的比例和整个数据集中接近。

由于收入是数值型的,我们首先需要将其离散化。

上面的代码将收入离散化为5类,输出了每一类的比例。接下来进行分层抽样。

分层抽样得到的start_test_set的不同收入类别的比例与原数据集几乎一致。而随机抽样的各收入类别的比例则与它们有一些差别。

划分完训练和测试集之后,可以把income_cat属性删掉(代码略)。

数据探索和和可视化

这里我们需要把测试集放在一边,只探索训练集,首先创建了一个副本。

1.探索不同的经纬度区域的数量

从图中可以看出某些经纬度(需要结合地理知识)的区域较多,某些地域较少,这样对于区域的分布有了一个直观的认识。

2.探索房价与人口和地理位置的关系规律

圆点越大代表人口越多,颜色越深代表房价越高。可以看到沿海地区房价高,人口多的地方房价高。

3.探究不同属性与房价中位数的相关性

  • 相关系数法
  • 分布矩阵

由于属性较多,因此只选取了与房价中位数最相关的几个。在上面的图中,对角线上展示了每个属性的直方图,其他位置展示了两两属性间的散点图。

可以发现收入的中位数与房价中位数相关性最强。

我们从图中能够发现二者的相关性,但也有几条水平的直线是”异常“值。例如房价50w,45w,28w处的直线。后续可能需要对其进行删除。

4.试验不同属性的组合

这一步我们可以从实际出发,通过现有的特征进行一些相互组合,衍生出新的特征。例如:

每个家庭的房间数=总房间数(totals_rooms)/总家庭数(housholds)

每个房间的卧室数=总的卧室数(total_bedrooms)/总的房间数(total_rooms)

每个家庭的人口数=总的人口数/总的家庭数(housholds)

验证一下我们新构造的三个特征与目标值之间的相关性系数:

可以看到新构造的属性比原来的两个属性与房价中位数的相关性更高。这一步可以帮助我们更深入的思考与预测目标相关的影响因素,帮助建立更深刻的理解。

数据准备

在开始之前,需要把预测目标和基本属性分开。

1.数据清理

  • 缺失值的处理 前面我们提到total_bedrooms属性有缺失。我们可以以下方法来处理: Scikit-Learn中提供了Imputer类来处理缺失值。使用中位数填充缺失值的代码如下:
    • 删除缺失的行,可以使用pandas中的dropna()方法
    • 删除该列,可以使用pandas中的drop()方法
    • 用平均值或中位数填充该值,可以使用pandas中的fillna()方法

Scikit-Learn中提供了Imputer类来处理缺失值。使用中位数填充缺失值的代码如下:

由于中位数只能针对数值型属性计算,我们需要先创建一个只有数值型属性的数据副本。

imputer计算好的缺失值存储在imputer.statistics中。通过上面的步骤,我们就把total_bedrooms的缺失值用中位数进行了填充。

  • 处理文本和分类属性 这里我们来处理上一步中删掉的ocean_proximity属性,它是一个类别型变量。需要将其转换为数字才能输入模型。Scikit-Learn有两种方式处理这种情况。 ① 使用LabelEncoder

encoder的classes_属性中对应的值依次被编码为0, 1, 2, 3, 4。 ② 使用 OneHotEncoder

以上两种方法最终可以得到onehot形式的矩阵。但第一种方法首先得到一个scipy的稀疏矩阵,仅存储非0元素的位置,但仍然可以像使用二维数组来使用它。在调用toarray才能得到numpy的数组。第二种方法是直接得到最终的结果。更快捷。但当特征很多的时候,numpy数组的存储会比较占空间。

  • 特征缩放 为了消除数据中量纲的影响,通常有两种方式对数据进行缩放:最大最小缩放和标准化。在scikitlearn中都提供了相应的方法。 最大最小缩放是将值减去最小值并除以最大值和最小值的差,将值最终归于0-1之间。标准化缩放则是首先减去平均值然后除以方差,最终范围不一定是0-1之间。
数据准备小结

上面我们对数据进行了缺失值处理,分类变量onehot处理,特征缩放处理等。这里进行一下统一的总结。如下面代码所示。最终得到的训练集有16个特征。

对于这一环节的数据处理,sklearn中提供了pipline的方式,可以将这一系列过程流水线化。看起来更清晰。准备好了数据之后,接下来如何进行模型选取,评估,参数调整呢。这些详细的内容我们下一篇文章再来系统学习~

小结

用下面的思维导图对本文的内容串联一下,可以在后台回复“房价”获取本文的数据,代码,思维导图和PDF版本。

reference:

《机器学习实战:基于Scikit-Learn和Tensorflow》第二章

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 超哥的杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
2 条评论
热度
最新
房价
房价
回复回复点赞举报
房价
房价
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
《Scikit-Learn与TensorFlow机器学习实用指南》第2章 一个完整的机器学习项目
第2章 一个完整的机器学习项目 来源:ApacheCN《Sklearn 与 TensorFlow 机器学习实用指南》翻译项目 译者:@SeanCheney 校对:@Lisanaaa @飞龙 本章中,你会假装作为被一家地产公司刚刚雇佣的数据科学家,完整地学习一个案例项目。下面是主要步骤: 项目概述。 获取数据。 发现并可视化数据,发现规律。 为机器学习算法准备数据。 选择模型,进行训练。 微调模型。 给出解决方案。 部署、监控、维护系统。 使用真实数据 学习机器学习时,最好使用真实数据,而不是人工数
ApacheCN_飞龙
2018/05/16
2.9K0
机器学习之数据预处理
当数据集的数值属性具有非常大的比例差异,往往导致机器学习的算法表现不佳,当然也有极少数特例。在实际应用中,通过梯度下降法求解的模型通常需要归一化,包括线性回归、逻辑回归、支持向量机、神经网络等模型。但对于决策树不使用,以C4.5为例,决策树在进行节点分裂时主要依据数据集D关于特征X的信息增益比,而信息增益比跟特征是否经过归一化是无关的
全栈程序员站长
2022/07/18
5900
[Hands On ML] 2. 一个完整的机器学习项目(加州房价预测)
范数的指数越高,就越关注大的值而忽略小的值。这就是为什么 RMSE 比 MAE 对异常值更敏感。但是当异常值是指数分布的(类似正态曲线),RMSE 就会表现很好。
Michael阿明
2020/07/13
2.5K0
[Hands On ML] 2. 一个完整的机器学习项目(加州房价预测)
《Scikit-Learn与TensorFlow机器学习实用指南》 第2章 一个完整的机器学习项目使用真实数据项目概览获取数据数据探索和可视化、发现规律为机器学习算法准备数据选择并训练模型模型微调启动
本章中,你会假装作为被一家地产公司刚刚雇佣的数据科学家,完整地学习一个案例项目。下面是主要步骤: 项目概述。 获取数据。 发现并可视化数据,发现规律。 为机器学习算法准备数据。 选择模型,进行训练。 微调模型。 给出解决方案。 部署、监控、维护系统。 使用真实数据 学习机器学习时,最好使用真实数据,而不是人工数据集。幸运的是,有上千个开源数据集可以进行选择,涵盖多个领域。以下是一些可以查找的数据的地方: 流行的开源数据仓库: UC Irvine Machine Learning Repository K
SeanCheney
2018/04/24
3.1K0
《Scikit-Learn与TensorFlow机器学习实用指南》 第2章 一个完整的机器学习项目使用真实数据项目概览获取数据数据探索和可视化、发现规律为机器学习算法准备数据选择并训练模型模型微调启动
爱数科案例 | 基于线性回归的加州房价预测
加州位于美国西南部,是美国经济较为发达、人口较为密集的行政区之一。加州的房价受到房龄、人口规模、地理位置等多种因素影响。本案例使用加州房价数据集,首先进行数据预处理和探索性数据分析,然后依次进行特征抽取、离散化、标准化、特征选择,最后建立线性回归模型对房价进行预测。
数据科学人工智能
2022/03/30
2.1K0
爱数科案例 | 基于线性回归的加州房价预测
手把手带你开启机器学习之路——房价预测(二)
在前一篇文章手把手带你开启机器学习之路——房价预测(一)中我们以加州住房价格数据集为基础,学习了数据抽样,数据探索性分析和可视化,数据预处理(缺失值填充,增加新特征,特征缩放,分类变量编码)等步骤,接下来继续深入,最终建立预测模型。可以在公众号后台回复“房价”获取两篇文章的数据,代码,PDF文件和思维导图。
超哥的杂货铺
2020/04/01
9870
带你建立一个完整的机器学习项目
首先,我们需要预览这个项目。项目的目的是什么,以房价预测为例,数据为StatLib的加州房产数据,那么目的就是预测街区的房产价格中位数。
统计学家
2019/09/03
6720
超级实用!如何为机器学习算法准备数据?
本文为《Scikit-Learn 和 TensorFlow 机器学习指南》的第二章的第 3 讲:为机器学习算法准备数据。
红色石头
2022/01/12
3470
《Scikit-Learn与TensorFlow机器学习实用指南》 第02章 一个完整的机器学习项目(下)选择并训练模型模型微调启动、监控、维护系统实践!练习
大多机器学习算法不能处理特征丢失,因此先创建一些函数来处理特征丢失的问题。前面,你应该注意到了属性total_bedrooms有一些缺失值。有三个解决选项:
SeanCheney
2018/09/19
1.2K0
手把手学机器学习算法中数据预处理(附代码)
当你想了解机器学习,最好的方式就是用真实的数据入手做实验。网络上有很多优秀的开源资料。这里我们选择了加利福尼亚的房价数据集(数据的获得后面会给出),它的统计图如下所示,横纵坐标分别代表经纬度,图上有很多圈圈,而圈圈的大小代表着人口数,颜色图则表示房均价,那么一堆数据到手了,但是我们到底要做什么呢?
智能算法
2020/09/08
1K0
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(一)
2006 年,Geoffrey Hinton 等人发表了一篇论文,展示了如何训练一个能够以最先进的精度(>98%)识别手写数字的深度神经网络。他们将这种技术称为“深度学习”。深度神经网络是我们大脑皮层的(非常)简化模型,由一系列人工神经元层组成。在当时,训练深度神经网络被普遍认为是不可能的,大多数研究人员在 1990 年代末放弃了这个想法。这篇论文重新激起了科学界的兴趣,不久之后,许多新论文证明了深度学习不仅是可能的,而且能够实现令人惊叹的成就,其他任何机器学习(ML)技术都无法匹敌(在巨大的计算能力和大量数据的帮助下)。这种热情很快扩展到许多其他机器学习领域。
ApacheCN_飞龙
2024/05/24
1.1K0
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(一)
机器学习实用指南:如何从数据可视化中发现数据规律?
目前为止,我们已经对数据有了初步的认识,大体上明白了我们要处理的数据类型。现在,我们将进入更深入的研究。
红色石头
2022/01/12
1.2K0
机器学习实用指南:如何从数据可视化中发现数据规律?
机器学习三人行(系列二)----机器学习前奏,洞悉数据之美
前沿 当你想了解机器学习,最好的方式就是用真实的数据入手做实验。网络上有很多优秀的开源资料,包括数据集,这里我们选择了加利福尼亚的房价数据集(数据的获得后面会给出),它的统计图如下所示,横纵坐标分别代
智能算法
2018/04/03
8390
机器学习三人行(系列二)----机器学习前奏,洞悉数据之美
Scikit-Learn 与 TensorFlow 机器学习实用指南学习笔记 4 —— 数据探索与可视化
目前为止,我们已经对数据有了初步的认识,大体上明白了我们要处理的数据类型。现在,我们将进入更深入的研究。
红色石头
2019/05/25
4470
机器学习实战指南:如何入手第一个机器学习项目?
https://github.com/RedstoneWill/Hands-On-Machine-Learning-with-Sklearn-TensorFlow
红色石头
2022/01/12
1.2K0
机器学习实战指南:如何入手第一个机器学习项目?
【机器学习】在【Pycharm】中的应用:【线性回归模型】进行【房价预测】
线性回归(Linear Regression)是一种常见的统计方法和机器学习算法,用于根据一个或多个特征变量(自变量)来预测目标变量(因变量)的值。在许多实际应用中,线性回归因其简单性和有效性而被广泛使用,例如预测房价、股票市场分析、市场营销和经济学等领域。
小李很执着
2024/07/02
3671
【机器学习】在【Pycharm】中的应用:【线性回归模型】进行【房价预测】
厉害了,Matplotlib还能这样画散点图!
在数据可视化中,二维散点图的应用范围很广,比如用来观测两个变量之间的相关性、展示销量的的走势等等,这些是散点图的常规用法。
刘早起
2020/09/29
2.3K0
厉害了,Matplotlib还能这样画散点图!
房价精准预测,大数据+机器学习帮你搞定
一提到房价,就“压力山大”!无论是首套房还是改善性需求,买在低点卖在高点都是一个可遇不可求的事儿,所以如果有位数据大侠能帮助设计一个预测房价的神器,岂不是“人生很值得”!本期DT数据侠与纽约数据科学学院合作的数据线专栏中,四位数据侠通过“数据超能力”试图利用Python通过机器学习方式来预测房价,快来看看他们是如何做得吧!
DT数据侠
2018/12/14
1.8K0
【Python数据分析】房价预测:使用线性回归模型预测波士顿房价
文章链接:https://cloud.tencent.com/developer/article/2472976
小馒头学Python
2024/12/04
6330
【Python数据分析】房价预测:使用线性回归模型预测波士顿房价
项目实战一:利用Python实现Kaggle经典案例之波士顿房价预测
欢迎来到王者荣耀(自带音效?)啊不,是小白入门大数据分析之项目实战第一篇?。本文主要介绍如何利用Python实现Kaggle经典比赛项目,波士顿房价预测问题(至于Python安装问题,推荐大家参照一篇
用户7569543
2020/07/17
2.4K0
推荐阅读
《Scikit-Learn与TensorFlow机器学习实用指南》第2章 一个完整的机器学习项目
2.9K0
机器学习之数据预处理
5900
[Hands On ML] 2. 一个完整的机器学习项目(加州房价预测)
2.5K0
《Scikit-Learn与TensorFlow机器学习实用指南》 第2章 一个完整的机器学习项目使用真实数据项目概览获取数据数据探索和可视化、发现规律为机器学习算法准备数据选择并训练模型模型微调启动
3.1K0
爱数科案例 | 基于线性回归的加州房价预测
2.1K0
手把手带你开启机器学习之路——房价预测(二)
9870
带你建立一个完整的机器学习项目
6720
超级实用!如何为机器学习算法准备数据?
3470
《Scikit-Learn与TensorFlow机器学习实用指南》 第02章 一个完整的机器学习项目(下)选择并训练模型模型微调启动、监控、维护系统实践!练习
1.2K0
手把手学机器学习算法中数据预处理(附代码)
1K0
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(一)
1.1K0
机器学习实用指南:如何从数据可视化中发现数据规律?
1.2K0
机器学习三人行(系列二)----机器学习前奏,洞悉数据之美
8390
Scikit-Learn 与 TensorFlow 机器学习实用指南学习笔记 4 —— 数据探索与可视化
4470
机器学习实战指南:如何入手第一个机器学习项目?
1.2K0
【机器学习】在【Pycharm】中的应用:【线性回归模型】进行【房价预测】
3671
厉害了,Matplotlib还能这样画散点图!
2.3K0
房价精准预测,大数据+机器学习帮你搞定
1.8K0
【Python数据分析】房价预测:使用线性回归模型预测波士顿房价
6330
项目实战一:利用Python实现Kaggle经典案例之波士顿房价预测
2.4K0
相关推荐
《Scikit-Learn与TensorFlow机器学习实用指南》第2章 一个完整的机器学习项目
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档