用Pandas在Python中可视化机器学习数据
为了从机器学习算法中获取最佳结果,你就必须要了解你的数据。
使用数据可视化可以更快的帮助你对数据有更深入的了解。
在这篇文章中,您将会发现如何在Python中使用Pandas来可视化您的机器学习数据。
让我们开始吧。
关于样本
本文中的每个样本都是完整且独立的,因此您可以直接将其复制到您自己的项目中使用。
这组 皮马印第安人数据集( Pima Indians dataset ) 将用于演示每个部分。该数据集记录了皮马印第安人的医疗记录,这些记录显示了每位患者是否在五年内患糖尿病。就其本身而论,这是一个分类问题。
这个数据集很适合用于示范,因为所有的输入都为纯数字,而所有的输出变量都为二进制(0或1)。
这些数据可以从 UCI机器学习库中 免费获得,并且下载后可以为每一个样本直接使用。
单变量图
在本节中,我们可以独立的看待每一个特征。
直方图
想要快速的得到每个特征的分布情况,那就去绘制直方图。
直方图将数据分为很多列并为你提供每一列的数值。根据整张图的形状,你可以很快知道这些特征是否呈高斯分布、偏斜分布、还是指数分布。它也可以帮助你剔除出可能的异常值
# 单变量直方图
import matplotlib.pyplot as plt
import pandas
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names)
data.hist()
plt.show()
我们可以看到" age "," pedi "," test "可能呈指数分布。" mass "," pres "," plas "可能呈高斯或近高斯分布。这很有趣,因为许多机器学习技术把输入变量假定为高斯单变量分布。
密度图
使用密度图是另一种快速了解每个特征分布的方法。这些图像看起来就像是把一幅抽象出来的直方图的每一列顶点用一条平滑曲线链接起来一样。这就好比是用肉眼直接处理直方图一样。
# 单变量密度图
import matplotlib.pyplot as plt
import pandas
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names)
data.plot(kind='density', subplots=True, layout=(3,3), sharex=False)
plt.show()
相比于直方图,我们可以更清晰的看到每个特征的分布。
箱线图
使用 箱线图(Box and Whisker Plots) 或箱形图是另一种获取特征分布情况的好用的方法。
箱线图中和了每个特征的分布,在中值(中间值)画了一条线,并且在第25%和75%之间(中间的50%的数据)绘制了方框。短线体现了数据的分布,短线以外的点显示了候选异常值(这些值通常比分布在中间50%的值要大1.5倍)。
# 箱线图
import matplotlib.pyplot as plt
import pandas
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names)
data.plot(kind='box', subplots=True, layout=(3,3), sharex=False, sharey=False)
plt.show()
我们可以看到,特征的分布是完全不同的。一些像" age "," test "," skin "似乎倾向于较小的值。
多变量情况
本部分展示多个变量之间共同作用的图表示例。
相关矩阵图
相关性 表明两个变量之间是如何变化的。如果两个变量具有相同的变化趋势,那么它们是正相关的。如果呈相反的趋势(一个上升,一个下降),那么它们是负相关的。
您可以计算每对特征之间的相关性。这被称为相关矩阵。然后,您可以绘制相关矩阵,并了解哪些变量具有高相关性。
这很有用,因为一些像线性回归和逻辑回归的机器学习算法可能在输入变量高度相关的情况下表现不佳。
# 相关矩阵图
import matplotlib.pyplot as plt
import pandas
import numpy
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names)
correlations = data.corr()
# plot correlation matrix
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(correlations, vmin=-1, vmax=1)
fig.colorbar(cax)
ticks = numpy.arange(0,9,1)
ax.set_xticks(ticks)
ax.set_yticks(ticks)
ax.set_xticklabels(names)
ax.set_yticklabels(names)
plt.show()
我们可以看到矩阵是对称的,即矩阵的左下角与右上角相同。这很有用,因为我们可以使用相同数据在同一幅图中看到两个不同的视图。我们还可以看到每个变量在从左上到右下的对角线上完全正相关(如您所期望的那样)。
散点图矩阵
散点图将两个变量之间的关系显示为二维平面上的点,每条坐标轴代表一个变量特征。您可以为数据中的每对变量特征创建一个散点图。然后将所有的散点图绘制在一起,这就是散点图矩阵。
散点图对于发现变量之间的结构关系非常有用,例如两个变量之间是否呈线性关系。具有结构化关系的特征可能是相关的,也可能是将要从数据集中删除的候选者。
# 散点图矩阵
import matplotlib.pyplot as plt
import pandas
from pandas.tools.plotting import scatter_matrix