最近有在系统的补数学基础,接下来会分享一些机器学习中最常见的数学函数与分布的Python实现。
1.对数函数
一般地,函数y=logax(a>0,且a≠1)叫做对数函数,也就是说以幂(真数)为自变量,指数为因变量,底数为常量的函数,叫对数函数。
1.1 简单的对数函数
实现代码如下所示:
import math
import matplotlib.pyplot as plt
if __name__ =="__main__":
x = [float(i)/100 for i in range(1,300)]
y = [math.log(i) for i in x]
plt.plot(x,y,'r-',linewidth=2,label='logCurve')
plt.legend(loc='upper left')
plt.grid(True)
plt.show()
绘制结果如下图所示:
1.2 常见对数函数的对比
实现代码如下所示:
import math
import numpy as np
import matplotlib.pyplot as plt
if __name__ == "__main__":
x = np.arange(0.05,3,0.01)
#绘制log1.5(x)曲线
y1 = [math.log(a,1.5) for a in x]
plt.plot(x,y1,linewidth=2,color='r',label='log1.5(x)')
y2 = [math.log(a,2) for a in x]
plt.plot(x,y2,linewidth=2,color='g',label='log2(x)')
y3 = [math.log(a,3) for a in x]
plt.plot(x,y3,linewidth=2,color='b',label='log3(x)')
plt.plot([1,1],[y1[0],y1[-1]],'r--',linewidth=2)
#指定标签的位置
plt.legend(loc='lower right')
plt.grid(True)
plt.show()
绘制结果如下图所示:
2.常见的函数分布
常见的函数分布主要有0-1分布、二项分布、泊松分布、均匀分布、指数分布、正态分布等。其中,前三者是离散型分布,后三者是连续型分布。
2.1 二项分布
若随机变量X的概率分布为:P{X=k}= (n!/k!(n-k)!) p^k (1-p)^(n-k)
其中k = 0,1,…,n(n为大于0的正整数), p的取值范围为0-1,则称X服从参数为n, p的二项分布,记做X~b(n,p)。
由二项分布的推导可知,该种分布可用于描述n重伯努利试验中,事件A发生的概率。在每次试验中只有两种可能的结果,而且两种结果发生与否互相对立,并且相互独立,与其它各次试验结果无关,事件发生与否的概率在每一次独立试验中都保持不变,则这一系列试验总称为n重伯努利实验,当试验次数为1时,二项分布服从0-1分布。
实现代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
if __name__ =="__main__":
u = np.random.uniform(0.0,1.0,10000)
plt.hist(u,100,facecolor='g',alpha=0.75,label='Binomial Distribution')
plt.legend(loc="upper left")
plt.grid(True)
plt.show()
绘制结果如下图所示:
2.2 泊松分布
若随机变量X的概率分布为:P{X=k}= λ^k/k! e^(-λ),
其中k = 0,1,…,n(n为大于0的正整数),λ为大于0的常数则称X是服从参数为λ的泊松分布,记作X ~ P(λ).
实现代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
if __name__ =="__main__":
#设定λ为100
x = np.random.poisson(100,10000)
times = 200
plt.hist(x,bins=times,normed=True,range=[0,times],color='g',alpha=0.75,label='Poisson Distribution')
plt.legend(loc="upper left")
plt.grid(True)
plt.show()
绘制结果如下图所示:
2.3 指数分布
若随机变量X的概率分布为p(x;λ)= λe^(-λx),其中xϵ[0,∞], λ为大于0的常数,则称X是服从参数为λ的指数分布,记作X ~ e(λ).
实现代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
if __name__ =="__main__":
#通过赋予不同的λ值,比较不同曲线之间的区别,
lam1 = 0.5
x = np.arange(0,20,0.01)
y1 = lam1 * np.exp(-lam1*x)
plt.plot(x,y1,color='r',label='λ=0.5')
lam2 = 0.3
y2 = lam2 * np.exp(-lam2*x)
plt.plot(x,y2,color='g',label='λ=0.3')
lam3 = 0.1
y3 = lam3 * np.exp(-lam3*x)
plt.plot(x,y3,color='b',label='λ=0.1')
plt.title('Expoential Distribution')
plt.legend(loc='upper right')
plt.grid(True)
plt.show()
绘制结果如下图所示:
2.4正态分布
正态分布(Normal distribution)又称高斯分布(Gaussian distribution)或常态分布。一般假设若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
实现代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
if __name__ =="__main__":
u = np.random.uniform(0.0,1.0,10000)
times = 10000
for time in range(times):
u += np.random.uniform(0.0,1.0,10000)
u /= times
plt.hist(u,100,facecolor='b',alpha=0.75,label='Gaussian Distribution')
plt.legend(loc="upper left")
plt.grid(True)
plt.show()
绘制结果如下图所示: