Seaborn(四):线性关系的展示

在这里插入图片描述

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(color_codes=True)
tips = sns.load_dataset("tips")

一、绘制线性回归模型

seaborn主要通过两个函数来展示通过回归得到的线性关系,regplot()lmplot()。它们紧密相关,而且共享大多数的核心功能。但是弄清楚他们的区别非常重要,这样我们就可以在针对特定工作时快速判断哪个工具更适合。

在最基本的调用过程中,他们都会画出关于x、y两个变量的散点图,同时用数据拟合一个y ~ x的模型出来,并将对应的直线和95%的置信区间绘制出来:

sns.regplot(x="total_bill", y="tip", data=tips)

在这里插入图片描述

sns.lmplot(x="total_bill", y="tip", data=tips)

在这里插入图片描述
在这里插入图片描述

二、拟合不同的模型

在这里插入图片描述

anscombe = sns.load_dataset("anscombe")
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),
           ci=None, scatter_kws={"s": 80});

在这里插入图片描述
第二个数据集中有着同样的线性关系,但是我们瞬间就能判断线性回归并不是一个最佳的模型:

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
           ci=None, scatter_kws={"s": 80})

在这里插入图片描述
在展示这种更高阶的关系时,lmplot()和regplot()可以通过拟合多项式回归模型来应对数据集中的一些简单的非线性趋势:
参数: order

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
           order=2, ci=None, scatter_kws={"s": 80})

在这里插入图片描述
另一个问题是由异常观测点导致的,这些观测点明显偏离了我们想要得到的主要趋势关系:

ns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),
           ci=None, scatter_kws={"s": 80})

在这里插入图片描述
参数: robust

在异常观测值存在时,我们可以拟合一个鲁棒回归(稳定回归),它使用了不同的损失函数,对较大的残差做了降权:

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),
           robust=True, ci=None, scatter_kws={"s": 80})

在这里插入图片描述
当因变量y是二元变量时,简单线性回归会提供一个不太有说服力的预测:

tips["big_tip"] = (tips.tip / tips.total_bill) > .15
sns.lmplot(x="total_bill", y="big_tip", data=tips,
           y_jitter=.03);

在这里插入图片描述

这种情况下的解决方案是拟合一个逻辑回归模型,此时回归线的含义是在给定的x下y = 1的概率:

sns.lmplot(x="total_bill", y="big_tip", data=tips,
           logistic=True, y_jitter=.03);

在这里插入图片描述
在这里插入图片描述

sns.lmplot(x="total_bill", y="tip", data=tips, lowess=True)

在这里插入图片描述
residplot()函数

residplot()函数可以检查一个简单的回归模型对于某个数据集是否合适。它先拟合一个简单线性回归模型并移除它,然后将每个观测点与预测值的残差画出来。理想情况下,这些残差应该随机地分布在x轴上下方:

sns.residplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),
              scatter_kws={"s": 80});

在这里插入图片描述
如果残差的分布具有某种规律,那说明简单线性回归或许并不是一个好的选择:

sns.residplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
              scatter_kws={"s": 80})

在这里插入图片描述

三、考虑其他变量的影响

四、控制图形大小和形状

五、在其他背景中添加回归图

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值