3.概率和高斯贝叶斯算法(均值、方差、标准差、协方差、皮尔逊系数)

1. 概率和数理统计

  • 辅助建模,建模思想
  • model
  • 高斯贝叶斯算法

1.1 概率的概念

  • probability 固有属性
  • frequency 频率代替
  • 实验次数越来越多,频率就接近概率
  • 实战中:数据量很大,概率直接拿频率来代替即可
  • 非负性:P(A) ≥ 0
  • 规范性:P(A) + P(B) + P(C ) … = 1

1.2 如何计算概率

  • 离散型变量
    • 在有限个状态中选择一个:
      • 交通灯:红色,绿色,黄色
      • 性别:男,女,未知
      • 鸢尾花:1,2,3
    • zero index 编码:
      • 1,2,3,4, … , N-1
      • 编码本身有大小,但是这个大小并没有数学内涵,
    • one hot 编码:
      • 0:[1, 0, 0, 0, 0, …]
      • 1:[0, 1, 0, 0, 0, …]
      • 2:[0, 0, 1, 0, 0, …]
      • 采样:[1, 2, 2, 2, 2, 3, 1, 1]
      • 概率:
        • P(1) = 3 / 8
        • P(2) = 4 / 8
        • P(3) = 1 / 8
      • 先验概率:
  • 连续量:
    • 有无数个采样结果

    • [0, 1]

      • 严格意义上,对于连续量的某个单点,比如 0.6,这个点的概率是 0 。
      • 连续量的概率是概率密度函数的积分,单点的积分上下限是 0 。
    • 人工智能是纯理论数学的工程化简。

    • 概率密度函数: PDF (Probability Density Function)

      • 概率密度函数是概率的导函数
      • 概率是概率密度函数的积分
    • 高斯分布(正态分布)
      f ( x ) = 1 2 π σ e x p − ( x − μ ) 2 2 σ 2 f(x) = \frac{1}{\sqrt{2\pi}\sigma} exp^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x)=2π σ1exp2σ2(xμ)2

    • 模型中对概率的使用

      • 重在比较概率的大小,而不是概率的具体数值是多少。
      • 所以比较大小可以使用概率密度函数的值来代替即可。
    • 采样:[1, 2, 2, 2, 2, 3, 1, 1] 假定这是一个连续分布

    • 工程化简:假定其是高斯分布即可!

      • 化简之后计算得到的概率结果并不是真实概率,但是可以用于比较大小即可。
      logits = np.array([1,2,2,2,2,3,1,1])
      mu = logits.mean()
      sigma = logits.std()
      P1 = gaussian(x=1,mu=mu,sigma=sigma)
      P2 = gaussian(x=2,mu=mu,sigma=sigma)
      P3 = gaussian(x=3,mu=mu,sigma=sigma)
      

1.3 条件概率

  • 有前提条件的概率:
    • 例子: {李1,李2,李3,王1,王2,刘1} 六个人竞选村长,姓李的当选了,李1当选的概率就是 1 / 3 1/3 1/3
    • P(A): A发生的概率。
    • P(A|B): 在B发生的条件下,A发生的概率。
    • 应对策略:根据条件,重新划分样本空间,将不满足的干掉,然后在计算概率。
      • P ( A ∣ B ) = P ( A B ) / P ( B ) P(A|B) = P(AB) / P(B) P(AB)=P(AB)/P(B)
      • P ( B ∣ A ) = P ( A B ) / P ( A ) P(B|A) = P(AB) / P(A) P(BA)=P(AB)/P(A)
      • P ( A ∣ B ) P ( B ) = P ( B ∣ A ) P ( A ) P(A|B)P(B) = P(B|A) P(A) P(AB)P(B)=P(BA)P(A)
      • P ( A ∣ B ) = P ( B ∣ A ) P ( A ) / P ( B ) P(A|B) = P(B|A) P(A)/ P(B) P(AB)=P(BA)P(A)/P(B)
    • 贝叶斯
      • X: 一个输入样本的特征[x1,x2,x3…]
      • y0: 第0类; y1: 第1类; y2: 第2类 …
      • P ( y 0 ∣ X ) = P ( X ∣ y 0 ) P ( y 0 ) / P ( X ) — P ( X ∣ y 0 ) P ( y 0 ) — P ( x 1 , x 2 , x 3... ∣ y 0 ) P ( y 0 ) — P ( x 1 ∣ y 0 ) P ( x 2 ∣ y 0 ) P ( x 3 ∣ y 0 ) . . . P ( x N ∣ y 0 ) P ( y 0 ) P(y0|X) = P(X|y0) P(y0)/ P(X) — P(X|y0) P(y0) — P(x1,x2,x3...|y0) P(y0) — P(x1|y0) P(x2|y0)P(x3|y0)...P(x_N|y0)P(y0) P(y0∣X)=P(Xy0)P(y0)/P(X)P(Xy0)P(y0)P(x1,x2,x3...∣y0)P(y0)P(x1∣y0)P(x2∣y0)P(x3∣y0)...P(xNy0)P(y0)
      • P ( y 1 ∣ X ) = P ( X ∣ y 1 ) P ( y 1 ) / P ( X ) — P ( X ∣ y 1 ) P ( y 1 ) — P ( x 1 , x 2 , x 3... ∣ y 1 ) P ( y 1 ) — P ( x 1 ∣ y 1 ) P ( x 2 ∣ y 1 ) P ( x 3 ∣ y 1 ) . . . P ( x N ∣ y 1 ) P ( y 1 ) P(y1|X) = P(X|y1) P(y1)/ P(X) — P(X|y1) P(y1) — P(x1,x2,x3...|y1) P(y1) — P(x1|y1) P(x2|y1)P(x3|y1)...P(x_N|y1)P(y1) P(y1∣X)=P(Xy1)P(y1)/P(X)P(Xy1)P(y1)P(x1,x2,x3...∣y1)P(y1)P(x1∣y1)P(x2∣y1)P(x3∣y1)...P(xNy1)P(y1)
      • P ( y 2 ∣ X ) = P ( X ∣ y 2 ) P ( y 2 ) / P ( X ) — P ( X ∣ y 2 ) P ( y 2 ) — P ( x 1 , x 2 , x 3... ∣ y 2 ) P ( y 2 ) — P ( x 1 ∣ y 2 ) P ( x 2 ∣ y 2 ) P ( x 3 ∣ y 2 ) . . . P ( x N ∣ y 2 ) P ( y 2 ) P(y2|X) = P(X|y2) P(y2)/ P(X) — P(X|y2) P(y2) — P(x1,x2,x3...|y2) P(y2) — P(x1|y2) P(x2|y2)P(x3|y2)...P(x_N|y2)P(y2) P(y2∣X)=P(Xy2)P(y2)/P(X)P(Xy2)P(y2)P(x1,x2,x3...∣y2)P(y2)P(x1∣y2)P(x2∣y2)P(x3∣y2)...P(xNy2)P(y2)

2. 基本统计量(均值、方差、标准差、协方差、皮尔逊相关系数)

  • 均值:加起来,除以个数
  • 方差:一列数据的离散情况
    1. 求均值
    2. 求每个数跟均值的差
    3. 把差取平方
    4. 再把平方取均值
  • 标准差:
    • 方差开平方
  • 协方差:
    • 考察两列数据的变化趋势是否相同
    • C o v a r i a n c e = E ( ( X − E ( X ) ) ∗ ( Y − E ( Y ) ) ) Covariance = E((X-E(X)) * (Y-E(Y))) Covariance=E((XE(X))(YE(Y)))
      • E : 期望 (平均值)
      • Covariance : 协方差
  • 皮尔逊相关系数(Pearson correlation coefficient)
    • 协方差标准化 就变成了 皮尔逊相关系数,他能更清楚明了的表达相关程度。
    • $$ Covariance / $
    • 皮尔逊相关系数的区间是:[-1, 1]
      • -1: 严格负相关
      • 1:严格正相关
      • 0:不相关
  • 工作
    • 均值大,方差小
    • 均值大,方差大:认可你的努力

3. 代码

3.1 加载鸢尾花数据,计算每种花的概率

from sklearn.datasets import load_iris
X,y = load_iris(return_X_y=True)
P_y0 = (y==0).mean()
P_y1 = (y==1).mean()
P_y2 = (y==2).mean()
print(P_y0,P_y1,P_y2)

输出:0.3333333333333333 0.3333333333333333 0.3333333333333333

3.2 高斯分布定义及画图

import numpy as np
from matplotlib import pyplot as plt
# 高斯分布 (正态分布,概率密度函数)
def gaussian(x, mu=0, sigma=1):
    """
        x:随机变量
        mu: 均值	控制图形左右移动
        sigma: 标准差	控制图形胖瘦
    """
    return 1 / np.sqrt(2*np.pi)/sigma*np.exp(-(x-mu)**2/2/sigma**2)

x = np.linspace(start=-5,stop=5,num=100)
plt.plot(x, gaussian(x,mu=0,sigma=1),label="$\mu=0,\sigma=1$")
plt.plot(x, gaussian(x,mu=1,sigma=1),label="$\mu=1,\sigma=1$")
plt.plot(x, gaussian(x,mu=0,sigma=2),label="$\mu=0,\sigma=2$")
plt.grid()
plt.legend()

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

3.3 高斯贝叶斯预测鸢尾花

# 加载数据
from sklearn.datasets import load_iris
X,y = load_iris(return_X_y=True)
# 切分数据
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=0)

# 加载模型:高斯贝叶斯(天真的贝叶斯)
from sklearn.naive_bayes import GaussianNB

# 构建模型
gnb = GaussianNB()

# 训练模型
gnb.fit(X=X_train,y=y_train)

# 测试模型
y_pred = gnb.predict(X = X_test)
print(y_pred)

acc = (y_test==y_pred).mean()
print(acc)

输出:
[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0 1 1 1 2 0 2 0 0]
1.0

3.4 计算协方差

X = np.array([1,3,5,7,9])
Y = np.array([2,4,6,8,10])
Z = Y[::-1]
# 严格正相关
X_Y = ((X-X.mean()) * (Y-Y.mean())).mean()/X.std()/Y.std()
# 严格负相关
X_Z = ((X-X.mean()) * (Z-Z.mean())).mean()/X.std()/Z.std()

print(X_Y,X_Z)

0.9999999999999999 -0.9999999999999999

X = np.random.randint(0,101,100)
Y = np.random.randint(0,101,100)
# 随机生成的两组数据就没啥相关关系了,所以皮尔逊相关系数(协方差归一化)接近0
X_Y = ((X-X.mean()) * (Y-Y.mean())).mean()/X.std()/Y.std()
print(X_Y)

0.05746974673284489

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是对灰度图像均值方差规定化的 C 语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> #define ROWS 512 // 图像高度 #define COLS 512 // 图像宽度 int main() { // 读取原始图像 FILE *fp; if ((fp = fopen("lena.raw", "rb")) == NULL) { printf("Error: Cannot open file for reading.\n"); exit(1); } unsigned char image[ROWS][COLS]; fread(image, sizeof(unsigned char), ROWS*COLS, fp); fclose(fp); // 计算原始图像的均值标准差 double mean = 0.0, std_dev = 0.0; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { mean += image[i][j]; } } mean /= ROWS*COLS; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { std_dev += pow(image[i][j] - mean, 2); } } std_dev = sqrt(std_dev / (ROWS*COLS - 1)); // 设定目标均值标准差 double target_mean[] = {50.0, 100.0, 200.0}; // 目标均值 double target_std_dev[] = {10.0, 20.0, 30.0}; // 目标标准差 // 对图像进行均值方差规定化 for (int k = 0; k < 3; k++) { // 对每组目标均值标准差分别处理 double a = target_std_dev[k] / std_dev; double b = target_mean[k] - a * mean; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { double new_value = a * (image[i][j] - mean) + b; if (new_value < 0.0) { new_value = 0.0; } else if (new_value > 255.0) { new_value = 255.0; } image[i][j] = (unsigned char) new_value; } } // 保存处理后的图像 char filename[20]; sprintf(filename, "lena_%d.raw", k+1); if ((fp = fopen(filename, "wb")) == NULL) { printf("Error: Cannot open file for writing.\n"); exit(1); } fwrite(image, sizeof(unsigned char), ROWS*COLS, fp); fclose(fp); } return 0; } ``` 在上面的代码中,我们首先读取了名为“lena.raw”的灰度图像,然后计算了其均值标准差。接着,我们根据设定的三组目标均值标准差,对原始图像进行均值方差规定化处理,并将处理后的图像保存到三个不同的文件中。对于每个目标均值标准差,我们都使用了一个线性变换来将原始图像映射到目标均值标准差的范围内。最后,我们将处理后的图像保存到文件中,以便进一步观察和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值