python二维散点分布图_深入理解皮尔逊相关系数amp;python代码

1.常见理解误区

(1)计算出变量A和变量B的皮尔逊相关系数为0,不代表A和B之间没有相关性,只能说明A和B之间不存在线性相关关系。

例:温度和冰淇淋销量之间的散点图像如下,可以发现大致成二次函数图像,随着温度升高,销量也会增加,达到峰值后,随着温度升高,销量反而下降。也就是说,销量和温度之间是有关系的。

不过,计算温度和销量之间的皮尔逊相关系数却为0。这只能说明温度和销量之间没有线性相关关系,而不能说二者不存在相关关系。

5608cf345279c28d410abce93b7ca3e6.png
图片来自于网络博客

(2)皮尔逊相关系数并不稳定,会受到异常点的影响。

例:如果不考虑最右侧的异常点,x和y之间的相关系数应该为0,即无论y取何值,x都为固定值8。但是,考虑了异常点后,x和y的相关系数变为0.816。

这也说明,在进行数据分析之前,需要对数据进行清洗,去掉异常点、噪声数据,使得分析结果更为可靠。

4be4c6dedeb9a051a55ade1fc916033d.png

(3)皮尔逊相关系数绝对值越大,二者相关性越强?

答案是不一定。除了相关系数的大小,我们更要关心相关系数的显著性。

2.皮尔逊相关系数正确使用步骤

第一步:绘制散点图,是否存在异常点。如果有异常点,删除异常点。然后再看观察变量x和变量y之间的关系是否近似为一条直线,如果是,则计算皮尔逊相关系数。相关系数为(0,1]的正数,表明x和y之间呈线性正相关;相关系数为0,表明二者不存在线性相关关系,但不排除存在其他非线性相关关系;相关系数为[-1,0)的负数,表明x和y之间存在线性负相关关系。

如果散点图并不类似于一条直线,而是其他类型图像,如二次函数图像、指数图像,即使计算出皮尔逊相关系数也没有意义。

3.python代码示例

python sklearn库中datasets模块中有一个boston房价数据集,可以使用load_boston()函数进行加载。

print(load_boston().DESCR)#查看boston数据集基本信息

56c7b5615c122c4be9564960663a299d.png
#加载数据集并进行数据处理
from sklearn.datasets import load_boston
import pandas as pd
rawdata = load_boston()#加载数据
features = pd.DataFrame(rawdata.data,columns = rawdata.feature_names)#提取特征集
label = pd.DataFrame(rawdata.target,columns = ['target'])#提取标签列boston = pd.concat([features,label],axis =1)#合并特征集和标签列
print(boston)

9a86161a42bdd6b784e855e0e8b1baf4.png
#绘制散点矩阵图,由于boston矩阵共有14个属性,全部属性两两绘制散点图过于庞大,因此选择其中3个属性进行两两组合绘制散点图
import matplotlib.pyplot as plt
import seaborn as sb
sb.pairplot(data = boston,vars = ['CRIM','INDUS','target'])#'CRIM','INDUS','target'三个变量之间两两组合绘制散点图
plt.savefig('C:UsersCaraDesktopscatter fig.png')#绘图结果存到本地

绘图如下:

61c22bf58d5143c1329c1b0128e40a6f.png

3个变量,两两组合绘制出6幅散点图,其中有3幅会是重复的,我们只需要看左下角3幅,或右上角3幅即可。

蓝色柱形图是变量的数值频率分布图。

从散点图可以看出,CRIM和INDUS并没有线性相关性。

CRIM和target(房价)大致成负相关性,图像接近指数函数(非线性函数),因此,计算出的相关系数可能并不可靠。

INDUS和target之间大致成负线性相关,同时右侧存在几个异常点,最终计算出的相关系数会受到异常点的影响。

直观的认识需要精确的相关系数作为检验:

5be28aa81e508715d4a62399a808ce17.png

注释:corr()方法默认的相关系数为皮尔逊,也可以设置method 参数为其他类型的相关系数,如 'kendall', 'spearman'。

由于宽度限制,中间列显示不完全,可以设置参数:

#更改显示设置,打印全部列
pd.set_option('display.max_columns',None)#若单行不够显示全部列,将会换行显示
print(boston.corr())

b024c28d27a94b9d2dcee89c11e049ce.png

查看单个变量与其他变量间的皮尔逊相关系数:

938705e42562ef221efca1377102b9c0.png

由上可见,犯罪率确实与房价呈负相关。不过,没有显著性指标作为支持。

如果需要同时返回皮尔逊相关系数和显著性指标,则可以使用scipy库中stats模块中的stats模块下的pearsonr 函数。stats是一系列统计方法的集合,如峰度、t检验、相关性、F检验……

from scipy.stats import stats
help(stats.pearsonr)

b289fa628734e14ad1b06f196b591edf.png
#使用scipy中的函数计算相关系数及显著性
from scipy.stats import stats
r,p_value = stats.pearsonr(boston['CRIM'],boston['target'])#计算CRIM和target之间的相关系数和对应的显著性
print('相关系数为{:.3f},p值为{:.5f}'.format(r,p_value))#相关系数保留3位小数,p值保留5位小数

c07efd38f73d160103e62550f40db5d4.png

p值远小于0.01,表明CRIM和target 在1%的水平上存在显著的线性相关,对应的相关系数为-0.388。

不过,使用这种方法缺点很明显,不能一次性计算所有变量两两组合的相关性。

最后,绘制热力图,直观展示变量间的线性相关性:

#绘制相关系数的热力图
import seaborn as sb
r_pearson = boston.corr()
sb.heatmap(data = r_pearson)

358f64f9df43a47c21d240a521adbe09.png

换个色系:

sb.heatmap(data = r_pearson,cmap="YlGnBu")

0a9f6675157626ecf3d86d6c988ccccb.png

全部代码如下:

from sklearn.datasets import load_boston
import pandas as pd
#查看Boston数据集的基本信息
print(load_boston().DESCR)rawdata = load_boston()#加载数据集
features = pd.DataFrame(rawdata.data,columns = rawdata.feature_names)#提取特征列
label = pd.DataFrame(rawdata.target,columns = ['target'])#提取房价列(target列)
boston = pd.concat([features,label],axis =1)#组合特征列和房价列#绘制散点图
import matplotlib.pyplot as plt
import seaborn as sb
sb.pairplot(data = boston,vars = ['CRIM','INDUS','target'])
plt.savefig('C:UsersCaraDesktopscatter fig.png')#计算全部变量的相关性矩阵
print(boston.corr())#查看目标变量‘房价’与其他变量间的相关性
print(boston.corr()['target'])#查看犯罪率CRIM与其他变量之间的关系
print(boston.corr()['CRIM'])#更改显示设置,打印全部列
pd.set_option('display.max_columns',None)
print(boston.corr())#使用scipy中的函数计算CRIM和target的相关系数及显著性
from scipy.stats import stats
r,p_value = stats.pearsonr(boston['CRIM'],boston['target'])
print('相关系数为{:.3f},p值为{:.5f}'.format(r,p_value))#绘制相关系数的热力图
import seaborn as sb
r_pearson = boston.corr()
sb.heatmap(data = r_pearson,cmap="YlGnBu")#cmap设置色系

参考:

【强烈推荐】清风:数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com
33cb27a2288f5535df6ed0a2c7fd30d2.png
python画热力图(相关系数矩阵图)_henbile的博客-CSDN博客_python 相关性热力图​blog.csdn.net
3865e6aa2c626beb7361b87d71a4a9ca.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hdu4911 Inversion-归并排序

解题思路: 如果原序列的逆序对数大于交换次数,那么最少的逆序对数量就是原序列逆序对-交换次数。 如果原序列的逆序对数小于等于交换次数,那么最少的逆序对数量为0,因为交换次数超过逆序对数,可以把这些逆序对全部消除…

【.net core】电商平台升级之微服务架构应用实战

一、前言这篇文章本来是继续分享IdentityServer4 的相关文章,由于之前有博友问我关于微服务相关的问题,我就先跳过IdentityServer4的分享,进行微服务相关的技术学习和分享。微服务在我的分享目录里面是放到四月份开始系列文章分享的&#xff…

c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...

「今天是学习C语言第 148 天」纸上学来终觉浅,绝知此事要躬行。—— 陆游「冬夜读书示子聿」# 静态链表使用数组实现,利用数组下标代替指针,从而实现数据结点之间的先后关系。实现要点:1.数组下标为0的位置为头结点,指…

集成平台集群任务动态分派

源宝导读:MIP集成平台是为了解决企业大量异构系统之间快速、稳定集成的需要,助力企业数字化转型,明源云自主研发的平台系统。本文将对"事件任务分派"场景的架构设计以及实践成果进行分享。背景MIP集成平台是为了解决企业大量异构系…

dotcpp1115 DNA-打印图案

题目描述 小强从小就喜欢生命科学,他总是好奇花草鸟兽从哪里来的。终于, 小强上中学了,接触到了神圣的名词–DNA.它有一个双螺旋的结构。这让一根筋的小强抓破头皮,“要是能画出来就好了” 小强喊道。现在就请你帮助他吧 输入 输…

akb48_AKB48里历史——六年的终结

注:这是2012年发行的一本在BUBUKA连载的基础上补充了一些内容的粉丝公式教科书,从里面找了部分内容翻译了一下,节选的内容主要说的是2011年的事情,以当时作者的视角,是AKB48第一次新老粉丝换代的时期。前田敦子和大岛优…

[头脑风暴] 解读Docker Bridge网络模型

背景这几天在研究Kubernetes, 遇到一个有意思的nodejs镜像:luksa/kubia# 不带端口映射启动容器 docker run -it -d luksa/kubia # 连接到默认的Bridge网桥,容器IP是 172.17.0.2之后,在宿主机使用容器IP和8080 端口可访问该容器…

kodi pvr 不能安装_「家庭影音串流」电视最强播放器KODI使用方法

本文作者:空翻的帕兹文章适用电脑手机等全平台设备,在用户没有nas的情况下如何使用串流电视最强播放器KODIKodi是由XBMC基金會開發的開源媒體播放器,原名XBMC(最後一個以XBMC命名的版本是13.2「Gotham」,14.0 「Helix」是第一個以…

docker部署flask项目

项目本地运行 1.到github或者自己创建一个flask项目,确保在本地是可以运行成功的 2.上传到自己的代码仓库 服务器部署 1.安装docker yum install docker -y2.配置加速器 DaoCloud加速器采用自主研发的智能路由及缓存技术,并引入了现金的协议层优化…

.NET Core开发实战(第24课:文件提供程序:让你可以将文件放在任何地方)--学习笔记...

24 | 文件提供程序:让你可以将文件放在任何地方文件提供程序核心类型:1、IFileProvider2、IFileInfo3、IDirectoryContentsIFileProvider 是访问各种各样文件提供程序的接口通过这样子抽象的定义,让我们与具体的抽象文件的读取的代码进行了隔…

连接mysql数据库_解决Navicat连接MySQL数据库报错问题

今天在用Navicat连接另外一台主机上的MySQL时报错:Host is not allowed to connect to this MySQL server默认安装的mysql无法远程连接是因为MySQL默认配置了不支持远程连接引起的。解决方法:一、本地主机上登录root用户找到mysql.exe所在路径&#xff0…

洛谷T172098 子串-substr

代码如下&#xff1a; #include <iostream> #include <cstring> using namespace std;int main() {int cnt;cin >> cnt;string a, b;while (cnt--) {int n, m;cin >> n >> m;cin >> a;cin >> b;int ans 0 ;for (int i 0; i < …

在Ocelot中使用自定义的中间件(二)

在上文中《在Ocelot中使用自定义的中间件&#xff08;一&#xff09;》&#xff0c;我介绍了如何在Ocelot中使用自定义的中间件来修改下游服务的response body。今天&#xff0c;我们再扩展一下设计&#xff0c;让我们自己设计的中间件变得更为通用&#xff0c;使其能够应用在不…

机器学习理论引导 电子版_机器学习理论篇1:机器学习的数学基础(2)

本节主要就是讲述的机器学习的数学基础&#xff0c;提到数学基础&#xff0c;可能一眼就会是满眼的枯燥、没意思&#xff0c;但是成就英雄的路上注定了孤独&#xff0c;要想要真正的在学术上有所突破就必须挨得住寂寞&#xff0c;受得住孤独&#xff0c;才能真正的走进熟悉直到…

洛谷T172100 商店-贪心

解题思路&#xff1a; 贪心 代码如下&#xff1a; #include <iostream> #include <algorithm> using namespace std; const int N 100010; int a[N], w[N]; int ans;int main() {int n, m;cin >> n >> m;for (int i 1; i < n; i)cin >> a…

终结“永恒之蓝”后,再战“永恒之黑”

引子&#xff1a;2003年的“抗击非典”&#xff0c;17年后的2020年“抗击新冠”。2017年的“永恒之蓝”&#xff0c;3年后的2020年“永恒之黑”。历史&#xff1a;2017年5月13日&#xff0c;在“胖哥技术堂”中发布了《截杀“WannaCrypt”&#xff0c;终结“永恒之蓝”》。三年…

使用.Net Core编写命令行工具(CLI)

使用.Net Core编写命令行工具(CLI)命令行工具(CLI)命令行工具(CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面&#xff0c;它通常不支持鼠标&#xff0c;用户通过键盘输入指令&#xff0c;计算机接收到指令后&#xff0c;予以执行。通常认为&#xff0c;命令行工具(C…

与php有区别_php://output和php://stdout的区别

php中文网最新课程每日17点准时技术干货分享PHP包含了以php://开头的一系列输出输出流&#xff0c;如php://stdin, php://stdout等。今天查看代码时&#xff0c;忽然想到一个问题&#xff1a;php://output和php://stdout有什么区别&#xff1f;从PHP的官方文献中找答案&#xf…

浅谈 Kubernetes Scheduling-Framework 插件的实现

最近几个月一直在研究 kubernetes 的 scheduling-framework 调度框架&#xff0c;发现还是十分有意思的&#xff0c;我自己也实现了一个基于 scheduling-framework 调度框架的自定义调度器&#xff0c;希望感兴趣的同学一起学习&#xff1a;https://github.com/NJUPT-ISL/Yoda-…

C++实现线段树(lazy-tag方法)-区间修改,区间查询

代码如下&#xff1a; #include <iostream> using namespace std; const int N 10010; typedef long long LL; LL input[N];struct node {int l, r;LL sum;LL add; } tree[4 * N];void build(int l, int r, int u) {tree[u].l l;tree[u].r r;if (l r) {tree[u].sum …