您必须了解您的数据才能从机器学习算法中获得最佳结果。
更了解您的数据的最快方法是使用数据可视化。
在这篇文章中,您将会发现如何使用Pandas在Python中可视化您的机器学习数据。
让我们开始吧。
Python中的机器学习数据的可视化随着熊猫 摄影通过Alex Cheek,保留一些权利。
本文中的每个部分都是完整且独立的,因此您可以将其复制并粘贴到您自己的项目中并立即使用。
该皮马印第安人数据集(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()
我们可以看到,也许年龄属性,pedi和测试可能服从指数分布。我们也可以看到,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()
我们可以看到每个属性的分布比直方图更清晰。
查看每个属性分布的另一个有用的方法是使用箱线图。
箱线图总结了每个属性的分布,在第25和第75百分位数(中间数据的50%)附近绘制了中间值(中间值)和方框。Whisker提供了数据的传播和Whisker外部的点显示了候选离群值(比中间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()
我们可以看到,属性的传播是完全不同的。一些像年龄,测试和皮肤似乎相当倾向于较小的值。
本部分显示多个变量之间交互的图表示例。
相关性表明两个变量之间的变化是如何相关的。如果两个变量在同一个方向上变化,它们是正相关的。如果相反方向的变化(一个上升,一个下降),那么它们是负相关的。
您可以计算每对属性之间的相关性。这被称为相关矩阵。然后,您可以绘制相关矩阵,并了解哪些变量具有高度相关性。
这是有用的,因为如果有高度相关的输入变量在您的数据中,一些机器学习算法如线性和逻辑回归性能可能较差。
#相关矩阵图
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
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)
scatter_matrix(data)
plt.show()
像相关矩阵图一样,散点图矩阵是对称的。从不同的角度来看,这都是非常有用的。由于每个变量的散点图都没有绘制点,所以对角线显示了每个属性的直方图。
在这篇文章中,您发现了许多方法,可以使用Pandas更好地理解Python中的机器学习数据。
具体来说,你学会了如何使用如下方法来绘制你的数据: