Python机器学习之二:数据审查、特征数据可视化

本节示例使用数据集:Pima Indian数据集
我们先导入数据

import pandas as pd
filename='pima_data.csv'
dataset=pd.read_csv(filename)

为了得到更准确的结果,必须理解数据的特征、分布情况,以及需要解决的问题,以便建立和优化算法模型。本文将介绍七种方法来帮助大家理解数据。
· 简单地查看数据——dataset.head(10)
· 审查数据的维度——dataset.shape
· 审查数据的类型和属性——dataset.dtypes
· 总结查看数据分类的分布情况——dataset.groupby(‘Target’).size()
· 通过描述性统计分析数据——dataset.describe()
· 理解数据属性的相关性——dataset.corr(method=‘pearson’)
· 审查数据的分布状况——dataset.skew()

1.简单地查看数据——dataset.head(10)

对数据的简单审视,是加强对数据理解最有效的方法之一。通过对数据的观察,可以发现数据的内在关系。

# 简单地查看数据
dataset.head(10)

2.数据的维度——dataset.shape

在机器学习中要注意数据的行和列,必须对所拥有的数据非常了解:
· 太多的行会导致花费大量时间来训练算法得到模型;太少的行会导致对算法的训练不充分,得不到合适的模型。
· 如果数据具有太多的特征,会引起某些算法性能低下的问题。
通过 DataFrame 的 shape 属性,可以很方便地查看数据集中有多少行和多少列。

# 审查数据的维度
dataset.shape

3.数据属性和类型——dataset.dtypes

数据的类型是很重要的一个属性。字符串需要转化成浮点数或整数,以便于计算和分类。可以通过DataFrame的Type属性来查看每一个字段的数据类型。

# 审查数据的类型和属性
dataset.dtypes

4.数据分组分布(适用于分类算法)——dataset.groupby(‘Target’).size()

在分类算法中,需要知道每个分类的数据大概有多少条记录,以及数据分布是否平衡。如果数据分布的平衡性很差,需要在数据加工阶段进行数据处理,来提高数据分布的平衡性。

# 总结查看数据分类的分布情况
dataset.groupby('Target').size()

5.描述性统计——dataset.describe()

描述性统计可以给出一个更加直观、更加清晰的视角,以加强对数据的理解。在这里可以通过DataFrame的describe()方法来查看描述性统计的内容。这个方法给我们展示了八方面的信息:数据记录数、平均值、标准方差、最小值、下四分位数、中位数、上四分位数、最大值。这些信息主要用来描述数据的分布情况。

# 通过描述性统计分析数据
pd.set_option('display.width',5)
pd.set_option('precision',4)
dataset.describe()

6.数据属性的相关性——dataset.corr(method=‘pearson’)

数据属性的相关性是指数据的两个属性是否互相影响,以及这种影响是什么方式的等。非常通用的计算两个属性的相关性的方法是皮尔逊相关系数。它是一个介于 1 和-1 之间的值,其中,1 表示变量完全正相关,0 表示无关,-1 表示完全负相关。当数据的关联性比较高时,有些算法(如linear、逻辑回归算法等)的性能会降低。当数据特征的相关性比较高时,应该考虑对特征进行降维处理。下面通过使用DataFrame的corr()方法来计算数据集中数据属性之间的关联关系矩阵。执行之后会得到一个每个属性相互影响的矩阵。

# 理解数据属性的相关性
pd.set_option('display.width',200)
pd.set_option('precision',2)
print(dataset.corr(method='pearson'))

7.数据的分布分析——dataset.skew()

通过分析数据的高斯分布情况来确认数据的偏离情况。在很多机器学习算法中都会假定数据遵循高斯分布,先计算数据的高斯偏离状况,再根据偏离状况准备数据。我们可以使用 DataFrame的 skew()方法来计算所有数据属性的高斯分布偏离情况。skew()函数的结果显示了数据分布是左偏还是右偏。当数据接近0时,表示数据的偏差非常小。

高斯分布又叫正态分布,是在数据、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响。高斯分布的曲线呈钟形,两头低,中间高,左右对称。在高斯分布图中,y轴两点之间的面积是发生的概率。
# 审查数据的分布状况
pd.set_option('precision',4)
dataset.skew()

8.数据可视化——直方图、密度图、箱线图、相关矩阵图、散点矩阵图

8.1直方图——分布状况

直方图可以非常直观地展示每个属性的分布状况。通过图表可以很直观地看到数据是高斯分布、指数分布还是偏态分布。

直方图(Histogram)又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据的分布情况。一般用横轴表示数据类型,纵轴表示分布情况。
# 直方图
dataset.hist()
plt.show()

我们可以看到,age、pedi和test也许是指数分布;mass、pres和plas也许是高斯分布。

8.2密度图——分布状况

密度图是一种表现与数据值对应的边界或域对象的图形表示方法,一般用于呈现连续变量。密度图类似于对直方图进行抽象,用平滑的线来描述数据的分布。这也是一种用来显示数据分布的图表。代码如下:

# 密度图
data.plot(kind='density',subplots=True,layout=(3,3),sharex=False)
plt.show()

8.3箱线图——分散情况

箱线图也是一种非常好的用于显示数据分散情况的手段。首先画一条中位数线,然后以下四分位数和上四分位数画一个盒子,上下各有一条横线,表示上边缘和下边缘,通过横线来显示数据的伸展状况,游离在边缘之外的点为异常值。

箱线图又称盒须图、盒式图或箱形图,是一种用于显示一组数据分散情况的统计图。因形状如箱子而得名,在各种领域都经常被使用。
# 箱线图
data.plot(kind='box',subplots=True,layout=(3,3),sharex=False)
plt.show()

8.4相关矩阵图——所有属性两两影响的关系

矩阵图法就是从多维问题的事件中找出成对的因素,排列成矩阵图,然后根据矩阵图来分析问题,确定关键点。它是一种通过多因素综合思考来探索问题的好方法。

相关矩阵图主要用来展示两个不同属性相互影响的程度。如果两个属性按照相同的方向变化,说明是正向影响;如果两个属性朝相反方向变化,说明是反向影响。把所有属性两两影响的关系展示出来的图表就叫相关矩阵图。
# 相关矩阵图
correlations=dataset.corr()
fig=plt.figure()
ax=fig.add_subplot(111)
cax=ax.matshow(correlations,vmin=-1,vmax=1)
fig.colorbar(cax)#颜色柱
ticks=np.arange(0,9,1)

在图表的左边和上边显示的是完全相同的属性名称,通过这个矩阵可以很清楚地看到各个属性两两关联的关系。

8.5散点矩阵图

当同时考察多个变量的相关关系时,可利用散点矩阵图来绘制各个变量间的散点图,这样可以快速发现多个变量间的主要相关性,这在进行多元线性回归时显得尤为重要。

  • 散点矩阵图表示因变量随自变量变化的大致趋势,据此可以选择合适的函数对数据点进行拟合。
  • 散点矩阵图由两组数据构成多个坐标点,考察坐标点的分布,可以判断两个变量之间是否存在某种关联或总结坐标点的分布模式
  • 散点矩阵图将序列显示为一组点,值由点在图表中的位置表示,不同类别由图表中的不同标记表示。
  • 散点矩阵图通常用于比较跨类别的聚合数据
# 散点矩阵图
pd.plotting.scatter_matrix(dataset)

参考文献:

[1] 魏贞原. 机器学习:Python实践[M]. 电子工业出版社, 2018-01.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值