【小白学机器学习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))/N

print(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))/N

print(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))/N

print(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)$$

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(超详细图文)PLSQL Developer 配置连接远程 Oracle 服务

1、下载配置文件 (超详细图文详情)Navicat 配置连接 Oracle-CSDN博客 将下载的文件解压到单独文件夹,如:D:\App\App_Java\Oracle\instantclient-basic-windows.x64-19.25.0.0.0dbru 2、配置 打开 PLSQL Developer,登…

学习视频超分辨率扩散模型中的空间适应和时间相干性(原文翻译)

文章目录 摘要1. Introduction2. Related Work3. Our Approach3.1. Video Upscaler3.2. Spatial Feature Adaptation Module3.3. Temporal Feature Alignment Module3.4. Video Refiner3.5. Training Strategy 4. Experiments4.1. Experimental Settings4.2. Comparisons with …

设计模式---建造者模式

建造者模式 一种创建型设计模式,它允许你一步一步地构建复杂对象。通过使用建造者模式,你可以将对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。说白点就是,解决了构造函数创建对象的问题。 适用于那种构造函…

AtomicIntegerFieldUpdater能否降低内存

1. 代码如下: import java.util.LinkedList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger;public class AtomicIntegerTest {final AtomicInteger startPosition new AtomicInteger(0);final AtomicInteger wrotePosition new Atom…

element的el-table表格标题用css自定义是否必填,用添加伪类的方式标红色*

element的el-table表格标题用css自定义是否必填添加伪类红色 * 效果图如下👇 el-table组件的html部分 css部分 /deep/.el-table__header-wrapper{.el-table__header{.has-gutter tr .el-table__cell:nth-of-type(3) .cell:before{content: *;color:red}.has-gutte…

数据库的⽤户和权限管理

数据库的⽤户和权限管理 应⽤场景⽤户查看⽤户创建⽤户语法注意事项示例 修改密码语法示例 删除⽤户语法 权限与授权给⽤户授权语法⽰例 回收权限语法⽰例 应⽤场景 数据库服务安装成功后默认有⼀个root⽤户,可以新建和操纵数据库服务中管理的所有数据库。在真实的…

C语言数据结构-栈和队列

C语言数据结构-栈和队列 1.栈1.1概念与结构1.2栈的实现1.2.1结构体定义1.2.2初始化1.2.3销毁1.2.4入栈1.2.5出栈1.2.6取栈顶处的元素1.2.7获取栈中有效的个数 2.队列2.1概念与结构2.2队列的实现2.2.1结构体定义2.2.2入队列2.2.3判断是否为空2.2.4队列中的有效元素个数2.2.5删除…

[CTF/网络安全] 攻防世界 upload1 解题详析

[CTF/网络安全] 攻防世界 upload1 解题详析 考察文件上传&#xff0c;具体原理及姿势不再赘述。 姿势 在txt中写入一句话木马<?php eval($_POST[qiu]);?> 回显如下&#xff1a; 查看源代码&#xff1a; Array.prototype.contains function (obj) { var i this.…

TiDB 优化器丨执行计划和 SQL 算子解读最佳实践

作者&#xff1a; TiDB社区小助手 原文来源&#xff1a; https://tidb.net/blog/5edb7933 导读 在数据库系统中&#xff0c;查询优化器是数据库管理系统的核心组成部分&#xff0c;负责将用户的 SQL 查询转化为高效的执行计划&#xff0c;因而会直接影响用户体感的性能与稳…

监控视频汇聚平台:Liveweb视频监控管理平台方案详细介绍

Liveweb国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发&#xff0c;提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能&#xff0c;包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲、…

10个Word自动化办公脚本

在日常工作和学习中&#xff0c;我们常常需要处理Word文档&#xff08;.docx&#xff09;。 Python提供了强大的库&#xff0c;如python-docx&#xff0c;使我们能够轻松地进行文档创建、编辑和格式化等操作。本文将分享10个使用Python编写的Word自动化脚本&#xff0c;帮助新…

ROS VSCode调试方法

VSCode 调试 Ros文档 1.编译参数设置 cd catkin_ws catkin_make -DCMAKE_BUILD_TYPEDebug2.vscode 调试插件安装 可在扩展中安装(Ctrl Shift X): 1.ROS 2.C/C 3.C Intelliense 4.Msg Language Support 5.Txt Syntax 3.导入已有或者新建ROS工作空间 3.1 导入工作…

排序学习整理(1)

1.排序的概念及运用 1.1概念 排序&#xff1a;所谓排序&#xff0c;就是使⼀串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作&#xff0c;以便更容易查找、组织或分析数据。 1.2运用 购物筛选排序 院校排名 1.3常见排序算法 2.实…

TYUT设计模式大题

对比简单工厂&#xff0c;工厂方法&#xff0c;抽象工厂模式 比较安全组合模式和透明组合模式 安全组合模式容器节点有管理子部件的方法&#xff0c;而叶子节点没有&#xff0c;防止在用户在叶子节点上调用不适当的方法&#xff0c;保证了的安全性&#xff0c;防止叶子节点暴露…

指针与引用错题汇总

int *p[3]; // 定义一个包含 3 个指向 int 的指针的数组int a 10, b 20, c 30; p[0] &a; // p[0] 指向 a p[1] &b; // p[1] 指向 b p[2] &c; // p[2] 指向 c // 访问指针所指向的值 printf("%d %d %d\n", *p[0], *p[1], *p[2]); // 输出: 10 20 30…

uniapp中scrollview配合swiper实现一个简单的tab标签页

<template><view class"tab-container"><!-- Tab 标签滚动容器 --><scroll-view scroll-x"true" class"tab-scroll" scroll-with-animation"true"><view class"tab-list"><viewv-for"…

opengl 三角形

最后效果&#xff1a; OpenGL version: 4.1 Metal 不知道为啥必须使用VAO 才行。 #include <glad/glad.h> #include <GLFW/glfw3.h>#include <iostream> #include <vector>void framebuffer_size_callback(GLFWwindow *window, int width, int heigh…

Qml-TabBar类使用

Qml-TabBar类使用 TabBar的概述 TabBar继承于Container 由TabButton进行填充&#xff0c;可以与提供currentIndex属性的任何容器或布局控件一起使用&#xff0c;如StackLayout 或 SwipeView&#xff1b;contentHeight : real:TabBar的内容高度&#xff0c;用于计算标签栏的隐…

Windows常用DOS指令(附案例)

文章目录 1.dir 查看当前目录2.cd 进入指定目录3.md 创建指定目录4.cd> 创建指定文件5.rd 删除指定空目录6.del 删除指定文件7.copy 复制文件8.xcopy 批量复制9.ren 改名10.type 在命令行空窗口打开文件11.cls 清空DOS命令窗口12.chkdsk 检查磁盘使用情况13.time 显示和设置…

YOLOv11 NCNN安卓部署

YOLOv11 NCNN安卓部署 前言 yolov11 NCNN安卓部署 目前的帧率可以稳定在20帧左右&#xff0c;下面是这个项目的github地址&#xff1a;https://github.com/gaoxumustwin/ncnn-android-yolov11 上面的检测精度很低时因为这个模型只训练了5个epoch&#xff0c;使用3090训练一个…