当前位置: 首页 > news >正文

ML 系列:第 31 节— 机器学习中的协方差和相关性

文章目录

  • 一、说明
  • 二、协方差和相关性
    • 2.1 协方差的概念
    • 2.1 相关
  • 三、有关关联的高级主题 (有关详细信息)
    • 3.1 相关性和独立性
    • 3.2 零相关性和依赖性示例
  • 四、相关性和因果关系
  • 五、结论

一、说明

协方差量化了两个随机变量协同变化的程度。当一个变量的较高值与另一个变量的较高值对齐时,同样,对于较低的值,协方差为正。相反,如果一个变量的较高值与另一个变量的较低值一致,则协方差为负。

二、协方差和相关性

2.1 协方差的概念

这是协方差的公式:
在这里插入图片描述
在这里插入图片描述

协方差提示
协方差表示变量之间线性关系的方向。
如果 X 和 Y 趋于一起增加,则它们的协方差为正。
如果 X 增加,而 Y 减少,则它们的协方差为负。
如果 X 和 Y 是独立的,则它们的协方差为零。

2.1 相关

相关性量化了两个变量的相关程度。它是协方差的归一化形式,其值范围为 -1 到 1。相关性 1 表示完全正关系,-1 表示完全负关系,0 表示无关系。

公式:
在这里插入图片描述
在这里插入图片描述

相关性提示:
相关性不仅衡量两个变量之间线性关系的方向,还衡量其强度。
正值表示正关系。
负值表示负关系。
接近零的值表示没有线性关系。
以下是一些用于更好地理解不同值相关性的图:
在这里插入图片描述

图 2.与不同值的相关性 [维基百科上的数据]
实例
示例 1:协方差计算
让我们考虑两个变量 X 和 Y,它们的值如下:

X = [2, 4, 6, 8]
Y = [1, 3, 5, 7]
协方差的 Python 代码:

import numpy as np# Data
X = np.array([2, 4, 6, 8])
Y = np.array([1, 3, 5, 7])# Mean of X and Y
mean_X = np.mean(X)
mean_Y = np.mean(Y)# Covariance Calculation
covariance = np.sum((X - mean_X) * (Y - mean_Y)) / (len(X) - 1)print(f"Covariance: {covariance}")

协方差:6.6666666666666667

示例 2:相关性计算
使用相同的变量 X 和 Y,我们计算它们的相关性。

用于关联的 Python 代码:

# Data
X = np.array([2, 4, 6, 8])
Y = np.array([1, 3, 5, 7])# Standard deviations of X and Y
std_X = np.std(X, ddof=1)
std_Y = np.std(Y, ddof=1)# Correlation Calculation
correlation = covariance / (std_X * std_Y)print(f"Correlation: {correlation}")

相关性:1.00000000000000002

使用库进行协方差和相关性:

我们还可以使用该库直接计算协方差和相关性:numpy

# Covariance Matrix
cov_matrix = np.cov(X, Y)
print(f"Covariance Matrix:\n{cov_matrix}")
print()# Correlation Matrix
corr_matrix = np.corrcoef(X, Y)
print(f"Correlation Matrix:\n{corr_matrix}")

这是上述代码的输出:

在这里插入图片描述

图 1.协方差和相关性的输出
可视化数据有助于了解变量之间的关系。

import matplotlib.pyplot as pltplt.scatter(X, Y)
plt.title("Scatter Plot of X and Y")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

这是上述代码的输出:
在这里插入图片描述

图 3.X 和 Y 的散点图

三、有关关联的高级主题 (有关详细信息)

3.1 相关性和独立性

  1. 独立性的定义
    如果一个变量的出现不会影响另一个变量的出现,则两个变量 X 和 Y 是独立的。从数学上讲,如果满足以下条件,X 和 Y 是独立的:

  2. 相关性和独立性
    独立性意味着零相关性:如果两个变量是独立的,则它们的相关性为零。然而,反之则不一定是正确的。
    零相关性并不意味着独立性:两个变量的相关性可以为零,但仍以非线性方式相关。

3.2 零相关性和依赖性示例

将 X 视为 [−1, 1] 上的均匀分布随机变量,并设 Y=X²。在这里,X 和 Y 不是线性相关的(相关性为零),但它们显然是相关的(因为 Y 由 X 决定)。

import numpy as np
import matplotlib.pyplot as plt# Generating data
X = np.random.uniform(-1, 1, 1000)
Y = X ** 2# Calculating correlation
correlation = np.corrcoef(X, Y)[0, 1]plt.scatter(X, Y)
plt.title(f"Correlation between X and Y is: {correlation:.4}")
plt.xlabel('X')
plt.ylabel('Y');

输出:
在这里插入图片描述

图 4. 零相关性和依赖性

四、相关性和因果关系

  1. 因果关系的定义
    因果关系意味着一个变量的变化直接导致另一个变量的变化。建立因果关系需要的不仅仅是观察相关性;它需要对照实验或纵向研究。

  2. 相关性并不意味着因果关系
    仅仅因为两个变量相关并不意味着一个变量导致另一个变量。相关性可能是由于:

巧合:变量是偶然相关的。
混杂变量:另一个变量影响这两个变量。
无因果关系的相关性示例
有研究表明,在某些地区,鹳的数量与人类出生率呈正相关!这种相关性可能会导致人们错误地得出鹳鸟接生婴儿的结论。然而,这种相关性背后的实际原因在于,较高的鹳数量和较高的出生率都与农村地区有关,而不是鹳和婴儿之间的因果关系。
在这里插入图片描述

图 5. 鹳和人类出生率
详细说明
鹳:一个区域中的鹳数量。
出生率:一个地区的人类出生人数。
农村:混杂变量。与城市地区相比,农村地区的鹳鸟数量和出生率往往更高。
Python 示例
让我们模拟数据来说明这个例子。

import numpy as np
import pandas as pd# Data generation
np.random.seed(42)
num_villages = 100
villages = np.arange(1, num_villages + 1)
stork_population = np.random.poisson(lam=30, size=num_villages)  # Simulating stork population
birth_rate = 0.5 * stork_population + np.random.normal(scale=5, size=num_villages)  # Birth rate influenced by stork population# Creating DataFrame
data = pd.DataFrame({'Village': villages,'Stork Population': stork_population,'Birth Rate': birth_rate
})# Correlation calculation
correlation = np.corrcoef(data['Stork Population'], data['Birth Rate'])[0, 1]print(f"Correlation between Stork Population and Birth Rate: {correlation:.2f}")

鹳鸟种群与出生率的相关性:0.38

让我们可视化它以便更好地理解:

import matplotlib.pyplot as pltplt.scatter(data['Stork Population'], data['Birth Rate'])
plt.title('Stork Population vs. Birth Rate')
plt.xlabel('Stork Population')
plt.ylabel('Birth Rate')
plt.show()

输出:
在这里插入图片描述

图 6. 鹳鸟种群与出生率
结果说明
正相关:计算将显示鹳鸟种群与出生率之间的正相关关系。
误解:如果不了解上下文,人们可能会错误地认为鹳是导致出生率增加的原因。
混杂变量:实际上,较高的鹳鸟数量和出生率在农村地区都是典型的,这是导致观察到的相关性的潜在因素。
此示例强调两个变量之间的相关性并不意味着直接的因果关系。可能还有其他潜在因素(混杂变量)有助于观察到的相关性。因此,在得出有关因果关系的结论之前,仔细分析和考虑所有可能的因素是必不可少的。

五、结论

在机器学习系列的第 31 天,我们深入研究了协方差和相关性的基本统计概念。通过实际的 Python 示例,我们演示了如何计算和解释这些指标,强调了区分相关性和因果关系的重要性,并了解混杂变量的作用。

保持好奇心,继续探索!您迈出的每一步都让您更接近掌握机器学习的艺术和科学。不要错过这个激动人心的旅程的下一章!

相关文章:

ML 系列:第 31 节— 机器学习中的协方差和相关性

文章目录 一、说明二、协方差和相关性2.1 协方差的概念2.1 相关 三、有关关联的高级主题 (有关详细信息)3.1 相关性和独立性3.2 零相关性和依赖性示例 四、相关性和因果关系五、结论 一、说明 协方差量化了两个随机变量协同变化的程度。当一个变量的较高…...

【鸿蒙】鸿蒙开发过程中this指向问题

文章目录 什么是 this?常见 this 指向问题案例分析:HarmonyOS 组件中的 this 指向问题问题描述问题分析原因 解决方案:绑定 this 的正确方法方法一:使用箭头函数方法二:手动绑定 this 完整代码示例使用箭头函数使用 bi…...

d3-contour 生成等高线图

D3.js 是一个强大的 JavaScript 库,用于创建动态、交互式数据可视化。d3-contour 是 D3.js 的一个扩展模块,用于生成等高线图(contour plots)。 属性和方法 属性 x: 一个函数,用于从数据点中提取 x 坐标。y: 一个函…...

Ubuntu20.04离线安装全教程(包括DellR940重置Raid 5、安装Ubuntu、设置root、安装nvidia英伟达显卡驱动及设置防火墙白名单)

本文记录重装Ubuntu20.04的所有记录,从服务器磁盘阵列重新排列、Ubuntu 20.04系统安装、配置root权限、安装Nvidia显卡驱动以及设置防火墙白名单的全部操作。 每一部分参考的博客的出处会放置于段落末尾,表示感谢! 一、重置服务器磁盘阵列&…...

Spring Boot 3 集成 Spring Security(2)授权

文章目录 授权配置 SecurityFilterChain基于注解的授权控制自定义权限决策 在《Spring Boot 3 集成 Spring Security(1)》中,我们简单实现了 Spring Security 的认证功能,通过实现用户身份验证来确保系统的安全性。Spring Securit…...

【开篇】.NET开源 ORM 框架 SqlSugar 系列

01. 前言 ☘️ 1.1 什么是ORM? 对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对…...

参加面试被问到的面试题

1.在程序中如何开启事务? 在Java中,使用JDBC(Java Database Connectivity)与数据库交互时,你可以使用Connection对象的setAutoCommit方法来控制事务。默认情况下,autoCommit是开启的,这意味着每…...

第29天:安全开发-JS应用DOM树加密编码库断点调试逆向分析元素属性操作

时间轴: 演示案例: JS 原生开发-DOM 树-用户交互 DOM:文档操作对象 浏览器提供的一套专门用来操作网页代码内容的功能,实现自主或用户交互动作反馈 安全问题:本身的前端代码通过 DOM 技术实现代码的更新修改&#xff…...

react 的路由功能

1. 安装依赖 pnpm add react-router-dom 2. 基本的路由设置(BrowserRouter) 在 main.tsx 入口文件中使用BrowserRouter组件来包裹整个应用。它会监听浏览器的 URL 变化。 import { StrictMode } from "react";import { createRoot } from …...

SurfaceFlinger学习之一:概览

SurfaceFlinger 是 Android 系统中负责合成和显示屏幕内容的关键系统服务,它运行在一个专用的进程中 (system/bin/surfaceflinger)。它的主要职责是将不同应用程序的绘制内容(即窗口或表面)组合起来,通过硬件抽象层(HA…...

Qt关于窗口一直调用paintEvent的踩坑实录

首先看以下代码&#xff1a; void ItemBlockWidget::paintEvent(QPaintEvent *ev) {// 先调用父类的 paintEvent 以执行默认绘制行为QWidget::paintEvent(ev);qDebug()<<"ItemBlockWidget重绘";QStyleOption opt;opt.initFrom(this);QPainter p(this);style()…...

C++11: STL之bind

C11: STL之bind 引言可调用对象的绑定绑定普通函数绑定静态函数绑定类成员函数绑定仿函数绑定Lambda 占位符std::placeholders的应用嵌套绑定参数重排序结合 STL 算法占位符传递到嵌套函数混合占位符与默认值复杂占位符组合 std::bind的原理std::bind 的设计思路简化实现示例 B…...

在线音乐播放器 —— 测试报告

自动化脚本源代码&#xff1a;Java: 利用Java解题与实现部分功能及小项目的代码集合 - Gitee.com 目录 前言 一、项目简介 1.项目背景 2.应用技术 &#xff08;1&#xff09;后端开发 &#xff08;2&#xff09;前端开发 &#xff08;3&#xff09;数据库 二、项目功能…...

等保测评讲解:安全管理中心

在数字化转型的背景下&#xff0c;网络安全的重要性愈发凸显&#xff0c;而作为中国边疆大省的黑龙江&#xff0c;其网络安全建设更是不可忽视。等保测评&#xff0c;即信息安全等级保护测评&#xff0c;是确保信息系统安全的关键环节。本文将详细讲解黑龙江等保测评中的安全管…...

vue3表单输入相关修饰符使用

在 Vue 3 中&#xff0c;.lazy、.number 和 .trim 是用于 v-model 指令的修饰符&#xff0c;它们可以帮助你在双向绑定时进行特定的处理。 1. .lazy 修饰符 .lazy 修饰符表示只在 input 事件之后触发更新&#xff0c;即输入框的内容发生变化后&#xff0c;只有在用户**失去焦…...

CSS笔记(二)类名复用

这里我通过两张不同位置的卡片来实现效果 代码 <!DOCTYPE html> <html><head><style>/*设置画布*/body{/* 方便排列与对齐*/display: flex; /*画布布满整个窗口*/height: 100vh;/*水平居中*/justify-content: center;/*垂直居中*/align-items: cente…...

TCP三次握手与四次挥手(TCP重传机制,2MSL)超详细!!!计算机网络

本篇是关于3次握手和四次挥手的详细解释~ 如果对你有帮助&#xff0c;请点个免费的赞吧&#xff0c;谢谢汪。&#xff08;点个关注也可以&#xff01;&#xff09; 如果以下内容需要补充和修改&#xff0c;请大家在评论区多多交流~。 目录 1. TCP头部&#xff1a; 2. 三次握手…...

LCR 006. 两数之和 II - 输入有序数组

一.题目&#xff1a; LCR 006. 两数之和 II - 输入有序数组 - 力扣&#xff08;LeetCode&#xff09; 二.我的原始解法-暴力解法超时&#xff1a; class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: # 暴力解法 result [] for i in rang…...

网络安全在现代企业中的重要作用

网络安全是这个数字时代最令人担忧的事情之一。对技术的依赖性越来越强&#xff0c;使其同时面临多种网络威胁。其声誉和法律后果的大幅下降可能归因于一次妥协。 这使得良好的网络安全成为所有企业的选择和必需品。本文介绍了网络安全的重要性、企业中常见的网络威胁以及公司…...

关于 EKS Bottlerocket AMI 版本与 Karpenter 配置的说明

问题1: Bottlerocket AMI 版本问题 之前,后端团队发现在使用 Bottlerocket v1.26.2 AMI 版本时,存在某些问题。经过 Bottlerocket 团队调查,此行为是罕见的 race condition 导致的结果。 我们在环境中重现了此状况,并且关注到由于 kubelet device manager 的启动时间晚于 NVI…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...

未授权访问事件频发,我们应当如何应对?

在当下&#xff0c;数据已成为企业和组织的核心资产&#xff0c;是推动业务发展、决策制定以及创新的关键驱动力。然而&#xff0c;未授权访问这一隐匿的安全威胁&#xff0c;正如同高悬的达摩克利斯之剑&#xff0c;时刻威胁着数据的安全&#xff0c;一旦触发&#xff0c;便可…...

python可视化:俄乌战争时间线关键节点与深层原因

俄乌战争时间线可视化分析&#xff1a;关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一&#xff0c;自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具&#xff0c;系统分析这场战争的时间线、关键节点及其背后的深层原因&#xff0c;全面…...

React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)

React React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么&#xff0c;Fiber架构&#xff0c;面试向面试官介绍&#xff0c;详细解释 用户: React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么&#xff0c;Fiber架构&#xff0c;面试向面试官介绍&#x…...

python数据结构和算法(1)

数据结构和算法简介 数据结构&#xff1a;存储和组织数据的方式&#xff0c;决定了数据的存储方式和访问方式。 算法&#xff1a;解决问题的思维、步骤和方法。 程序 数据结构 算法 算法 算法的独立性 算法是独立存在的一种解决问题的方法和思想&#xff0c;对于算法而言&a…...

docker容器互联

1.docker可以通过网路访问 2.docker允许映射容器内应用的服务端口到本地宿主主机 3.互联机制实现多个容器间通过容器名来快速访问 一 、端口映射实现容器访问 1.从外部访问容器应用 我们先把之前的删掉吧&#xff08;如果不删的话&#xff0c;容器就提不起来&#xff0c;因…...