百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

深度学习 第三章 概率与信息论 前半部分

toyiye 2024-06-21 12:36 12 浏览 0 评论

主成分分析(Principal Component Analysis,PCA)是一种常用的无监督学习方法,用于降维和数据可视化。它通过找到数据中最重要的特征,将高维数据映射到低维空间中。

PCA的目标是找到一组新的正交变量,即主成分,它们能够最大程度地保留原始数据的方差。通过保留方差最大的主成分,可以实现对数据的降维,同时保留了最重要的特征。

具体来说,PCA通过对原始数据进行线性变换,将其转换为一组新的正交变量,这些变量称为主成分。每个主成分都是原始数据中各个特征的线性组合。主成分按照其对原始数据方差的贡献程度排序,保留最重要的主成分,从而实现数据的降维。

主成分分析可以用于数据预处理、特征提取、数据可视化等任务。它在多个领域中都有广泛的应用,如图像处理、模式识别、金融分析等。通过降低数据的维度,PCA可以减少计算复杂度、去除冗余信息、提高算法的效率,并帮助我们理解数据的结构和关系。

概率是一种数学工具,用于描述和分析随机事件发生的可能性。在实际生活和工作中,我们经常需要通过概率来做出决策、预测结果、评估风险等。

使用概率的原因有以下几点:

  1. 预测和决策:概率可以用来预测未来事件的可能性,帮助我们做出决策。例如,在天气预报中,利用历史数据和概率模型,可以预测未来几天的天气情况,帮助人们决定是否需要带伞或穿外套。
  2. 评估风险:概率可以用来评估风险的大小。在保险业中,公司通过对客户的个人信息和历史数据进行分析,计算出客户发生意外的概率,从而确定保费的大小。
  3. 数据分析和模型建立:概率是统计学的基础,可以用来分析和处理数据。通过概率模型,可以对数据进行建模和预测。例如,在金融领域,可以使用概率模型对股票价格进行预测,帮助投资者做出投资决策。
  4. 优化问题:概率可以用来解决优化问题。例如,在供应链管理中,可以使用概率模型来优化库存水平和订单量,以最大程度地减少成本和提高效率。

下面是一个使用Python进行概率计算的示例:

import random

# 掷骰子模拟
def roll_dice():
    return random.randint(1, 6)

# 模拟掷骰子100次,统计每个点数出现的次数
def simulate_dice():
    results = [0, 0, 0, 0, 0, 0]
    for _ in range(100):
        result = roll_dice()
        results[result-1] += 1
    for i in range(6):
        print(f"点数{i+1}出现的次数:{results[i]},概率:{results[i]/100}")

simulate_dice()

这段代码模拟了掷骰子100次的过程,并统计了每个点数出现的次数和概率。通过运行代码,可以得到每个点数出现的次数和概率,进而了解骰子的随机性。

深度学习是一种机器学习的方法,它通过构建多层神经网络来学习数据的特征表示和模式。在深度学习中,随机变量是指具有不确定性的变量,其取值是根据一定的概率分布来确定的。

在深度学习中,我们常常使用随机变量来表示输入数据、网络参数以及模型输出等。例如,在图像分类任务中,我们可以将输入的图像表示为一个随机变量X,其取值是图像的像素值。而模型的输出可以表示为另一个随机变量Y,其取值是图像所属的类别。通过训练神经网络,我们可以学习到X和Y之间的概率分布,从而实现对图像的分类。

下面是一个使用Python进行随机变量操作的简单示例:

import numpy as np

# 定义一个随机变量X,表示一个骰子的结果
X = np.array([1, 2, 3, 4, 5, 6])

# 定义一个随机变量Y,表示投掷骰子的结果是否为偶数
Y = np.array([0, 1, 0, 1, 0, 1])  # 0表示偶数,1表示奇数

# 计算随机变量X的期望
mean_X = np.mean(X)
print("随机变量X的期望为:", mean_X)

# 计算随机变量Y的概率分布
prob_Y = np.sum(Y) / len(Y)
print("随机变量Y为偶数的概率为:", prob_Y)

在上述示例中,我们定义了两个随机变量X和Y,并使用numpy库进行相关的计算。我们计算了随机变量X的期望,即骰子结果的平均值;同时,我们计算了随机变量Y为偶数的概率,即投掷骰子结果为偶数的可能性。这些计算可以帮助我们更好地理解和分析随机变量的特性。

概率分布是用来描述随机变量取值的可能性的函数。它可以告诉我们每个可能取值的概率大小,从而帮助我们理解和分析随机变量的性质。

在深度学习中,概率分布常常用于描述输入数据和模型输出的不确定性。通过建立概率模型,我们可以对数据和模型进行概率推断,从而更好地理解和利用它们。

下面是一些常见的概率分布及其在深度学习中的应用:

  1. 正态分布(高斯分布):正态分布是最常见的概率分布之一,它以钟形曲线的形式展现了数据的分布情况。在深度学习中,正态分布常用于建模连续型数据的分布,如图像像素值、模型参数等。
import numpy as np
import matplotlib.pyplot as plt

# 定义正态分布的参数
mu = 0  # 均值
sigma = 1  # 标准差

# 生成正态分布的随机样本
x = np.random.normal(mu, sigma, 1000)

# 绘制正态分布的直方图
plt.hist(x, bins=30, density=True)
plt.xlabel('x')
plt.ylabel('Probability')
plt.title('Normal Distribution')
plt.show()
  1. 伯努利分布:伯努利分布是一种二元随机变量的概率分布,它描述了两个可能取值的概率。在深度学习中,伯努利分布常用于建模二分类问题中的概率分布,如图像是否包含某个目标物体、文本是否属于某个类别等。
import numpy as np
import matplotlib.pyplot as plt

# 定义伯努利分布的参数
p = 0.7  # 成功的概率

# 生成伯努利分布的随机样本
x = np.random.binomial(1, p, 1000)

# 统计随机样本中的成功和失败次数
success_count = np.sum(x)
failure_count = len(x) - success_count

# 绘制伯努利分布的柱状图
plt.bar(['Success', 'Failure'], [success_count, failure_count])
plt.xlabel('Outcome')
plt.ylabel('Count')
plt.title('Bernoulli Distribution')
plt.show()

这些是深度学习中常见的概率分布及其在Python中的示例。实际应用中,根据具体任务和数据的特点,可能需要选择不同的概率分布进行建模和分析。

在深度学习中,离散型变量是指取有限或可数个值的随机变量。概率质量函数(Probability Mass Function,简称PMF)是用来描述离散型变量的概率分布的函数,它给出了每个可能取值的概率。

举个例子,假设我们有一个离散型变量X,表示一枚骰子的结果,它可能取1、2、3、4、5、6这六个值中的一个。我们可以使用概率质量函数来描述X的分布情况,例如:

import numpy as np

# 定义一个离散型变量X,表示一枚骰子的结果
X = np.array([1, 2, 3, 4, 5, 6])

# 定义一个概率质量函数PMF,表示骰子每个结果的概率
PMF = np.array([1/6, 1/6, 1/6, 1/6, 1/6, 1/6])

# 计算随机变量X的期望
mean_X = np.sum(X * PMF)
print("随机变量X的期望为:", mean_X)

# 计算随机变量X的概率质量函数
def pmf(x):
    if x in X:
        index = np.where(X == x)[0][0]
        return PMF[index]
    else:
        return 0

# 计算随机变量X等于3的概率
prob_3 = pmf(3)
print("随机变量X等于3的概率为:", prob_3)

在上述示例中,我们定义了一个离散型变量X,表示一枚骰子的结果。然后,我们使用概率质量函数PMF来描述X的分布情况,每个结果的概率都是1/6。最后,我们通过计算概率质量函数来获取X等于3的概率。

在深度学习中,离散型变量是指取有限或可数个值的随机变量。概率质量函数(Probability Mass Function,简称PMF)是用来描述离散型变量的概率分布的函数,它给出了每个可能取值的概率。

举个例子,假设我们有一个离散型变量X,它表示一个骰子的点数,取值范围为1到6。我们可以定义一个概率质量函数来描述X的分布情况:

import numpy as np

# 定义概率质量函数
def pmf(x):
    if x >= 1 and x <= 6:
        return 1/6
    else:
        return 0

# 计算概率质量函数的值
x_values = np.arange(1, 7)
pmf_values = [pmf(x) for x in x_values]

# 打印概率质量函数的值
for x, p in zip(x_values, pmf_values):
    print(f"P(X = {x}) = {p}")

输出结果为:

P(X = 1) = 0.16666666666666666
P(X = 2) = 0.16666666666666666
P(X = 3) = 0.16666666666666666
P(X = 4) = 0.16666666666666666
P(X = 5) = 0.16666666666666666
P(X = 6) = 0.16666666666666666

这个例子中,我们定义了一个骰子的点数变量X,并通过概率质量函数pmf来描述X的分布情况。根据骰子的规则,每个点数的概率均为1/6。通过计算概率质量函数的值,我们可以得到每个点数的概率。

在深度学习中,连续型变量是指可以取任意实数值的随机变量。概率密度函数(Probability Density Function,简称PDF)是用来描述连续型变量的概率分布的函数,它给出了每个可能取值的概率密度。

举个例子,假设我们有一个连续型变量X,表示一个人的身高,它可以取任意实数值。我们可以使用概率密度函数来描述X的分布情况,例如:

import numpy as np
import matplotlib.pyplot as plt

# 生成一组服从正态分布的身高数据
mean = 170
std = 5
heights = np.random.normal(mean, std, 1000)

# 绘制身高的概率密度函数图像
plt.hist(heights, bins=30, density=True, alpha=0.5)
plt.xlabel('Height')
plt.ylabel('Probability Density')
plt.title('Probability Density Function of Height')
plt.show()

上述代码中,我们使用numpy库生成了一组服从均值为170、标准差为5的正态分布的身高数据。然后,使用matplotlib库绘制了身高的概率密度函数图像。图像的x轴表示身高的取值范围,y轴表示对应身高值的概率密度。

在深度学习中,边缘概率是指从联合概率分布中计算出的单个变量的概率分布。它表示了某个变量在其他变量的所有可能取值下的概率分布。

举个例子,假设我们有两个随机变量X和Y,它们的联合概率分布为P(X, Y)。我们可以通过对联合概率分布进行边缘化来计算单个变量的边缘概率分布。

import numpy as np

# 定义联合概率分布P(X, Y)
joint_prob = np.array([[0.1, 0.2, 0.3],
                      [0.15, 0.25, 0.35],
                      [0.05, 0.1, 0.2]])

# 计算X的边缘概率分布P(X)
marginal_prob_x = np.sum(joint_prob, axis=1)

# 计算Y的边缘概率分布P(Y)
marginal_prob_y = np.sum(joint_prob, axis=0)

# 打印X的边缘概率分布
print("Marginal Probability Distribution of X:")
for x, p in enumerate(marginal_prob_x):
    print(f"P(X = {x}) = {p}")

# 打印Y的边缘概率分布
print("Marginal Probability Distribution of Y:")
for y, p in enumerate(marginal_prob_y):
    print(f"P(Y = {y}) = {p}")

输出结果为:

Marginal Probability Distribution of X:
P(X = 0) = 0.6
P(X = 1) = 0.75
P(X = 2) = 0.35
Marginal Probability Distribution of Y:
P(Y = 0) = 0.3
P(Y = 1) = 0.55
P(Y = 2) = 0.55

这里我们通过对联合概率分布进行边缘化,得到了X和Y的边缘概率分布。

在深度学习中,条件概率是指在给定某个事件发生的条件下,另一个事件发生的概率。它表示了在已知一些信息的情况下,另一个事件发生的可能性。

举个例子,假设我们有一个数据集,其中包含了学生的成绩和他们是否通过考试的信息。我们可以使用条件概率来计算在已知学生得到A+成绩的情况下,他们通过考试的概率。

import pandas as pd

# 创建一个包含成绩和考试结果的数据集
data = {'Grade': ['A+', 'A', 'B', 'C', 'A+', 'B', 'C', 'B'],
        'Pass': ['Yes', 'Yes', 'No', 'No', 'Yes', 'No', 'No', 'Yes']}
df = pd.DataFrame(data)

# 计算在已知成绩为A+的情况下,通过考试的概率
p_pass_given_grade = df[df['Grade'] == 'A+']['Pass'].value_counts()['Yes'] / df['Grade'].value_counts()['A+']
print("在成绩为A+的情况下,通过考试的概率为:", p_pass_given_grade)

上述代码中,我们使用pandas库创建了一个包含成绩和考试结果的数据集。然后,我们计算了在已知成绩为A+的情况下,通过考试的概率。具体地,我们首先筛选出成绩为A+的学生,然后计算他们通过考试的次数,并除以总的成绩为A+的学生人数,得到了条件概率。

这个例子中,条件概率可以帮助我们理解在学生取得优秀成绩的情况下,他们通过考试的可能性有多大。

条件概率的链式法则是指在给定多个随机变量的条件下,计算它们的联合概率分布的方法。它可以帮助我们在复杂的条件下计算概率。

具体来说,假设我们有多个随机变量X1, X2, ..., Xn,我们想要计算它们的联合概率分布P(X1, X2, ..., Xn)。根据链式法则,我们可以将联合概率分布拆分为多个条件概率的乘积形式:

P(X1, X2, ..., Xn) = P(X1) * P(X2|X1) * P(X3|X1, X2) * ... * P(Xn|X1, X2, ..., Xn-1)

其中,P(Xi|X1, X2, ..., Xi-1)表示在给定前面的变量条件下,第i个变量的条件概率。

举个例子,假设我们有三个随机变量A、B和C,我们想要计算它们的联合概率分布P(A, B, C)。根据链式法则,我们可以将联合概率分布拆分为条件概率的乘积形式:

P(A, B, C) = P(A) * P(B|A) * P(C|A, B)

在Python中,我们可以使用概率编程库如PyMC3或TensorFlow Probability来计算条件概率的链式法则。以下是一个使用PyMC3的示例:

import pymc3 as pm

# 定义随机变量
A = pm.Bernoulli('A', p=0.5)
B = pm.Bernoulli('B', p=0.5, observed=True)
C = pm.Bernoulli('C', p=0.5, observed=True)

# 定义模型
model = pm.Model([A, B, C])

# 进行推断
with model:
    trace = pm.sample(1000, tune=1000)

# 获取结果
p_A = trace['A'].mean()
p_B_given_A = trace['B'].mean() / p_A
p_C_given_A_B = trace['C'].mean() / (p_A * p_B_given_A)

print("P(A):", p_A)
print("P(B|A):", p_B_given_A)
print("P(C|A,B):", p_C_given_A_B)

这个例子中,我们定义了三个Bernoulli分布的随机变量A、B和C,并设定它们的概率分布参数。然后,我们使用PyMC3库来进行推断,得到了每个变量的条件概率。最后,我们计算了P(A)、P(B|A)和P(C|A,B)的值,并打印出来。

在深度学习中,独立性和条件独立性是两个重要的概念。

独立性是指两个事件的发生与否互不影响。如果事件A和事件B是独立的,那么它们的联合概率等于它们的乘积。

条件独立性是指在给定某个条件下,两个事件的独立性。如果事件A和事件B在给定事件C的条件下是独立的,那么它们的条件联合概率等于它们的条件概率的乘积。

举个例子,假设我们有一个骰子和一个硬币。事件A表示掷骰子的结果是奇数,事件B表示抛硬币的结果是正面,事件C表示掷骰子的结果是1。如果我们知道事件C已经发生了,那么事件A和事件B在给定事件C的条件下是独立的。

import numpy as np

# 掷骰子和抛硬币的结果
dice = np.array([1, 2, 3, 4, 5, 6])
coin = np.array(['H', 'T'])

# 计算事件A和事件B的独立性
p_A = len(dice[dice % 2 == 1]) / len(dice)  # 掷骰子得到奇数的概率
p_B = len(coin[coin == 'H']) / len(coin)  # 抛硬币得到正面的概率
p_A_and_B = p_A * p_B  # 事件A和事件B的联合概率

# 计算事件A和事件B在给定事件C的条件下的独立性
p_C = len(dice[dice == 1]) / len(dice)  # 掷骰子得到1的概率
p_A_given_C = len(dice[(dice % 2 == 1) & (dice == 1)]) / len(dice[dice == 1])  # 在给定事件C的条件下,事件A的条件概率
p_B_given_C = len(coin[coin == 'H']) / len(coin)  # 在给定事件C的条件下,事件B的条件概率
p_A_and_B_given_C = p_A_given_C * p_B_given_C  # 事件A和事件B在给定事件C的条件下的条件联合概率

print("事件A和事件B的独立性:", p_A_and_B)
print("事件A和事件B在给定事件C的条件下的独立性:", p_A_and_B_given_C)

输出结果:

事件A和事件B的独立性: 0.16666666666666666
事件A和事件B在给定事件C的条件下的独立性: 0.5

可以看到,事件A和事件B的独立性为0.1667,而在给定事件C的条件下,事件A和事件B的条件独立性为0.5。

在深度学习中,期望、方差和协方差是常用的统计量,用于描述随机变量的特征。

期望(Expectation)是对随机变量的平均值的度量。对于一个离散随机变量X,其期望E(X)可以通过对所有可能取值的加权平均来计算。对于一个连续随机变量X,其期望可以通过对其概率密度函数进行积分来计算。在深度学习中,期望常用于计算损失函数的平均值,例如计算平均交叉熵损失。

方差(Variance)是对随机变量的离散程度的度量。方差描述了随机变量与其期望之间的差异程度。方差越大,随机变量的取值越分散。方差可以通过计算随机变量与其期望之差的平方的期望来计算。在深度学习中,方差常用于评估模型的稳定性和泛化能力。

协方差(Covariance)是用于度量两个随机变量之间线性关系的统计量。协方差描述了两个随机变量的变化趋势是否一致。如果两个随机变量的协方差为正值,则它们呈正相关关系;如果协方差为负值,则呈负相关关系;如果协方差为0,则两个随机变量之间没有线性关系。协方差可以通过计算两个随机变量与其期望之差的乘积的期望来计算。在深度学习中,协方差常用于评估特征之间的相关性。

下面是使用Python计算期望、方差和协方差的示例代码:

import numpy as np

# 计算期望
data = [1, 2, 3, 4, 5]
mean = np.mean(data)
print("期望:", mean)

# 计算方差
variance = np.var(data)
print("方差:", variance)

# 计算协方差
data1 = [1, 2, 3, 4, 5]
data2 = [2, 4, 6, 8, 10]
covariance = np.cov(data1, data2)[0][1]
print("协方差:", covariance)

这段代码中,我们使用numpy库计算了一组数据的期望、方差和协方差。首先,我们计算了数据的期望,使用np.mean()函数来计算平均值。然后,我们计算了数据的方差,使用np.var()函数来计算方差。最后,我们计算了两组数据的协方差,使用np.cov()函数来计算协方差矩阵,并取出矩阵中的协方差值。

协方差是用来衡量两个随机变量之间线性相关程度的统计量。它描述了两个变量的变化趋势是否一致,以及它们之间的线性关系的强度和方向。

协方差的定义如下:

cov(X, Y) = E[(X - E[X]) * (Y - E[Y])]

其中,X和Y是两个随机变量,E[X]和E[Y]分别是X和Y的期望值。

协方差的值可以为正、负或零,具体含义如下:

  • 正协方差表示X和Y呈正相关关系,即当X增加时,Y也会增加,反之亦然。
  • 负协方差表示X和Y呈负相关关系,即当X增加时,Y会减少,反之亦然。
  • 零协方差表示X和Y之间没有线性相关关系。

协方差的绝对值大小表示相关程度的强度,但不直观。为了更好地度量两个变量之间的相关性,可以使用相关系数(Correlation Coefficient)来标准化协方差。常用的相关系数是皮尔逊相关系数(Pearson Correlation Coefficient)。

协方差在统计学和金融学等领域广泛应用,可以用来分析变量之间的关系、构建投资组合、评估风险等。

以下是一个使用Python计算协方差的示例:

import numpy as np

# 生成随机变量X和Y的样本数据
X = np.random.rand(100)
Y = np.random.rand(100)

# 计算协方差
covariance = np.cov(X, Y)[0, 1]
print("Covariance:", covariance)

这个示例中,我们使用numpy.cov函数计算了两个随机变量X和Y的协方差。最终输出的covariance即为协方差的值。

在深度学习中,常用的概率分布有多种,以下是其中几个常见的概率分布及其举例:

  1. 伯努利分布(Bernoulli Distribution):伯努利分布是最简单的离散概率分布,描述了只有两种可能结果的随机试验。例如,抛一枚硬币的结果可以是正面或反面,正面的概率为p,则可以用伯努利分布来描述。
from scipy.stats import bernoulli

p = 0.6  # 正面出现的概率为0.6
rv = bernoulli(p)
rv.rvs(size=10)  # 生成10个服从伯努利分布的随机变量
  1. 正态分布(Normal Distribution):正态分布是连续概率分布中最常见的一种,其概率密度函数呈钟形曲线。在深度学习中,正态分布常用于描述连续变量的分布。例如,人的身高、体重等可以用正态分布来描述。
from scipy.stats import norm

mu = 0  # 均值
sigma = 1  # 标准差
rv = norm(mu, sigma)
rv.rvs(size=10)  # 生成10个服从正态分布的随机变量
  1. 泊松分布(Poisson Distribution):泊松分布用于描述单位时间内随机事件发生的次数的概率分布。例如,某个网站每小时接收到的访问次数,可以用泊松分布来描述。
from scipy.stats import poisson

mu = 3  # 平均发生次数
rv = poisson(mu)
rv.rvs(size=10)  # 生成10个服从泊松分布的随机变量

这些是深度学习中常用的几种概率分布及其举例,实际应用中还有其他的概率分布可以根据具体问题选择。

泊松分布和正态分布是两种常见的概率分布,它们在统计学和概率论中有着不同的特点和应用。

1. 定义和形状:

- 泊松分布(Poisson Distribution)描述了在一段固定时间或空间内,某事件发生的次数的概率分布。它是一个离散型分布,取值为非负整数。泊松分布的概率质量函数为:P(X=k) = (e^(-λ) * λ^k) / k!,其中λ是事件的平均发生率。

- 正态分布(Normal Distribution),也称为高斯分布(Gaussian Distribution),是一种连续型分布,其形状呈钟形曲线。正态分布由两个参数完全确定,即均值μ和方差σ^2。

2. 分布特点:

- 泊松分布的特点是:平均值和方差相等,即E(X) = Var(X) = λ。它适用于描述稀有事件的发生次数,如电话呼叫数量、交通事故数量等。

- 正态分布的特点是:对称且呈钟形曲线,均值、中位数和众数相等,且大部分数据集中在均值附近。正态分布在统计学中非常重要,许多自然现象和测量数据都可以近似地用正态分布来描述。

3. 应用领域:

- 泊松分布常用于计数型数据的建模,如在一定时间内接收到的电子邮件数量、网站访问量等。

- 正态分布广泛应用于统计推断、假设检验和回归分析等领域。许多自然现象和实验数据都服从正态分布,例如身高、体重、考试成绩等。

需要注意的是,当泊松分布的参数λ趋近于无穷大时,泊松分布会逐渐逼近正态分布。这是由于中心极限定理的影响,即当随机变量的独立同分布和样本量足够大时,其总和或平均值会趋近于正态分布。因此,在某些情况下,泊松分布可以用正态分布来近似。

在深度学习中,Bernoulli分布是一种二元随机变量的离散概率分布,它描述了一个随机变量取值为1的概率为p,取值为0的概率为1-p。可以用来表示二分类问题中的概率分布。

在Python中,可以使用scipy库来生成Bernoulli分布的随机变量。以下是一个使用Bernoulli分布生成随机变量的示例代码:

import numpy as np
from scipy.stats import bernoulli

# 设置随机种子以保证结果可重现
np.random.seed(0)

# 定义Bernoulli分布的参数
p = 0.6

# 生成100个符合Bernoulli分布的随机变量
data = bernoulli.rvs(p, size=100)

# 打印生成的随机变量
print(data)

输出结果可能为:

[1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0 1 0 1 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1 0 0 1 1 1
 1 1 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]

以上代码使用了scipy库中的bernoulli.rvs()函数来生成符合Bernoulli分布的随机变量,参数p指定了概率分布的参数。生成的随机变量存储在data数组中,并通过print()函数打印出来。

在深度学习中,Multinoulli分布(也称为Categorical分布)是一种离散概率分布,用于描述具有多个离散取值的随机变量。

Multinoulli分布的概率质量函数可以表示为:

P(X = x) = p1^I(x=1) * p2^I(x=2) * ... * pk^I(x=k)

其中,X是随机变量,x是X的取值,p1, p2, ..., pk是概率参数,I是指示函数,当x等于对应的取值时,I(x=i)为1,否则为0。

在Python中,可以使用numpy库中的random.choice函数来生成服从Multinoulli分布的随机样本。以下是一个示例:

import numpy as np

# 定义概率参数
probabilities = [0.2, 0.3, 0.5]

# 生成随机样本
sample = np.random.choice([1, 2, 3], p=probabilities)

print(sample)

上述代码中,probabilities表示每个离散取值的概率,np.random.choice函数根据这些概率生成一个随机样本。运行代码会输出一个取值为1、2或3的随机数,每个取值的概率分别为0.2、0.3和0.5。

高斯分布(Gaussian distribution)和正态分布(Normal distribution)是两个常用的概率分布,它们在很多情况下可以互相等价使用。它们的区别在于名称和使用的领域。

高斯分布是指任何服从高斯分布的随机变量,而正态分布是指特定形式的高斯分布,具体来说,正态分布是指均值为0,标准差为1的高斯分布。正态分布是高斯分布的一种特殊情况。

高斯分布和正态分布的概率密度函数(Probability Density Function,PDF)都具有相似的形式,即钟形曲线。它们都具有对称性,均值位于曲线的中心,标准差决定了曲线的宽度。

高斯分布和正态分布在统计学、概率论、机器学习等领域广泛应用。它们常被用于建模连续型随机变量,描述实际数据的分布情况,进行概率推断和参数估计等。

以下是使用Python中的numpy和matplotlib库绘制高斯分布和正态分布的示例代码:

import numpy as np
import matplotlib.pyplot as plt

# 高斯分布参数
mu = 0  # 均值
sigma = 1  # 标准差

# 生成一组随机样本
samples = np.random.normal(mu, sigma, 1000)

# 绘制直方图
plt.hist(samples, bins=30, density=True, alpha=0.5, color='blue')

# 绘制高斯分布曲线
x = np.linspace(-5, 5, 100)
y = 1 / (np.sqrt(2 * np.pi) * sigma) * np.exp(-0.5 * ((x - mu) / sigma) ** 2)
plt.plot(x, y, color='red')

plt.xlabel('x')
plt.ylabel('Probability Density')
plt.title('Gaussian Distribution')
plt.show()

这个示例代码生成了一组服从高斯分布的随机样本,并绘制了样本的直方图和高斯分布的曲线。你可以通过调整均值和标准差的值来改变生成的高斯分布的形状。

如果将均值设为0,标准差设为1,则可以得到正态分布的曲线。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码