用Pandas在Python中可视化机器学习数据
您必须了解您的数据才能从机器学习算法中获得最佳结果。
更了解您的数据的最快方法是使用数据可视化。
在这篇文章中,您将会发现如何使用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()
我们可以看到每个属性的分布比直方图更清晰。
箱线图(Box和Whisker Plots 或 Boxplots)
查看每个属性分布的另一个有用的方法是使用箱线图。
箱线图总结了每个属性的分布,在第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中的机器学习数据。
具体来说,你学会了如何使用如下方法来绘制你的数据:
- 直方图
- 密度图
- 盒和晶须图
- 相关矩阵图
- 散点图矩阵
- 2015年编程之美(资格赛) ---2月29日
- 编程之美--2. Trie树 (Trie图)
- 编程之美 --1 : 骨牌覆盖问题·一
- go语言中的数组切片:特立独行的可变数组
- go语言单例模式(Singleton)实例分析
- C++ template的一些高级用法(元编码,可变参数,仿函数,using使用方法,. C++ 智能指针)
- Golang memory model
- go的非侵入式接口
- C++ 如何重复利用一个内存地址块
- 如何减轻挖矿攻击给企业安全带来的威胁
- C++ 高级语法学习与总结(代码实例)
- golang使用原始套接字构造UDP包
- C与C++在const用法上的区别
- vs---错误收集并自己解决后归纳
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 分分钟教会你搭建企业级的 npm 私有仓库
- Golang语言之字符串操作
- Go语言ORM-gorm学习笔记(二)
- TypeScript: 常用的高级类型
- TypeScript:得泛型者,得天下
- 微信PC端多开的秘密
- Spring Cloud 微服务(七)- 上:日志收集集成
- Spring Cloud 微服务(七)- 下:日志收集详解
- Spring Cloud 微服务(八):链路追踪
- 一文带你网络安全 入门到入* [网络安全]
- 小白也能秒懂Vue源码中那些精细设计(选项处理)
- 软件品质评测系统-任务分发管理平台
- 彻底解决小程序无法触发SESSION问题
- 如何搭建前端异常监控系统
- JS+CSS 3实现图片滑块效果