导语:相关系数衡量的是两个变量同时变化的程度和方向,比如身高和体重,体重一般随着身高增加而增加,在很多情况下,我们处理的对象都是连续变量与连续变量之间的关系,但是还有离散变量与离散变量,连续变量与离散变量,因此本文将对这个话题进行总结,同时介绍一种新颖的相关系数矩阵可视化方法

本文首发于个人公众号,私信骚扰

文章目录

  • case1: 连续变量与连续变量
    • 皮尔逊相关系数
    • 斯皮尔曼相关系数
  • case2: 离散变量与离散变量
    • Uncertainty coefficient
  • case3:连续变量与离散变量
    • correlation_ratio
  • 变量相关性矩阵展示优化
    • 基础:sns.heatmap
    • 优化:数值转化为方块的颜色和大小
  • 总结

case1: 连续变量与连续变量

皮尔逊相关系数

皮尔逊相关系数(Pearson)反映的是两个连续变量之间的线性相关程度,其计算涉及两个统计量: 协方差标准差。协方差是用于衡量两个随机变量之间线性关系的指标, 其定义如下:
Cov(x,y)=∑i=1n(xi−μx)(yi−μy)n−1\begin{aligned} Cov(x, y) = \frac{\sum_{i=1}^n (x_i - \mu_x)(y_i - \mu_y) }{n-1} \end{aligned} Cov(x,y)=n−1∑i=1n​(xi​−μx​)(yi​−μy​)​​
其中μx\mu_xμx​,μy\mu_yμy​分别表示随机变量xxx和yyy的均值;
当协方差大于0,表示正相关, 反之,表示负样本, 但是上式也存在问题, 当数据中存在异常点或者数据的分散程度发生变化时,会影响协方差的取值,因此为了更好地刻画数据的分散程度,以及对数据进行标准化,同时引入协方差和标准差来定义相关性,即皮尔逊相关系数,其定义如下:
ρxy=corr(x,y)=Cov(x,y)δxδyδx=∑i=1n(xi−μx)2n−1δy=∑i=1n(yi−μy)2n−1\begin{aligned} \rho_{xy} &= corr(x, y) = \frac{Cov(x, y)}{\delta x \delta y} \\ \delta x &= \sqrt{\frac{\sum_{i=1}^n (x_i - \mu_x)^2}{n-1}} \\ \delta y &= \sqrt{\frac{\sum_{i=1}^n (y_i - \mu_y)^2}{n-1}} \end{aligned} ρxy​δxδy​=corr(x,y)=δxδyCov(x,y)​=n−1∑i=1n​(xi​−μx​)2​​=n−1∑i=1n​(yi​−μy​)2​​​
简化后的形式为:
ρxy=∑i=1n(xi−μx)(yi−μy)∑i=1n(xi−μx)2∑i=1n(yi−μy)2\begin{aligned} \rho_{xy} = \frac{\sum_{i=1}^n (x_i - \mu_x)(y_i - \mu_y)}{\sqrt{\sum_{i=1}^n (x_i - \mu_x)^2} \sqrt{\sum_{i=1}^n (y_i - \mu_y)^2}} \end{aligned} ρxy​=∑i=1n​(xi​−μx​)2​∑i=1n​(yi​−μy​)2​∑i=1n​(xi​−μx​)(yi​−μy​)​​
在进行数据探索时,常利用散点图来观察变量之间的分布,常见的数据数据分布和皮尔逊相关系数图:

通过上图可以得到一些朴素的结论:

  • 一个相关系数值可以对应多种数据分布,如图中所示的相关系数为1和0的情形;
  • 在展示相关系数的时候,最好把散点图绘制出来

在《数据挖掘导论》一书中也展示了相关系数从-1到+1的变量散点图的分布情况:

皮尔逊相关系数的适应范围:

  • 变量都为连续变量;
  • 变量的分布呈正态分布或者接近正态的单峰分布,可通过scipy中的normaltest进行进行检验;
  • 样本量>20;

计算工具:

df.corr(method='pearson')
method : {'pearson', 'kendall', 'spearman'}

斯皮尔曼相关系数

斯皮尔曼相关系数(Spearman’s rank correlation coefficient)用于衡量两个连续变量在排序上的单调关系,与变量的具体取值无关, 其定义如下, 其中did_idi​表示两个变量的排序之差:
ρ=1−6∑i=1ndi2n(n2−1)\begin{aligned} \rho = 1 - \frac{6\sum_{i=1}^n d_i^2}{n(n^2 -1)} \end{aligned} ρ=1−n(n2−1)6∑i=1n​di2​​​
直接搬运wikipeida上的例子:

计算步骤如下:

  1. 分别对变量XXX和YYY进行排序,得到对应变量的排序值;
  2. 计算排名之间的差值;
  3. 带入公式

下图通过展示斯皮尔曼相关系数和皮尔逊相关系数在相同数据上的异同,来​发掘一些有意思的点:

  • 斯皮尔曼相关系数为正时,表示变量xxx和yyy之间是单调递增的趋势,见上图1;
  • 反之,斯皮尔曼相关系数为负时,变量xxx和yyy之间是单调递减的趋势,见上图2;
  • 当数据分布中无离群点时,斯皮尔曼相关系数和皮尔逊相关系相差不大;

  • 从上图可以发现,斯皮尔曼相关系数为1时,皮尔逊相关系数并没有等于1,该图想说明的是,斯皮尔曼相关系数刻画的不是变量之间的线性关系,而皮尔逊相关系数刻画的是变量之间的线性关系,取值为1,数据分布在同一条线上;
  • 上图右图表明(需要对比有离群存在与否,这里未展示),斯皮尔曼相关系数对于离群点不敏感,而皮尔逊相关系数容易受离群点的影响,因此,我们可以通过简单的比较两种系数的差异,来初步判断离群点是否存在

case2: 离散变量与离散变量

Uncertainty coefficient

不确定性系数又叫做entropy coefficient,Theil’s U, 是基于信息熵衍生的计算指标,可用于衡量两个离散变量之间的相关程度,为了引出其定义,需要分别介绍信息熵,条件熵,互信息的基本概念。

  • 信息熵: 对于一个离散变量XXX,其概率分布记为p(x)p(x)p(x),那么信息熵的定义为:
    H(X)=−∑i=1np(xi)log⁡p(xi)\begin{aligned} H(X) = -\sum_{i=1}^n p(x_i) \log p(x_i) \end{aligned} H(X)=−i=1∑n​p(xi​)logp(xi​)​
    信息熵描述的是所有可能发生事件X的信息量的期望,或者不确定性,假如离散变量XXX表示的股市的涨或者跌,那么信息熵H(x)H(x)H(x)就描述了股市涨跌的全部的不确定性;
  • 条件熵:假如在已知其他消息YYY下,再次去衡量股市涨跌XXX的不确定性,就是条件熵了:
    H(X∣Y)=∑y∈Yp(y)H(X∣Y=y)=−∑y∈Yp(y)∑x∈Xp(x∣y)log⁡p(x∣y)=−∑y∈Y∑x∈Xp(y)p(x∣y)log⁡p(x∣y)=−∑y∈Y∑x∈Xp(x,y)log⁡p(x∣y)\begin{aligned} H(X|Y) &= \sum_{y \in Y} p(y) H(X|Y=y) \\ &= -\sum_{y \in Y} p(y) \sum_{x \in X} p(x|y)\log p(x|y) \\ &= -\sum_{y \in Y} \sum_{x \in X} p(y) p(x|y)\log p(x|y) \\ &= -\sum_{y \in Y} \sum_{x \in X} p(x,y) \log p(x|y) \\ \end{aligned} H(X∣Y)​=y∈Y∑​p(y)H(X∣Y=y)=−y∈Y∑​p(y)x∈X∑​p(x∣y)logp(x∣y)=−y∈Y∑​x∈X∑​p(y)p(x∣y)logp(x∣y)=−y∈Y∑​x∈X∑​p(x,y)logp(x∣y)​
    可以证明H(x)≥H(X∣Y)H(x) \ge H(X|Y)H(x)≥H(X∣Y),即在获取了其他信息YYY下,随机变量XXX的不确定性会降低;
  • 互信息或者信息增益:其定义如下,其值越大,表明变量YYY消除变量XXX的不确定性程度越大,XXX和YYY越相关;
    I(X,Y)=Gain(Y)=H(X)−H(X∣Y)\begin{aligned} I(X,Y) = Gain(Y) = H(X) - H(X|Y) \end{aligned} I(X,Y)=Gain(Y)=H(X)−H(X∣Y)​

有了上述的铺垫,衡量两个离散变量之间的不确定性系数的定义为如下形式:
U(X∣Y)=H(X)−H(X∣Y)H(X)\begin{aligned} U(X|Y)= \frac{H(X) - H(X|Y)}{H(X)} \end{aligned} U(X∣Y)=H(X)H(X)−H(X∣Y)​​

case3:连续变量与离散变量

correlation_ratio

先通过wikipedia上correlation_ratio具体例子来说明如果计算:

假定数据中存在两个变量,离散变量为课程名称,连续变量为对应的分数,要计算的就是连续变量与离散变量的相关程度;

  1. 先统计各个类别下,对应的连续变量的均值,得到类内均值, 以及连续变量的整体均值;
  2. 计算整体样本的方差;
  3. 利用各个类别内的样本占比加权类内均值和整体均值的差值的平方;
  4. 上图计算过程中,忽略了样本量,因为分子和分母中同时包含,可以约去;
  5. correlation_ratio=67809640correlation\_ratio = \sqrt{\frac{6780}{9640}}correlation_ratio=96406780​​

变量相关性矩阵展示优化

基础:sns.heatmap

一般常用sns.heatmap的热力图来展示变量之间的相关系数矩阵,下面是公众号:一直学习一直爽常用的两种配色样式,基本上可以解决90%的问题.
,如果读者想进一步提升对热力图的使用技巧可查看Ultimate Guide to Heatmaps in Seaborn with Python

data = pd.read_csv('https://raw.githubusercontent.com/drazenz/heatmap/master/autos.clean.csv')# 样式1
fig, ax = plt.subplots(1, 1, figsize=(12, 12))
sns.heatmap(data=data.corr(), annot=True,annot_kws={"size":10},square=True,cmap="YlGnBu",fmt='.2f', linewidths=0.5,linecolor='w',ax=ax)
# 样式2
fig, ax = plt.subplots(1, 1, figsize=(12, 12))
sns.heatmap(data=data.corr(), annot=True,annot_kws={"size":10},square=True,cmap=sns.diverging_palette(20, 220, n=256),fmt='.2f', linewidths=0.5,linecolor='w',ax=ax)
#ax.set_xticklabels(ax.get_xticklabels(), rotation=45)

优化:数值转化为方块的颜色和大小

但是上图在变量很多的时,无法快速地识别出哪些变量之间相关性更高,容易造成视觉疲劳,通过搜索,公众号:一直学习一直爽 找到了如下帖子better-heatmaps
,其主要原理是利用散点图+方块区域的大小和颜色直观地展示变量之间的相关性值,具体代码可以参考heatmap,对于相同的数据,优化后的展示样式为:

!pip install heatmapz
from heatmap import heatmap, corrplotdata = pd.read_csv('https://raw.githubusercontent.com/drazenz/heatmap/master/autos.clean.csv')
plt.figure(figsize=(12, 12))
corrplot(data.corr(), size_scale=300)

绘图的简单原理:

  1. 计算出变量之间的的相关系数矩阵,将矩阵进行变换,生成3列的dataframe, (变量1,变量2, 相关值)
  2. 分别将变量1和变量2映射到数字上,利用散点图对 (变量1,变量2)进行绘制;
  3. 对坐标系中的绘制的点进行优化处理,点的形状改为方块,将相关值转为方块的大小和颜色值

总结

本文简单地介绍了在3种不同的场景下相关系数的计算方式:

  • 连续变量与连续变量 →\rightarrow→ 皮尔逊相关系数或者斯皮尔曼相关系数
  • 离散变量与离散变量 →\rightarrow→ 不确定系数(信息熵&条件熵)
  • 连续变量与离散变量 →\rightarrow→ 相关性比例(组内方差&整体方差)
    为了直观的展示相关矩阵,先介绍了两种的常规的方式,后面引入了一种新的设计方案,减少干扰,使人可快速识别相关性高的变量。


3种场景下的相关性计算方式,热力图优化展示相关推荐

  1. 12张图带你轻松了解 calico 6种场景下宿主机和pod互访的iptables规则链流转情况【下】

    文章目录 场景五:同节点上,不同容器之间的访问 request reply 场景六:跨节点,容器间互相访问 master request node request node reply master ...

  2. 广告营销场景下的隐私计算实践:阿里妈妈营销隐私计算平台SDH

    一.概览 随着全球主要市场陆续出台个人信息保护政策,互联网生态中的数据安全和用户隐私保护问题变得越发重要且日趋严格. 如何在营销场景下安全合规的使用数据,维护在线广告商业模型的核心运作,成为当下广告生 ...

  3. 面向削峰填谷的电动汽车多目标优化调度策略 代码主要实现了考虑电动汽车参与削峰填谷的场景下,电动汽车充放电策略的优化,是一个多目标优化

    MATLAB代码:面向削峰填谷的电动汽车多目标优化调度策略 关键词:电动汽车 削峰填谷 多目标 充放电优化 仿真平台:MATLAB YALMIP+CPLEX 主要内容:代码主要实现了考虑电动汽车参与削 ...

  4. ​冲刺最后一公里——音视频场景下的边缘计算实践

    点击上方"LiveVideoStack"关注我们 近年来,边缘计算逐渐从未来风口变成了进行时,而内容分发这个天生与"下沉"密不可分的领域,在边缘计算实践中可谓一 ...

  5. 物联网和工业互联网场景下的边缘计算

    1. 物联网和边缘计算 业务需求 物联网主要是将各种传感器和智能设备连接起来,将数据上传云端,并通过物联网应用程序进行监控管理. 由于传感器可能部署在很多相距较远的地方,而且数量庞大,所以不可能将传感 ...

  6. 大规模场景下 kubernetes 集群的性能优化

    一.etcd 优化 1.etcd 采用本地 ssd 盘作为后端存储存储 2.etcd 独立部署在非 k8s node 上 3.etcd 快照(snap)与预写式日志(wal)分盘存储 etcd 详细的 ...

  7. 每秒上千订单场景下的分布式锁高并发优化实践!

    本文授权转自石杉的架构笔记 背景引入 首先,我们一起来看看这个问题的背景? 前段时间有个朋友在外面面试,然后有一天找我聊说:有一个国内不错的电商公司,面试官给他出了一个场景题: 假如下单时,用分布式锁 ...

  8. Java架构-每秒上千订单场景下的分布式锁高并发优化实践!

    "上一篇文章我们聊了聊Redisson这个开源框架对Redis分布式锁的实现原理,如果有不了解的兄弟可以看一下:<拜托,面试请不要再问我Redis分布式锁实现原理>. 今天就给大 ...

  9. 传统金融业务场景下Flink实时计算的探索与实践? by鸣宇淳

    超长文警告!本文7000字,含架构图和各种解决方案的尝试,以及详细代码.,最后还有电子书和各种分享ppt下载,请在wifi下观看.土豪随意 我是鸣宇淳,一个大数据架构师.今天给大家分享一下我在传统金融 ...

最新文章

  1. 用net连某台电脑c盘怎么连_关于电脑的4个冷知识,恐怕90%的人连第一个都不知道!...
  2. 三维家导入户型镜像怎么使用_UG虎钳三维建模教学,认真看仔细学习了!
  3. html 文本框 无法输入,无法在HTML文本框中输入任何东西
  4. wtl单文档选项_Vite 中文文档翻译
  5. 计算机软件工作总结,计算机软件培训总结及小结-工作总结
  6. storyboard隐藏iphone软键盘
  7. cSpring Boot整合RabbitMQ详细教程
  8. 结构之法算法之道CSDN博客-第一期全部博文集锦[CHM 文件下载]
  9. adobe reader运行时出现“Invalid plugin detected”错误的解决办法
  10. Delphi通过MSHTML实现一个HTML解析类
  11. 安全报告处理 HCL AppScan Standard
  12. 神经网络权重是什么意思,神经网络权值和阈值
  13. 【Java学习笔记】斗地主规则抽牌模拟(利用LinkedList集合及Collections集合工具类实现)
  14. html img 能显示psd吗_psd变成html
  15. 34套Java项目教程+源码包含Java swing项目 Java web项目 Java控制台项目(视频教程+源码)
  16. 自我充实自我健全 ———— 星云法师
  17. Day524.其他数据库日志 -mysql
  18. 使用NtCreateThreadEx将Dll注入目标进程
  19. 经济基础知识(初级)【6】
  20. 深度学习模型——AlexNet

热门文章

  1. Chome和Edge通过组策略配置IE模式和总是允许Flash(官方方案)
  2. 2022年电工(初级)考试题及电工(初级)考试试卷
  3. 基于SpringBoot+Vue的鲜花商场管理系统
  4. 关于8259中断控制器
  5. 移动ERP的应用遍地开花
  6. Unity ugui——toggle多选小坑
  7. 教你如何整理下载的图片素材文件名太长太杂乱问题,怎么批量随机重命名的步骤解析
  8. 软考高级信息系统项目管理(高项)原创论文——成本管理
  9. 什么是分布式,分布式和集群的区别又是什么?这一篇让你彻底明白!
  10. 面试系列(四):vivo 软件工程师