创建一个完整的机器学习工程(一)- 数据概览

这几篇博客将通过对加州房价模型的建立,介绍如何搭建一个完整的机器学习工程。本文将介绍如何实现数据信息概览及可视化处理。
过程中如有任何错误,请各位指正与包涵。

文章的内容源自’Hands-On Machine Learning with Scikit-Learn and TensorFlow’一书第二章

数据(housing.cvs)来源:https://github.com/ageron/handson-ml/tree/master/datasets/housing
本内容基于python进行开发,请先搭配好程序运行环境

机器学习工程

一个完整的机器学习工程将至少包含一下几个方面:数据概览(包括数据获取)、数据处理、模型选择及训练、模型检测及微调
这篇博客将对数据概览部分进行详细介绍。

一、数据背景

此程序所用数据,源自1990年对加州房屋情况的调查,调查以街区为单位进行,每一街区包含600至3000人不等。统计内容包括房屋年龄、房间数、年收入、房屋价值、沿海情况等。最后,按区域内调查结果的中位数作为统计结果进行记录。

二、数据概览

在获取到数据、进行后续操作之前,应首先对数据进行初步的观察,以便对其有初步的了解和认识,这将帮助我们更有效率、更有针对性的进行数据处理、模型选择等操作。
可将统计结果进行可视化处理操作,生成如下图所示效果。
为实现该效果,请先安装相关包 (pandas, numpy, matplotlib)。
优化后位置信息散点图

1. 数据读取与简要预览

利用pandas的read_csv()方法,可以读取此次所用的housing.csv数据,
利用DataFrame的head()方法,可查看该数据前5行内容。

import pandas as pd
housing = pd.read_csv('housing.csv')
print(housing.head())

数据预览
利用housing.info()指令,可查看数据基本信息。
数据详细信息查看

  • 从显示的信息中可以看出,数据是一个20640*10的数组
  • 该数据前9列是float型数据,意味着我们可以对其直接进行计算的操作
  • 而这9列中,total_bedrooms一列有效数据的个数不到20640个,说明在部分地区,该信息并未被统计到。
  • 最后一列(ocean_proximity)是object型数据,在使用时,需要先对该列数据进行处理才可进行相关计算

针对最后一列,housing['ocean_proximity'].value_counts()指令可以更为详细的查看该列数据具体包含的值、以及该值出现的次数。
沿海情况详细信息
可以看到,调研者按沿海情况,将加州房屋分为了五种类型。

2. 数据可视化

简单预览完数据的基本信息,接下来利用matplotlib包可对其进行可视化的操作。

(1) 数据统计

利用housing.hist()、结合plt.show(),可将数据进行统计,并将结果以柱状图的方式展现出来。

import pandas as pd
import matplotlib.pyplot as plt
housing = pd.read_csv('housing.csv')
housing.hist(bins=50, figsize=(12,8))
plt.show()

数据柱状统计图

bins和figsize分别用来设置条带数量及图像显示的大小(单位为英寸)
在jupyter notebook编译器中,不用plt.show()图像也可以画出;但在pycharm等软件中,需要添加该指令才可将图像画出
因为该数据有9列数据是数字类型,所以总共展示了9幅图像。且图像的排列顺序是按其标签(label)值排列显示的,而不是按列的先后顺序而显示

  • 从几幅柱状统计图中可以看到,housing_median_age, housing_median_value, median_income几种属性,被添加了上限帽。说明调研统计时,超过其值的数据会按该上限值记录。因此,在为预测房价建立模型之前,需要对这几个属性对应的值进行处理。
  • 各属性值的规模各有不同,部分属性重尾现象(tail heavy)十分严重。因此,后续处理时也要将这些因素纳入考虑。
(2) 散点图展示

利用housing.plot(kind='scatter', x='longitude', y='latitude', alpha=0.1),设置作图方式为散点图、x, y坐标分别为样本的经纬度、透明度为0.1,可得到数据位置分布情况的散点图图像。
数据位置分布散点图

(3) 针对性优化

上副图像已经隐约能看出加州的形状了,但是并不能很好的反映出房价与地理位置之间的关系。因此,为plot()中的其他参数进行调配,可进一步优化显示效果。

housing.plot(kind="scatter", x="longitude", y="latitude", alpha=0.4, s=housing["population"]/100, label="population", c="median_house_value", cmap=plt.get_cmap("jet"), colorbar=True)
plt.legend()

s: 控制散点图圆圈大小,这里设为人口大小(除以100后)
c: 控制对散点进行着色的值,这里设为房价
cmap: 控制进行着色的色板,这里设为jet色板
colorbar: 控制是否在图像边展示色板,这里设置为展示
plt.legend(): 展示图例说明

最终显示效果如下。
优化后位置信息散点图

  • 从热点图中可以看出,沿海地区的房价明显高于内陆地区房价
  • 但是沿海情况的属性值并非数值,所以在后续进行数据处理时,针对该属性需要有特殊处理。

三、小结

  • 此案例充分说明,若要建立一个更有效、更完善的数学模型,对数据信息的概览与观察非常重要。
  • 例如此例中,部分数据缺失、数据上限帽和重尾现象的存在、非数值数据与待预测属性的强关联性,均提醒我们,需要先解决这些问题才能建立出更有效的房价预测模型。这也为我们后进行的续数据处理,指明了方向。

本文内容源自Hands-On Machine Learning with Scikit-Learn and TensorFlow一书,是其第二章关于数据概览部分的读书笔记。文中加入了少量自己的理解,如有不正之处,望各位指正与包含。

https://github.com/ageron/handson-ml/
这是原书作者关于此书的链接,若想获取书中的源代码和数据可访此链接获取
本书有中文版《Scikit-Learn与TensorFlow机器学习实用指南》,如有需要可自行搜索查找

原书中画出散点图之前,先做了数据划分,将数据分为训练集与测试集,之后对训练集部分作散点图。
我希望将这一步,留待介绍数据处理时,再一并进行详述。所以本文中的散点图是对整个数据统计作出的,这里与书中略有不同。

https://github.com/ShaoboZhang/ML_Notebook/tree/master/Chapter2
文中涉及的完整代码,我将其分成了数据预览(data_infos.py)和可视化显示(visualize.py)两部分,可通过此链接获取。
程序运行前请配置好编译环境及相关包

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anycall201

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值