【小白学机器学习37】用numpy计算协方差cov(x,y) 和 皮尔逊相关系数 r(x,y)

目录

1 关于1个数组np.array(1组数据)如何求各种统计数据

2 关于2个数组np.array(2组数据)如何求数组的相关关系?

2.1 协方差公式和方差公式

2.2 协方差 公式 的相关说明

2.3 用np.cov(x,y,ddof=0) 直接求协方差矩阵

2.4  手动求2个数组的协方差的具体步骤

2.5 皮尔逊相关系数 (和有偏无偏没关系,分母约掉)

2.6 直接用公式求corr1=np.corrcoef(x,y) 皮尔逊相关系数矩阵

2.7 手动求皮尔逊相关系数

3 完整测试代码


用python处理协方差 和 皮尔逊相关系数

1 1个数组np.array(1组数据)如何求各种统计数据?

  • 如果
  • np.mean(array)
  • np.var(array,ddof=1) 
  • np.std(array,ddof=1)

均值

  • mean=u = Σ(x1+x2+.....+xn)/n
  • E=mean

方差

  • var= Σ(x1-u)^2 / n
  • var= Σ(x1-u)^2 / (n-1)

标准差

  • std=sqrt(var)

# 求1组数据的各种统计值
list1=[1,2,3,4,5,6,7,8,9,10]
array1=np.array(list1)

mu1=np.mean(array1)
var1=np.var(array1)                 #默认缺省 ddof=0,方差有偏估计
var11=np.var(array1,ddof=1)    #ddof 无偏估计
std1=np.std(array1)
std11=np.std(array1,ddof=1)

2 关于2个数组np.array(2组数据)如何求数组的相关关系?

2组数据/2个数组,可以检查是否有相关关系

  • 协方差
  • 相关系数

2.1 协方差公式和方差公式

方差公式

  • var(x) =var(x,x)  = Σ(x1-u)^2 / n
  • var(x) =var(x,x)  = Σ(x1-u)^2 / (n-1)

协方差公式

  • cov(x,y) = (x1i-u1)*(x2i-u2) / n
  • cov(x,y) = (x1i-u1)*(x2i-u2) / (n-1)

2.2 协方差 公式 的相关说明

  • 协方差的范围可以为,正数,负数
  • 如果是正数,表示正相关
  • 如果是负数,表示负相关
  • 如果=0等,表示不相关
  • 图形上看就不相关

2.3 用np.cov(x,y,ddof=0) 直接求协方差矩阵

  • 协方差矩阵
  • 包含了,cov(x,y) 和 δx^2 和 δy^2
  • 直接求法  cov1=np.cov(x,y,ddof=0)
  • 直接求法  cov1=np.cov(x,y,ddof=1)  #无偏

import numpy as np
import pandas as pd
import scipy as sp
%precision 3# 求1组数据的各种统计值
list1=[1,2,3,4,5,6,7,8,9,10]
array1=np.array(list1)mu1=np.mean(array1)
var1=np.var(array1)            #默认缺省 ddof=0,方差有偏估计
var11=np.var(array1,ddof=1)    #ddof 无偏估计
std1=np.std(array1)
std11=np.std(array1,ddof=1)print("mu1%d=" %555)  #%d %s 只适合数字,字符串,不适合变量,变量当参数会报错
print("mu1=" ,mu1)    #比较山寨,但是可以
print("var1={0}".format(var1))   #适合变量带入,不灵活,不能用参数名需要标数字对应
print("var11={0}".format(var11)) 
print(f"std1={std1}")   #适合变量带入,带入的是参数名,灵活
print(f"std11={std11}") 
print()# 求2组数据的各种统计值,也就是2组数据之间的关系---相关关系
list2=[2,6,7,5,7,8]
list3=[10,12,14,20,24,28]
array2=np.array(list2)
array3=np.array(list3)#pd.DataFrame 注意驼峰命名法,2个首字母都要大写
dataframe1=pd.DataFrame({"x":array2,"y":array3})
print(dataframe1)
print()x=dataframe1["x"]
y=dataframe1["y"]cov1=np.cov(x,y,ddof=0)
print(cov1)
print()cov2=np.cov(x,y,ddof=1)
print(cov2)
print()corr1=np.corrcoef(x,y)
print(corr1)
print()

2.4  手动求2个数组的协方差的具体步骤

  • 先求2个数组分别的均值,
  • 数组-均值 =新的数组
  • 新数组*新数组=新数组
  • Σ新数据=协方差cov(x,y)
  • cov11=sum((array2-u2)*(array3-u3))/N

  • #错误写法,需求将差的乘积求和Σ
  • cov11=(array2-u2)*sum(array3-u3)/N    
  •  #错误写法,是差的乘积求和Σ,不是分别的和的 乘积!
  • #cov11=sum(array2-u2)*sum(array3-u3)/N  
# 手动求协方差
u2=np.mean(array2)
len2=len(array2)u3=np.mean(array3)
len3=len(array3)N=len(dataframe1)if(len2==len3 and len3==N):print("二维数组的长度就是其中任何一个xi的长度")#cov11=(array2-u2)*sum(array3-u3)/N       #错误写法,需求将差的乘积求和Σ
#cov11=sum(array2-u2)*sum(array3-u3)/N    #错误写法,是差的乘积求和Σ,不是分别的和的乘积!
cov11=sum((array2-u2)*(array3-u3))/Nprint(cov11)

2.5 皮尔逊相关系数 (和有偏无偏没关系,分母约掉)

  • 协方差和  /n  /(n-1)  没有关系,因为分子,分母都包含除掉了
  • 所以,相关系数,不需要ddof=0/1
  • 协方差的范围 [-1,1] 之间

2.6 直接用公式求corr1=np.corrcoef(x,y) 皮尔逊相关系数矩阵

  • 相关系数矩阵
  • 包含了,1 和相关系数  Rxy
  • 直接求法 corr1=np.corrcoef(x,y)

2.7 手动求皮尔逊相关系数

  • 公式方法
  • 分子,相关系数
  • 分母,开根号(里面是  x1的方差   *  x2的方差)
  • 或者说,分母是开根号(里面是 x1的标准差std^2*  x2的标准差std^2)

# 手动求协方差
u2=np.mean(array2)
len2=len(array2)u3=np.mean(array3)
len3=len(array3)N=len(dataframe1)if(len2==len3 and len3==N):print("二维数组的长度就是其中任何一个xi的长度")#cov11=(array2-u2)*sum(array3-u3)/N       #错误写法,需求将差的乘积求和Σ
#cov11=sum(array2-u2)*sum(array3-u3)/N    #错误写法,是差的乘积求和Σ,不是分别的和的乘积!
cov11=sum((array2-u2)*(array3-u3))/Nprint(cov11)
print()# 手动求相关系数r(x,y)
var2=np.var(array2)
var3=np.var(array3)corr11=cov11/np.sqrt(var2*var3)
print(corr11)
print()

3 完整测试代码

import numpy as np
import pandas as pd
import scipy as sp
%precision 3# 求1组数据的各种统计值
list1=[1,2,3,4,5,6,7,8,9,10]
array1=np.array(list1)mu1=np.mean(array1)
var1=np.var(array1)            #默认缺省 ddof=0,方差有偏估计
var11=np.var(array1,ddof=1)    #ddof 无偏估计
std1=np.std(array1)
std11=np.std(array1,ddof=1)print("mu1%d=" %555)  #%d %s 只适合数字,字符串,不适合变量,变量当参数会报错
print("mu1=" ,mu1)    #比较山寨,但是可以
print("var1={0}".format(var1))   #适合变量带入,不灵活,不能用参数名需要标数字对应
print("var11={0}".format(var11)) 
print(f"std1={std1}")   #适合变量带入,带入的是参数名,灵活
print(f"std11={std11}") 
print()# 求2组数据的各种统计值,也就是2组数据之间的关系---相关关系
list2=[2,6,7,5,7,8]
list3=[10,12,14,20,24,28]
array2=np.array(list2)
array3=np.array(list3)#pd.DataFrame 注意驼峰命名法,2个首字母都要大写
dataframe1=pd.DataFrame({"x":array2,"y":array3})
print(dataframe1)
print()x=dataframe1["x"]
y=dataframe1["y"]cov1=np.cov(x,y,ddof=0)
print(cov1)
print()cov2=np.cov(x,y,ddof=1)
print(cov2)
print()corr1=np.corrcoef(x,y)
print(corr1)
print()# 手动求协方差
u2=np.mean(array2)
len2=len(array2)u3=np.mean(array3)
len3=len(array3)N=len(dataframe1)if(len2==len3 and len3==N):print("二维数组的长度就是其中任何一个xi的长度")#cov11=(array2-u2)*sum(array3-u3)/N       #错误写法,需求将差的乘积求和Σ
#cov11=sum(array2-u2)*sum(array3-u3)/N    #错误写法,是差的乘积求和Σ,不是分别的和的乘积!
cov11=sum((array2-u2)*(array3-u3))/Nprint(cov11)
print()# 手动求相关系数r(x,y)
var2=np.var(array2)
var3=np.var(array3)corr11=cov11/np.sqrt(var2*var3)
print(corr11)
print()

4  可用markdown写各种草稿公式

$$\sqrt(x^2)$$

$$
\begin{bmatrix}
a & b \\
c & d \\
\end{bmatrix}
$$

$$
cov(x,y) = (x1i-u1)*(x2i-u2) / n
$$

#使用markdown
#使用latex


$$cov(x,y)=
\begin{bmatrix}
δx^2,cov(x,y) \\
 cov(x,y),δy^2
 \end{bmatrix}
 $$
 
 $$r(x,y)=
\begin{bmatrix}
1,r(x,y) \\
 r(x,y),1
 \end{bmatrix}
 $$


 $$r(x,y)=cov(x,y)/\sqrt(δx1^2*δx2^2)$$

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

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

相关文章

C++ 11重点总结1

智能指针 智能指针: C11引入了四种智能指针: auto_ptr(已弃用)、unique_ptr、shared_ptr和weak_ptr。智能指针可以更有效地管理堆内存,并避免常见的内存泄漏问题。 shared_ptr: 自定义删除器。 shared_ptr使用引用计数来管理它指向的对象的生命周期。多个shared_ptr实例可以指向…

2024年nvm保姆级安装教程

需求:当前我的nodejs的版本是6.14.10,想切换为更高的版本。故使用nvm工具来实现不同node版本之间的切换 目录 一、删除node二、nvm安装三、配置nvm镜像四、安装所需要的nodejs版本nvm常用命令 一、删除node 第一步:首先在控制面板删除node.j…

Java部分新特性

模式匹配 instance of 模式匹配 之前写法 public void print(Object o) {if (o instanceof String){String str (String) obj;System.out.println("This is a String of length " s.length());} else {System.out.println("This is not a String");} …

Flink--API 之 Source 使用解析

目录 一、Flink Data Sources 分类概览 (一)预定义 Source (二)自定义 Source 二、代码实战演示 (一)预定义 Source 示例 基于本地集合 基于本地文件 基于网络套接字(socketTextStream&…

【三维生成】Edify 3D:可扩展的高质量的3D资产生成(英伟达)

标题:Edify 3D: Scalable High-Quality 3D Asset Generation 项目:https://research.nvidia.com/labs/dir/edify-3d demo:https://build.nvidia.com/Shutterstock/edify-3d 文章目录 摘要一、前言二、多视图扩散模型2.1.消融研究 三、重建模型…

Android Framework禁止弹出当前VOLTE不可用的提示窗口

文章目录 VoLTE简介VoLTE 的优势 当前VOLTE不可用的弹窗弹窗代码定位屏蔽弹出窗口 VoLTE简介 VoLTE(Voice over LTE)是一种基于4G LTE网络的语音通话技术。它允许用户在4G网络上进行高质量的语音通话和视频通话,而不需要回落到2G或3G网络。V…

微信小程序生命周期详解

一、全局生命周期 微信小程序的全局生命周期指的是小程序从启动到销毁期间经历的一系列阶段和事件。全局生命周期主要在 App() 构造器中定义,包括以下几个阶段: onLaunch:小程序初始化完成时触发,全局只触发一次。onShow&#x…

Element UI 打包探索【3】

目录 第九个命令 node build/bin/gen-cssfile gulp build --gulpfile packages/theme-chalk/gulpfile.js cp-cli packages/theme-chalk/lib lib/theme-chalk 至此,dist命令完成。 解释why Element UI 打包探索【1】里面的why Element UI 打包探索【2】里面…

去哪儿大数据面试题及参考答案

Hadoop 工作原理是什么? Hadoop 是一个开源的分布式计算框架,主要由 HDFS(Hadoop 分布式文件系统)和 MapReduce 计算模型两部分组成 。 HDFS 工作原理 HDFS 采用主从架构,有一个 NameNode 和多个 DataNode。NameNode 负…

深度学习中的梯度下降算法:详解与实践

梯度下降算法是深度学习领域最基础也是最重要的优化算法之一。它驱动着从简单的线性回归到复杂的深度神经网络模型的训练和优化。作为深度学习的核心工具,梯度下降提供了调整模型参数的方法,使得预测的结果逐步逼近真实值。本文将从梯度下降的基本原理出…

C++ ADL参数依赖查找

自以为作为一个C老鸟,对C里面各种概念应该都比较熟悉了,但是今天看书的时候又学到了一个装逼的概念ADL,本着学C装逼装到底的精神,就把这个概念学习了一番。 ADL 的工作原理 在C中,ADL 是 Argument-Dependent Lookup …

低功耗墒情监测站产品详解 如何助力高标准农田项目发展

一、产品概述 低功耗墒情监测站是一款集成了传感、无线通信、处理与控制等物联网技术的先进设备。它利用高精度传感器实时测量土壤墒情(即土壤水分含量),并通过物联网技术将数据传输至云平台。这一创新设计无需铺设专门的通信线路&#xff0c…

VM+Ubuntu18.04+XSHELL+VSCode环境配置

前段时间换了新电脑,准备安装Linux学习环境:VM虚拟机、Ubuntu18.04操作系统、XSHELL、XFTP远程连接软件、VSCode编辑器等,打算把安装过程记录一下。 1. 虚拟机介绍 为什么要用虚拟机? 想学习Linux操作系统,一般有3种…

《Opencv》基础操作<1>

目录 一、Opencv简介 主要特点: 应用领域: 二、基础操作 1、模块导入 2、图片的读取和显示 (1)、读取 (2)、显示 3、 图片的保存 4、获取图像的基本属性 5、图像转灰度图 6、图像的截取 7、图…

【Android】ARouter的使用及源码解析

文章目录 简介介绍作用 原理关系 使用添加依赖和配置初始化SDK添加注解在目标界面跳转界面不带参跳转界面含参处理返回结果 源码基本流程getInstance()build()navigation()_navigation()Warehouse ARouter初始化init帮助类根帮助类组帮助类 completion 总结 简介 介绍 ARouter…

国内首家! 阿里云人工智能平台 PAI 通过 ITU 国际标准测评

近日,阿里云人工智能平台 PAI 顺利通过中国信通院组织的 ITU-T AICP-GA(Technical Specification for Artificial Intelligence Cloud Platform:General Architecture)国际标准和《智算工程平台能力要求》国内标准一致性测评&…

SpringBoot文件上传之秒传、断点续传、分片上传

一 文件上传的常见场景 在日常开发中,文件上传的场景多种多样。比如,在线教育平台上的视频资源上传,社交平台上的图片分享,以及企业内部的知识文档管理等。这些场景对文件上传的要求也各不相同,有的追求速度&#xff…

力扣 最长回文字串-5

最长回文字串-5 //双指针&#xff0c;暴力解法 class Solution { public:bool is(string s, int l, int r) // 判断是否为回文{while (l < r) {if (s[l] ! s[r]) {return false;}l;r--;}return true;}string longestPalindrome(string s) {int Max 0;//用来判断找出最长字…

【算法】快速求出 n 最低位的 1

Leetcode 2438. 二的幂数组中查询范围内的乘积 先展示算法具体实现 while (n) {int lowbit n & (-n);powers.push_back(lowbit);n ^ lowbit; }这段代码的核心是通过 n & (-n) 计算出 n 的 最低位的 1&#xff08;即最右边的 1&#xff09; -n 是 n 的二进制补码表…

数据抽取平台pydatax使用案例---11个库项目使用

数据抽取平台pydatax&#xff0c;前期项目做过介绍&#xff1a; 1&#xff0c;数据抽取平台pydatax介绍--实现和项目使用 项目2&#xff1a; 客户有9个分公司&#xff0c;用的ERP有9套&#xff0c;有9个库&#xff0c;不同版本&#xff0c;抽取的同一个表字段长度有不一样&…