AI基础之概率论的学习,学习自华为的iLearnX网站
概率论介绍
概率论是研究随机现象数量规律的数学分支。随机现象是相对于决定性现象而言的,在一定条件下必然发生某一结果的现象称为决定性现象。
概率论是用来描述不确定性的数学工具,很多据挖掘中的算法都是通过描述样本的概率相关信息或推断来构建模型
均值实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import numpy as np import scipy as sp
U = [[1, 2, 3, 4, 5, 6], [3, 4, 5, 6, 7, 8]]
print(np.mean(U))
print(np.mean(U, 0))
print(np.mean(U, 1))
|
方差实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import numpy as np import scipy as sp
b = [1,3,5,6] U = [[1,2,3,4,5,6],[3,4,5,6,7,8]]
np.var(b)
np.var(U, 1)
np.var(U, 0)
|
标准差实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import numpy as np import scipy as sp
U = [[1,2,3,4,5,6],[3,4,5,6,7,8]]
np.std(U)
np.std(U, 1)
np.std(U, 0)
|
协方差实现
1 2 3 4 5 6 7 8
| import numpy as np import scipy as sp
b = [1,3,5,6]
np.cov(b)
|
相关系数
1 2 3 4 5 6
| vc=[1,2,39,0,8] vb=[1,2,38,0,8]
np.corrcoef(vc,vb)
|
二项分布的实现
服从二项分布的随机变量X表示在n次独立同分布的伯努利试验中成功的次数,其中每次试验的成功概率为p。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from scipy.stats import binom,norm,beta,expon import numpy as np import matplotlib.pyplot as plt
binom_sim = binom.rvs(n=10, p=0.3,size=10000) print('Data:',binom_sim) print('Mean:%g'%np.mean(binom_sim)) print('SD:%g'%np.std(binom_sim,ddof=1))
plt.hist(binom_sim,bins=10,density=True) plt.xlabel('x') plt.ylabel('density') plt.show()
|
Data: [4 5 1 ... 5 5 2]
Mean:3.0176
SD:1.42664

泊松分布实现
一个服从泊松分布的随机变量X,表示在具有比率参数$\lambda$的一段固定时间间隔内,事件发生的次数。参数$\lambda$告诉你该事件发生的比率。随机变量X的平均值和方差都是$\lambda$
1 2 3 4 5 6 7 8 9 10
| import numpy as np import matplotlib.pyplot as plt
X = np.random.poisson(lam=2,size=10000)
a = plt.hist(X, bins=15, density=True,range=[0,15])
plt.grid() plt.show()
|

正态分布
正态分布是一种连续分布,其函数可以在实线上的任何地方取值。正态分布由两个参数描述:
分布的平均值μ标准差σ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| from scipy.stats import norm import numpy as np import matplotlib.pyplot as plt
mu = 0 sigma = 1
x = np.arange(-5,5,0.1)
y = norm.pdf(x,mu,sigma) plt.plot(x,y) plt.xlabel('x') plt.ylabel('density') plt.show()
|

应用
图像加噪声
案例引入:比如在深度学习中,我们需要训练一个图像分类的模型,但是能拿到的图像不是很多,那有没有一种方法可以根据现有的图像生成一些新的图像出来呢?
增加的图像需要满足一些条件:图像本身的内容不能发生根本性的改变,比如图像能看出来是一只狗的话扩增出来的图像应该也是一只狗而不能成为只剩下一个毛茸茸的尾巴。最直接的方式就是在原始的图像上增加一些噪声,也就是使得图像变得粗糙同时保持图像原本要表述的信息。
给图像增加噪声,实现一下这个过程,该过程需要使用到 Python图像处理的模块 OpenCV,我们使用著名的Lena图作为原始图像。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| from numpy import * from scipy import * import numpy as np import cv2
srcImage = cv2.imread(r'E:\Python\sources\lena.png') print(srcImage.shape) cv2.namedWindow('Original image') cv2.imshow('Original image', srcImage) k = cv2.waitKey(0)
grayImage = cv2.cvtColor(srcImage, cv2.COLOR_BGR2GRAY) print(grayImage.shape) cv2.imshow('grayimage', grayImage) k = cv2.waitKey(0)
image = np.array(grayImage / 255, dtype=float) percent = 0.01 num = int(percent * image.shape[0] * image.shape[1])
for i in range(num): temp1 = np.random.randint(image.shape[0]) temp2 = np.random.randint(image.shape[1])
mean = 0 var = 0.04 noise = np.random.normal(mean, var**0.5, 1) image[temp1][temp2] += noise out = image
if out.min() < 0: low_clip = -1 else: low_clip = 0 out = np.clip(out, low_clip, 1) gasuss_image = np.uint8(out * 255) print(gasuss_image.shape) cv2.imshow('gasuss_image', gasuss_image) k = cv2.waitKey(0)
from scipy.stats import expon
image = np.array(grayImage, dtype=float) percent = 0.001 num = int(percent * image.shape[0] * image.shape[1]) for i in range(num): temp1 = np.random.randint(image.shape[0]) temp2 = np.random.randint(image.shape[1]) scale = 150 noise = np.random.poisson(scale, 1) image[temp1][temp2] += noise
out = image if out.min() < 0: low_clip = -1 else: low_clip = 0 out = np.clip(out, low_clip, 255) expon_image = np.uint8(out) print(expon_image.shape) cv2.imshow('expon.image', expon_image) k = cv2.waitKey(0)
|
(457, 563, 3)