高斯分布归一化、期望、二阶矩、方差推导证明

这篇博客详细介绍了高斯分布的归一化、期望和方差的推导过程。作者在研究深度学习时意识到微积分的重要性,并尝试自己推导高斯分布的数学性质。归一化通过极坐标转换得以证明,期望的求解相对直接,而二阶矩的推导涉及Gamma函数。方差的计算则利用一阶矩和二阶矩。博客最后提到,作者计划完成更全面的公式推导笔记。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

写在前面的唠叨:

归一化推导证明:

期望(一阶矩)推导证明:

二阶矩推导证明:

方差推导证明:


写在前面的唠叨:

最近这段时间一直在研究深度学习之类的东西,虽然如今对几种常见的神经网络都有了很好的了解,用起来也比较顺手,但是越学也越觉得瓶颈越来越明显了,最大的问题觉得还是数学基础不行,学习那些常见的模型已经把线性代数的知识捡的差不多了,而到了想自己设计模型的时候,才忽然发现微积分也是十分重要的,而这两年我都还给老师了呀T_T。所以把PRML这本书又翻了出来,推导一下里面的公式。

然而刚看到高斯分布里面的方差推导就抽了我一嘴巴,去网上查了查发现这部分推导大家写的都挺乱的,于是自己总结了一下,留作记录,省的以后在看的时候到处乱查,重新推……

 


归一化推导证明:

证明归一化,即证明:

$$ \begin{aligned} \int_{-\infty }^{+\infty}N(x|\mu, \sigma^2)dx &=1 \end{aligned} $$

 

首先我们将其展开:

$$ \begin{aligned} \int_{-\infty }^{+\infty}N(x|\mu, \sigma^2)dx &=& \int_{-\infty }^{+\infty}\tfrac{1}{\sqrt{2\pi}\sigma }exp\{-\tfrac{1}{2\sigma^2}(x-\mu)^2\}dx \\ &=& \tfrac{1}{\sqrt{2\pi}\sigma }\int_{-\infty }^{+\infty}exp\{-\tfrac{1}{2\sigma^2}(x-\mu)^2\}dx \end{aligned} $$

 

这里将 x-\mu替换掉有:

\int_{-\infty }^{+\infty}N(x|\mu, \sigma^2)dx = \tfrac{1}{\sqrt{2\pi}\sigma }\int_{-\infty }^{+\infty}exp\{-\tfrac{1}{2\sigma^2}x^2\}dx

 

这里假设:

$$ \begin{aligned} I &= \int_{-\infty }^{+\infty}exp\{-\tfrac{1}{2\sigma^2}x^2\}dx \end{aligned} $$

这个积分直接计算比较困难,但是可以绕个弯,采用极坐标的方式计算,首先我们将其求其平方:

$$ \begin{aligned} I^2 & = \int_{-\infty }^{+\infty}\int_{-\infty }^{+\infty}exp\{-\tfrac{1}{2\sigma^2}(x^2 + y^2)\}dxdy \end{aligned} $$

在将其转化为极坐标,令x = cos\theta r ,\ y = sin\theta r可得:

<think>嗯,用户想在MATLAB中生成或处理不对称的高斯分布,需要示例代码和参数设置。首先,我得回忆一下什么是不对称高斯分布。通常的高斯分布是对称的,但不对称的话,可能在左右两侧有不同的标准差或者衰减速率。常见的实现方法可能有两种:一种是分段函数,左右用不同的标准差;另一种是使用指数函数的参数调整,比如在指数部分引入不同的参数来控制左右形状。 然后,我需要考虑如何在MATLAB中实现。分段函数的话,可以用逻辑索引将数据分成左右两部分,分别应用不同的标准差计算。或者用参数化的指数函数,比如修改指数项的系数,使得左右不对称。另外,可能还需要生成符合这种分布的随机数,这时候可能需要使用逆变换法或者接受-拒绝采样等方法,但用户可能更倾向于现成的函数或简单的方法。 接下来,参数设置部分。用户需要知道如何调整参数来控制不对称性,比如左右的标准差,或者不同的衰减系数。可能需要定义中心位置(均值)、左侧参数、右侧参数等。例如,在分段模型中,左右的标准差sigma_left和sigma_right;在指数模型中,可能有alpha和beta参数分别控制左右边的形状。 然后,示例代码部分。需要写出生成概率密度函数的代码,可能还要画出图像来验证。同时,生成随机数可能需要一些技巧,比如分左右两部分生成,然后合并。比如,用randn生成标准正态分布的随机数,然后根据正负分别用不同的标准差缩放,再加上均值。 可能遇到的问题包括:如何确保概率密度函数的积分正确,如何处理分界点处的连续性,以及生成随机数时的正确分布。需要检查生成的PDF是否在分界点处连续,或者是否需要归一化处理。此外,用户可能需要应用这种分布到实际数据处理中,比如滤波或拟合,但问题中主要关注生成和处理,所以示例代码可能需要包括绘图和参数调整部分。 参考站内的引用,比如引用[3]和[4]提到了高斯滤波器的实现,可能相关的参数调整方法可以借鉴,但不对称高斯可能需要不同的处理。用户可能需要自定义函数,而不是使用内置的高斯函数,因为MATLAB的标准函数可能只支持对称高斯。 总结步骤:1. 定义不对称高斯分布的数学模型;2. 在MATLAB中实现该模型的概率密度函数;3. 生成符合该分布的随机数;4. 提供参数设置的建议;5. 示例代码和可视化。 现在需要验证这些思路是否正确。例如,分段高斯模型是否可行,生成的随机数是否符合预期。可能需要查阅相关资料确认不对称高斯的常见实现方式,比如文献中是否提到过类似的模型。或者是否存在其他更标准的方法,比如使用偏态正态分布(Skew Normal Distribution),但用户可能更希望自定义不对称的高斯,而不是使用现有的统计工具箱中的偏态分布。 如果使用偏态正态分布,MATLAB的统计和机器学习工具箱中有skewness参数,但用户可能没有该工具箱,或者希望自己实现。因此,可能需要两种方法:自定义分段高斯,或者使用指数调整的方法。这里选择分段的方法可能更直观,容易解释。 另外,生成随机数时,分左右部分生成,比如对于负值和正值分别应用不同的标准差,然后平移。例如,生成标准正态随机数z,然后x = mu + (z < 0) * sigma_left * z + (z >= 0) * sigma_right * z。这样是否正确?可能需要验证。比如,当z是标准正态分布时,sigma_left*z的方差是sigma_left²,所以左侧的数据会被缩放,而右侧同理。这样得到的分布可能在mu处有一个峰值,但左右的标准差不同,从而实现不对称。 不过,这样的分布可能不是严格意义上的概率密度函数,因为合并后的分布可能需要重新归一化。例如,总积分应该是1,所以需要调整系数。因此,在定义概率密度函数时,需要考虑到左右两部分的权重,使得整体积分为1。例如,左侧的积分和右侧的积分之和为1,所以需要将两部分的概率密度函数分别乘以适当的权重系数。 例如,假设在x < mu时使用标准差sigma_left,x >= mu时使用sigma_right,那么整个分布的概率密度函数应该是: f(x) = (1/(sqrt(2π)*(sigma_left + sigma_right)/2)) * exp(-(x-mu)^2/(2*sigma_left^2)) ) 当x < mu 类似的,右侧也是这样。但这样可能不太正确,因为原来的正态分布左右各占0.5的概率,所以可能需要调整权重。或者,将整个分布视为左右两个半正态分布的组合,各自标准差不同,但权重相同。这样,PDF可以写成: f(x) = (1/(sqrt(2π)*(sigma_left + sigma_right))) * [sigma_right/sigma_left * exp(-(x-mu)^2/(2*sigma_left^2)) when x < mu + sigma_left/sigma_right * exp(-(x-mu)^2/(2*sigma_right^2)) when x >= mu ] 不过这可能复杂,需要进一步推导。或者更简单的方式是,将左右两半的高斯分布各占一半的概率质量,但缩放他们的标准差,这样PDF为: 当x < mu时,f(x) = (1/(sqrt(2π) sigma_left)) exp(-(x-mu)^2/(2 sigma_left^2)) ) * 0.5 当x >= mu时,f(x) = (1/(sqrt(2π) sigma_right)) exp(-(x-mu)^2/(2 sigma_right^2)) ) * 0.5 这样整个积分就是0.5 + 0.5 = 1。这可能更合理,但需要验证。 例如,在这种情况下,生成随机数的方法是,首先生成一个均匀随机数决定左右哪一边,然后生成对应半边的半正态分布。例如,用u=rand,如果u<0.5,则生成左侧的半正态,否则生成右侧的。半正态分布可以通过取绝对值的方法生成,比如生成标准正态变量z,然后取绝对值,再乘以sigma_left,得到x = mu - sigma_left*abs(z)。右侧则x = mu + sigma_right*abs(z)。这样得到的分布是正确的,因为每个半边占0.5的概率,并且各自的PDF是相应的半高斯。 所以,正确的生成方法可能是这样的。然后,对应的PDF函数需要根据x的位置来计算相应的值。 因此,在MATLAB代码中,可以这样实现: 生成随机数: n_samples = 1000; mu = 0; sigma_left = 1; sigma_right = 3; % 生成决定左右部分的随机标志 flag = rand(n_samples, 1) < 0.5; % 生成左侧数据 left_samples = mu - sigma_left * abs(randn(sum(flag),1)); % 生成右侧数据 right_samples = mu + sigma_right * abs(randn(n_samples - sum(flag),1)); % 合并 samples = [left_samples; right_samples]; 然后,绘制直方图,并比较理论PDF。 理论PDF的代码: x = linspace(mu - 5*sigma_left, mu +5*sigma_right, 1000); pdf = zeros(size(x)); left_mask = x < mu; right_mask = x >= mu; % 左侧的PDF:0.5 * 正态分布的密度,但只考虑左侧 pdf(left_mask) = 0.5 * 1/(sigma_left*sqrt(2*pi)) .* exp(-(x(left_mask) - mu).^2/(2*sigma_left^2)); pdf(right_mask) = 0.5 * 1/(sigma_right*sqrt(2*pi)) .* exp(-(x(right_mask) - mu).^2/(2*sigma_right^2)); 这样绘制出来的PDF应该和样本的直方图吻合。 现在,用户的问题是如何在MATLAB中实现这个。所以,示例代码需要包括生成PDF和生成随机数的方法,以及可能的参数设置,比如mu、sigma_left、sigma_right。 另外,还可以考虑另一种方法,通过修改指数项的参数,例如使用不同的alpha和beta参数来控制左右衰减速率,比如: f(x) = A * exp( - (x - mu)^2 / (2*sigma^2 + 2*alpha*(x - mu)) ) 但这种方法可能更复杂,并且需要确保分母不为零,或者参数调整导致不对称。可能不如分段方法直观。 因此,可能更推荐使用分段的方法,因为它更简单易懂,参数意义明确。 总结步骤: 1. 定义参数mu(均值)、sigma_left(左侧标准差)、sigma_right(右侧标准差)。 2. 生成随机数时,随机选择左侧或右侧,生成对应的半正态分布样本。 3. 计算PDF时,根据x的位置,分别计算左右两侧的密度,并乘以0.5的权重。 现在需要编写MATLAB代码实现这些步骤,并测试是否正确。 例如,示例代码: mu = 0; sigma_left = 1; sigma_right = 3; n_samples = 1e5; % 生成样本 flag = rand(n_samples, 1) < 0.5; left_samples = mu - sigma_left * abs(randn(sum(flag), 1)); right_samples = mu + sigma_right * abs(randn(n_samples - sum(flag), 1)); samples = [left_samples; right_samples]; % 计算理论PDF x = linspace(mu - 5*sigma_left, mu +5*sigma_right, 1000); pdf = zeros(size(x)); left_idx = x < mu; right_idx = x >= mu; pdf(left_idx) = 0.5 * normpdf(x(left_idx), mu, sigma_left); pdf(right_idx) = 0.5 * normpdf(x(right_idx), mu, sigma_right); % 绘制直方图和理论曲线 histogram(samples, 'Normalization', 'pdf', 'BinWidth', 0.2); hold on; plot(x, pdf, 'r', 'LineWidth', 2); xlabel('x'); ylabel('Probability Density'); legend('样本直方图', '理论PDF'); 运行这段代码应该可以看到直方图与理论曲线吻合,验证正确性。 参数设置方面,用户可以调整mu、sigma_left和sigma_right来控制分布的位置和不对称程度。例如,sigma_left < sigma_right会导致右侧分布更分散,左侧更集中。 另外,可能还需要考虑另一种不对称高斯模型,比如两个半高斯分布拼接,但各自的权重不一定相等。例如,左侧的概率权重为p,右侧为1-p。这时候参数需要包括p,sigma_left,sigma_right。用户可能需要更灵活的控制,但原问题可能只需要基础的左右标准差不同的情况。 综上,回答应包括分段高斯模型的实现方法,生成随机数的代码,理论PDF的计算,参数说明,以及示例结果。此外,可能引用相关的高斯处理内容,如引用[3]提到的参数选择的重要性,或者引用[4]中的滤波方法,但可能不直接相关,所以可能不需要强制引用,但如果有合适的地方可以自然引入。 可能用户的应用场景包括信号处理、数据拟合等,需要不对称分布的情况。例如,某些物理现象或金融数据可能呈现不对称的分布形态,此时标准高斯无法描述,需要自定义模型。 最后,生成相关问题,可能包括如何拟合这种分布、如何应用于滤波处理,或者如何扩展到多维情况等。</think>在MATLAB中实现不对称高斯分布,可以通过分段组合左右不同标准差的高斯分布来实现。以下是具体方法和示例代码: --- ### **实现方法** 1. **数学模型** 不对称高斯分布的密度函数可表示为: $$ f(x) = \begin{cases} \frac{1}{2\sigma_L\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma_L^2}} & x < \mu, \\ \frac{1}{2\sigma_R\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma_R^2}} & x \ge \mu, \end{cases} $$ 其中$\mu$为中心位置,$\sigma_L$和$\sigma_R$分别为左、右半部分的标准差。 2. **随机数生成** 生成标准正态分布随机数,根据正负号分别用$\sigma_L$和$\sigma_R$缩放,再平移到$\mu$位置。 --- ### **MATLAB示例代码** #### 1. 生成不对称高斯分布随机数 ```matlab mu = 0; % 均值 sigma_left = 1; % 左侧标准差 sigma_right = 3;% 右侧标准差 n_samples = 1e5;% 样本数 % 生成左右两部分的随机数 flag = rand(n_samples, 1) < 0.5; % 50%概率选择左侧 left_samples = mu - sigma_left * abs(randn(sum(flag), 1)); right_samples = mu + sigma_right * abs(randn(n_samples - sum(flag), 1)); samples = [left_samples; right_samples]; ``` #### 2. 绘制概率密度函数(PDF) ```matlab x = linspace(mu - 5*sigma_left, mu + 5*sigma_right, 1000); pdf = zeros(size(x)); % 计算左右两侧的密度 left_mask = x < mu; right_mask = x >= mu; pdf(left_mask) = 0.5 * normpdf(x(left_mask), mu, sigma_left); pdf(right_mask) = 0.5 * normpdf(x(right_mask), mu, sigma_right); % 绘制直方图与理论曲线 figure; histogram(samples, 'Normalization', 'pdf', 'BinWidth', 0.2); hold on; plot(x, pdf, 'r', 'LineWidth', 2); xlabel('x'); ylabel('Probability Density'); legend('样本直方图', '理论PDF'); ``` --- ### **参数设置** - **$\mu$**: 控制分布的中心位置,对应峰值点。 - **$\sigma_L$和$\sigma_R$**: 分别控制左、右两侧的扩散程度。$\sigma_L < \sigma_R$时右侧更分散。 - **权重调整**: 若需左右概率不对称,可修改`flag`的阈值(如`0.3`代替`0.5`)并调整PDF中的权重系数。 --- ### **应用场景** - **信号处理**: 对非对称噪声建模[^3]。 - **数据分析**: 拟合具有偏态特征的实际数据。 - **图像处理**: 自定义滤波器响应(如非对称高斯滤波)[^4]。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值