概述
这几篇博客将通过对加州房价模型的建立,介绍如何搭建一个完整的机器学习工程。本文将介绍如何实现数据信息概览及可视化处理。
过程中如有任何错误,请各位指正与包涵。
文章的内容源自’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)两部分,可通过此链接获取。
程序运行前请配置好编译环境及相关包
最后
以上就是神勇酒窝为你收集整理的创建一个完整的机器学习工程(一)- 数据概览的全部内容,希望文章能够帮你解决创建一个完整的机器学习工程(一)- 数据概览所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复