首页 > 其他分享 >np.random.multivariate_normal函数

np.random.multivariate_normal函数

时间:2024-10-26 18:45:42浏览次数:8  
标签:multivariate cov 维度 random 矩阵 生成 协方差 np

np.random.multivariate_normal 是 NumPy 中生成多元正态分布随机样本的函数。它允许我们指定多个维度(变量)的均值和协方差矩阵,从而生成符合这些参数的随机样本。这个函数常用于模拟多维数据,特别是需要考虑变量间相关性的场景,比如机器学习中的数据生成。

函数语法

np.random.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8)

参数说明

  1. mean:一个 1 维数组,表示每个维度的均值。

    • 这是一个向量,长度为要生成的多元正态分布的维度数。每个元素代表对应维度的均值。
  2. cov:协方差矩阵(2 维数组),表示变量之间的相关性。

    • 这是一个对称的矩阵,形状为 ( (n \times n) ),其中 ( n ) 是维度数。矩阵中的对角线元素是各个维度的方差,非对角线元素是维度之间的协方差。
  3. size:生成样本的数量(默认为 None)。

    • 如果指定为 None,返回单个样本;如果指定为整数,则生成 size 个样本。
  4. check_valid:用于检查协方差矩阵的参数,默认值为 'warn'

    • 'warn':当协方差矩阵无效时,会发出警告。
    • 'raise':当协方差矩阵无效时,会抛出错误。
    • 'ignore':忽略无效性检查。
  5. tol:用于判断协方差矩阵有效性的阈值。

返回值

返回一个遵循给定均值和协方差的随机样本。如果 size 参数为 None,返回形状为 (n,) 的 1 维数组;如果指定 size 为整数 m,返回形状为 (m, n) 的二维数组。

示例 1:生成二维正态分布的样本

假设我们希望生成两个维度的正态分布样本,均值分别为 ( [0, 2] ),协方差矩阵为:
cov = [ 1 0.8 0.8 1 ] \text{cov} = \begin{bmatrix} 1 & 0.8 \\ 0.8 & 1 \end{bmatrix} cov=[10.8​0.81​]

这表示两个变量之间的相关性很强,协方差为 0.8。

import numpy as np
import matplotlib.pyplot as plt

# 均值向量和协方差矩阵
mean = [0, 2]
cov = [[1, 0.8], [0.8, 1]]

# 生成 500 个样本
data = np.random.multivariate_normal(mean, cov, size=500)

# 绘制生成的样本点
plt.scatter(data[:, 0], data[:, 1], alpha=0.5)
plt.title('Samples from Multivariate Normal Distribution')
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()

示例 2:生成三维正态分布的样本

如果我们需要生成三维的正态分布,可以使用类似的方法,设定三维的均值和 3x3 的协方差矩阵。

mean = [1, 2, 3]
cov = [[1, 0.5, 0.2], [0.5, 1, 0.3], [0.2, 0.3, 1]]

# 生成 1000 个样本
data = np.random.multivariate_normal(mean, cov, size=1000)

# 查看生成的前几个样本
print(data[:5])

示例 3:检查协方差矩阵的有效性

协方差矩阵必须是正定的,这意味着它的特征值必须大于 0。如果协方差矩阵无效(比如不是对称的或者不是正定的),函数可能会发出警告或错误信息。

mean = [0, 2]
invalid_cov = [[1, 2], [3, 1]]  # 非对称协方差矩阵

# 使用无效协方差矩阵,会得到警告或错误
data = np.random.multivariate_normal(mean, invalid_cov, size=100)

你可以通过 check_valid 参数控制这种情况如何处理:

data = np.random.multivariate_normal(mean, invalid_cov, size=100, check_valid='raise')

生成数据的几何解释

在二维情况下,np.random.multivariate_normal 生成的数据分布在一个椭圆形的区域。均值决定了椭圆的中心位置,协方差矩阵决定了椭圆的形状和方向:

  • 方差:协方差矩阵的对角线元素是每个维度的方差,控制了椭圆在该维度方向的扩展程度。方差越大,椭圆在该维度方向上越“宽”。
  • 协方差:非对角线元素是协方差,控制了不同维度之间的关联性。协方差越大,两个维度的相互关系越强,椭圆的形状越倾斜。

总结

np.random.multivariate_normal 是一个强大的工具,用于生成符合指定均值和协方差的多元正态分布样本。它在模拟多维数据集、生成具有相关性的样本时特别有用,在机器学习和统计建模中经常用来生成测试数据。

标签:multivariate,cov,维度,random,矩阵,生成,协方差,np
From: https://blog.csdn.net/u013172930/article/details/143257726

相关文章

  • XLSX.js解析Excel中的数据,<input type='file' />控件中
    在页面中添加一个:<inputtype="file"class="txt"style="width:300px;height:25px;line-height:25px;color:#000000;"id="file01"/>在页面中添加javascript代码:document.getElementById("file01").addEventLis......
  • npoi读取word 内容控件
    voidMain(){ //打开word文件 XWPFDocumentdocument=null; try { using(FileStreamstream=File.OpenRead(@"15.docx")) { document=newXWPFDocument(stream); } CT_Bodybody=document.Document.body; varcontrols=body.getValueFrom......
  • VulnHub-Brainpan1 靶机笔记
    Brainpan1靶机笔记概述靶机地址:https://vulnhub.com/entry/brainpan-1,51/#download这台靶机是很好的缓冲区溢出漏洞利用的练习靶机,涉及到逆向和缓冲区溢出漏洞挖掘的一些知识。一、nmap扫描1)端口扫描nmap-sT--min-rate10000-p--oports192.168.11.12Nmapscanre......
  • 包管理工具-npm-yarn-cnpm-npx-pnpm
    代码共享方案◼我们已经学习了在JavaScript中可以通过模块化的方式将代码划分成一个个小的结构:在以后的开发中我们就可以通过模块化的方式来封装自己的代码,并且封装成一个工具;这个工具我们可以让同事通过导入的方式来使用,甚至你可以分享给世界各地的程序员来使用......
  • 66openpyxl的遍历读写操作(常用于数据批量读出来和写进去)
     importopenpyxlfromopenpyxlimportWorkbook#常用于数据批量读出来和写进去#往表格写入操作defcreate_wb():#创建一个新的工作簿wb=Workbook()#选择默认的工作表ws=wb.active#假设这是你要写入的数据,4行4列data=[......
  • 题解:SP25334 NPC2015A - Eefun Guessing Words
    涉及知识点:字符串处理。解题思路记录每个字符出现的第$1$个位置和最后$1$个位置,询问时比较大小即可。代码#include<bits/stdc++.h>//#defineintlonglong#definell__int128#definedbdouble#defineldblongdouble#definevovoid#defineendl'\n'#defin......
  • 微信小程序input框onfocus获取焦点的延迟问题
    今天敲代码,原本想实现的效果是:input框有placeholder,点击input,placeholder清空。好比上图,点击输入框,框内的“请输入四位XX”就会消失。原本想着是,给input框添加@focus,当input框获取到焦点的时候,清空placeholder。但是实际运行时候发现,placeholder清空......
  • 【旧文重发】MATLAB 通过函数封装一劳永逸地解决线性规划与运输问题的linprog的标准化
    这篇随笔原本是我上实验课时候的笔记,2023年7月曾经在CSDN平台上发布过。今天恰好有朋友跟我问起MATLAB自带的求解器输入很不直观的问题,我打开这个文章发给他的时候发现自己一年前写的LaTeX公式依托答辩,所以重打了一遍。再加上由于CSDN平台的持续摆烂,终于是用不下去......
  • window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)抄的,因为有用只为记录
    一、卸载node如果你已经安装了node,那么你需要先卸载node(不然安装nvm可能会失败),如果你没有安装那直接跳过这一步到下一步。打开控制面板->打开程序和功能->右上角搜索输入node->右键卸载为了确保彻底删除node在看看你的node安装目录中还有没有node文件夹,有的话一起删除。再......
  • 牛马阅读《SpFormer: Spatio-Temporal Modeling for Scanpaths with Transformer》
    Abstract        saccadicscanpath(扫视路径)是人类视觉行为的数据表示,在多个领域受到了广泛关注。扫视路径是一种复杂的眼动追踪数据形式,包括注视位置序列和注视持续时间,结合了图像信息。然而,以前的方法通常面临注视特征的空间错位问题以及关键时间数据的丢失(包括时间......