Python Seaborn (4) 线性关系的可视化
作者:未禾
数据猿官网 | www.datayuan.cn
今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区
这章介绍的针对回归类型的散点数据的可视化可能是未来机器学习最直接的助理,这章给我的感悟很多。
许多数据集包含多个定量变量,分析的目的通常是将这些变量相互关联起来。 我们以前讨论过可以通过显示两个变量的联合分布来实现的功能。 然而,使用统计模型来估计两个噪声观测组之间的简单关系可能是非常有帮助的。 本章讨论的功能将通过线性回归的通用框架进行。
在 Tukey 的精神中,Seaborn 的回归图主要是为了添加一个视觉指南,有助于在探索性数据分析期间强调数据集中的模式。 也就是说,Seaborn 本身并不是统计分析的一揽子计划。 要获得与回归模型拟合相关的量化措施,您应该使用 statsmodels。 然而,Seaborn 的目标是通过可视化快速,轻松地探索数据集,使之变得与通过统计表格来探索数据集一样重要(如果不是更重要的话)。
(http://www.statsmodels.org/stable/index.html)
绘制线性回归模型的函数
使用 Seaborn 中的两个主要功能可视化通过回归确定的线性关系。这些函数 regplot() 和 lmplot() 是密切相关的,并且共享了大部分的核心功能。然而,了解他们不同的方式很重要,以便您可以快速为特定工作选择正确的工具。
在最简单的调用中,两个函数绘制了两个变量 x 和 y 的散点图,然后拟合回归模型 y〜x 并绘制了该回归线的结果回归线和 95%置信区间:
很显然,所得到的的图的结果是相同的,除了图形形状略有些不同,这里会简短的解释。
目前,要知道的另一个主要区别是 regplot()以各种格式接受 x 和 y 变量,包括 numpy 数组、Pandas 的 Series 列或 DataFrame 对象的变量引用;不一样的是,lmplot()将数据集作为一个必需的参数,而 x 和 y 变量必须指定为字符串。这种数据格式称为 “长格式” 或“整洁”数据。除了这种输入灵活性,regplot()可以看做是拥有 lmplot()特征的子集,所以后面将使用后者进行演示。
备注:
这里官方的例子实际上并不好,比较容易的理解方式是:上面的结果可以在 regplot() 函数中通过只传入 x 和 y 绘出:sns.regplot(x=tips["total_bill"], y=tips["tip"]);而相应的 sns.lmplot(x=tips["total_bill"], y=tips["tip"]) 这种写法就会报错,因为数据集 data 是 lmplot() 的必传参数。
当其中一个变量取值为离散型的时候,可以拟合一个线性回归。然而,这种数据集生成的简单散点图通常不是最优的:
一个常用的方法是为离散值添加一些随机噪声的 “抖动”(jitter),使得这些值的分布更加明晰。
值得注意的是,抖动仅适用于散点图数据,且不会影响拟合的回归线本身。
另一种选择是在每个独立的数据分组中对观察结果进行折叠,以绘制中心趋势的估计以及置信区间:
不同类型的模型拟合
上面使用的简单线性回归模型非常简单,但是,它不适用于某些种类的数据集。 Anscombe's quartet数据集显示了一些简单线性回归提供了简单目视检查清楚显示差异的关系估计的例子。 例如,在第一种情况下,线性回归是一个很好的模型:
(https://en.wikipedia.org/wiki/Anscombe%27s_quartet)
第二个数据集中的线性关系是一样的,但是基本清楚地表明这不是一个好的模型:
在存在这些高阶关系的情况下,lmplot() 和 regplot() 可以拟合多项式回归模型来拟合数据集中的简单类型的非线性趋势:
除了正在研究的主要关系之外,“异常值” 观察还有一个不同的问题,它们由于某种原因而偏离了主要关系:
在有异常值的情况下,它可以使用不同的损失函数来减小相对较大的残差,拟合一个健壮的回归模型,传入 robust=True:
当 y 变量是二进制时,简单的线性回归也 “工作” 了,但提供了不可信的预测结果:
在这种情况下,解决方案是拟合逻辑 (Logistic) 回归,使得回归线显示给定值 x 的 y=1 的估计概率:
请注意,逻辑回归估计比简单回归计算密集程度(Robust 回归也是如此),并且由于使用引导程序计算回归线周围的置信区间,您可能希望将其关闭获得更快的迭代速度(使用参数 ci=None)。
一个完全不同的方法是使用一个 lowess smoother拟合非参数回归。 这种方法具有最少的假设,尽管它是计算密集型的,因此目前根本不计算置信区间:
(https://en.wikipedia.org/wiki/Local_regression)
residplot() 是一个有用的工具,用于检查简单的回归模型是否拟合数据集。它拟合并移除一个简单的线性回归,然后绘制每个观察值的残差值。 理想情况下,这些值应随机散布在 y = 0 附近:
如果残差中有结构,则表明简单的线性回归是不合适的:
调节其他变量
上面的图表显示了许多方法来探索一对变量之间的关系。然而,通常,一个更有趣的问题是 “这两个变量之间的关系如何作为第三个变量的函数而变化?” 这是 regplot()和 lmplot()之间的区别。 虽然 regplot()总是显示单个关系,lmplot()将 regplot()与 FacetGrid 结合在一起,提供了一个简单的界面,可以在 “faceted” 图上显示线性回归,从而允许您探索与多达三个其他类别变量的交互。
分类关系的最佳方式是绘制相同轴上的两个级别,并使用颜色来区分它们:
除了颜色之外,还可以使用不同的散点图标记来使黑色和白色的图像更好地绘制。 您还可以完全控制所用的颜色:
要添加另一个变量,您可以绘制多个 “facet”,每个级别的变量出现在网格的行或列中:
控制绘制的大小和形状
在我们注意到由 regplot()和 lmplot()创建的默认绘图看起来是一样的,但在轴上却具有不同大小和形状。 这是因为 func:regplot 是一个 “轴级” 功能绘制到特定的轴上。 这意味着您可以自己制作多面板图形,并精确控制回归图的位置。 如果没有提供轴,它只需使用 “当前活动的” 轴,这就是为什么默认绘图与大多数其他 matplotlib 函数具有相同的大小和形状的原因。要控制大小,您需要自己创建一个图形对象。
相反,lmplot() 图的大小和形状通过 FacetGrid 界面使用 size 和 aspect 参数进行控制,这些参数适用于每个图中的设置,而不是整体图形:
在其他背景下绘制回归
另外一些 Seaborn 函数在更大,更复杂的绘制中使用 regplot()。 第一个是在上一章分布介绍的 jointplot() 函数。 除了前面讨论的绘图样式之外,jointplot() 可以使用 regplot() 通过传递 kind ="reg" 来显示关节轴上的线性回归拟合:
使用 kind="reg" 的 pairplot() 函数结合了 regplot() 和 PairGrid 来显示数据集中变量之间的线性关系。 注意这是不同于 lmplot() 的。 在下图中,两轴在第三个变量的两个级别上不显示相同的关系; 相反,PairGrid() 用于显示数据集中变量的不同配对之间的多个关系:
类似 lmplot(),但不同于 jointplot(),使用 hue 参数在 pairplot() 中内置了一个附加分类变量的条件:
本文作者 未禾,首发于作者知乎,https://zhuanlan.zhihu.com/p/27471537,已获作者授权原创形式发布。
数据猿读者亲启:
名企&大佬专访精选
向下滑动启阅
以下文字均可点击阅读原文
跨国外企:
谷歌大中华及韩国区数据洞察与解决方案总经理郭志明丨 IBM中国区开发中心总经理吉燕勇丨微软中国CTO官韦青丨前微软中国CTO黎江丨VMware中国区研发中心总经理任道远
中国名企:
联想集团副总裁田日辉丨首汽租车COO 魏东
阿里巴巴数据经济研究中心秘书长潘永花
搜狗大数据研究院院长李刚丨易观CTO郭炜
前上海证券交易所副总裁兼CTO白硕丨携程商旅亚太区CMO 邱斐丨艾瑞集团CTO郝欣诚丨泰康集团大数据部总经理周雄志丨上海链家研究院院长陈泽帅丨蓝色光标首席数据科学家王炼
知名学者:
北大新媒体研究院副院长刘德寰丨中科院基因研究所方向东
创业明星:
地平线机器人创始人兼CEO余凯丨天工科仪董事长王世金丨ZRobot CEO乔杨丨天眼查创始人兼CEO柳超丨第四范式联合创始人兼首席架构师胡时伟丨天云大数据CEO雷涛丨Kyligence联合创始人兼CEO韩卿丨数之联创始人兼CEO周涛丨明略数据董事长吴明辉丨91征信创始人兼CEO 薛本川丨智铀科技创始人、CEO及首席科学家夏粉丨易宝支付联合创始人兼总裁余晨丨海云数据创始人兼CEO冯一村丨星环科技COO佘晖丨碳云智能联合创始人兼首席科学家李英睿
知名投资人:
前IDG创始合伙人、火山石资本创始人章苏阳
华创资本合伙人熊伟铭丨六禾创投总裁王烨
信天创投合伙人蒋宇捷丨青域基金执行总裁牟颖
蓝驰创投合伙人朱天宇
——数据猿专访部
(可上下滑动启阅)
▲向上滑动
采访/报道/投稿
yaphet.zhang@datayuan.cn
商务合作
18600591561(微信)
长按右方二维码
关注我们ˉ►
Python Seaborn (4) 线性关系的可视化相关推荐
- python seaborn教程_数据可视化Seaborn从零开始学习教程(一) 风格选择
作者:xiaoyu 微信公众号:Python数据科学 知乎:python数据分析师 最近在做几个项目的数据分析,每次用到seaborn进行可视化绘图的时候总是忘记具体操作.虽然seaborn的官方网站 ...
- Python seaborn可视化:组合多个seaborn可视化结果并使得组合结果图像共享X轴、使用matplotlib的subplots子图函数的gridspec_kw参数指定子图的相对大小或者比率
Python seaborn可视化:组合多个seaborn可视化结果并使得组合结果图像共享X轴.使用matplotlib的subplots子图函数的gridspec_kw参数指定子图的相对大小或者比率 ...
- python seaborn heatmap可视化相关性矩阵
python seaborn heatmap可视化相关性矩阵 方法 方法 import pandas as pd import numpy as np import seaborn as sns df ...
- 使用Python Seaborn和Pandas进行数据可视化
Hey, folks! Today we will be unveiling a very interesting module of Python - Seaborn Module and will ...
- seaborn线性关系数据可视化:时间线图|热图|结构化图表可视化
一.线性关系数据可视化lmplot( ) 表示对所统计的数据做散点图,并拟合一个一元线性回归关系. lmplot(x, y, data, hue=None, col=None, row=None, p ...
- seaborn使用boxplot函数可视化箱图并基于分组均值或者中位数进行箱图降序(descending)排序(Sort Boxplots in Descending Order)
seaborn使用boxplot函数可视化箱图并基于分组均值或者中位数进行箱图降序(descending)排序(Sort Boxplots in Descending Order with Pytho ...
- wxpython dataview处理大量数据_38个常用Python库:数值计算、可视化、机器学习等8大领域都有了...
作者 | 李明江 张良均 周东平 张尚佳 来源 | 大数据DT 原文 | 38个常用Python库:数值计算.可视化.机器学习等8大领域都有了 Python作为一个设计优秀的程序语言,现在已广泛应用于 ...
- python与excel做数据可视化-用Python进行数据可视化的10种方法
原标题:用Python进行数据可视化的10种方法 2015-11-19 关于转载授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言"机构名称+转载&quo ...
- Python语言学习之图表可视化:python语言中可视化工具包的简介、安装、使用方法、经典案例之详细攻略
Python语言学习之图表可视化:python语言中可视化工具包的简介.安装.使用方法.经典案例之详细攻略 目录 python语言中可视化工具包的简介 python语言中可视化工具包的安装 pytho ...
最新文章
- 自主数据类型:在TVM中启用自定义数据类型探索
- 【实战教程】NLP-Beginner:自然语言处理入门练习
- 优秀的中文分词第三方库——jieba
- 解决猴子选大王问题(用C,原创)
- Freemarker获取pojo属性
- boost::mp11::mp_reverse相关用法的测试程序
- OGNL是Object-Graph Navigation Language
- jmeter测试java服务_Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能
- 现代软件工程 M1 博客要求
- 如何学习c语言 零基础20天学会C语言
- 高级JAVA - 利用函数式接口实现通用的取并集/交集/差集进阶版
- 【习题0】准备工作【第0天】
- SQL Server 数据加密功能解析
- 海量数据处理相关算法及数据结构【转】
- BZOJ4519 CQOI2016不同的最小割(最小割+分治)
- pip下载安装包默认位置_修改pip 下载模块或软件的默认文件夹
- 孩子数学成绩不好怎么办_孩子数学成绩差怎么才能快速提高
- 【Vue】Vue生成二维码 Vue把url地址生成二维码手机打开 扫一扫手机端打开实战案例 vue生成二维码
- Android TV开发 焦点返回ListView时, 返回到离开时的位置
- 使用jqury的心得
热门文章
- 申请软件著作权有必要找代理吗
- dial unix /var/run/docker.sock: connect: permission denied
- 【Python3解析二维码】翻遍全网找到 2 款库推荐给大家~
- CDH里HDFS的HA配置
- fofa域名检测存活工具_xary+fofa联动扫描工具
- 解决win10任务栏点击右键无反应【亲测可行】
- 计算机内存4G,电脑内存4G和8G差距能有多大?
- 8g内存的计算机专业可以吗,电脑内存4G和8G差距能有多大?
- 体验式零售:小微书店崛起
- CSS_3th_div+CSS布局