机器学习的概率统计模型(附代码)(一)

目录

概率论

1.1 离散随机变量分布

1)伯努利分布

 2)二项分布

 3)泊松分布

1.2 连续随机变量分布

1)均匀分布

 2)指数分布

 3)正态分布

总结

 系列文章目录


概率论

概率论,是研究随机现象数量规律的数学分支。随机现象是相对于决定性现象而言的,在一定条件下必然发生某一结果的现象称为决定性现象。

事件的概率是衡量该事件发生的可能性的量度。虽然在一次随机试验中某个事件的发生是带有偶然性的,但那些可在相同条件下大量重复的随机试验却往往呈现出明显的数量规律。

 由于本文章会多次运用到matplotlib库的知识,如有需要请移步前往matplotlib库巩固知识点。 

1.1 离散随机变量分布

1)伯努利分布

        伯努利分布又称为两点分布或0-1分布,指的是对于随机变量X有, 参数为p(0<p<1),如果它分别以概率p和1-p取1和0为值。EX= p,DX=p(1-p)。伯努利试验成功的次数服从伯努利分布,参数p是试验成功的概率。

伯努利分布的概率用python代码绘制如下:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def bernoulli_pmf(p=0.0):
    ber_dist =stats.bernoulli(p)
    x = [0, 1]
    x_name = ['0', '1']
    pmf = [ber_dist.pmf(x[0]),ber_dist.pmf(x[1])]
    plt.bar(x, pmf, width = 0.15)
    plt.xticks(x,x_name)
    plt.ylabel('Probability')
    plt.title('Pmf of bernoulli distribution')
    plt.show()

bernoulli_pmf(p=0.3)

运行结果如下:

 2)二项分布

        如果把一个伯努利分布独立的重复n次,就得到了一个二次分布。二项分布是最重要的离散型概率分布之一。随机变量X要满足这个分布有两个重要条件:

  • 各次试验的条件是稳定的;
  • 各次试验之间是相互独立的;

下面利用python代码模拟抛一枚不均匀的硬币20次,设正面朝上的概率为0.6:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def binom_dis(n=1,p=0.1):
    binom_dis = stats.binom(n,p)
    x = np.arange(binom_dis.ppf(0.0001), binom_dis.ppf(0.9999))
    print(x)
    fig, ax = plt.subplots(1, 1)
    ax.vlines(x, binom_dis.pmf(x), 'bo', label='binom pmf')
    ax.legend(loc='best', frameon = False)
    plt.ylabel('Probability')
    plt.title('PMF of binomial distribution(n={},p={})'.format(n,p))
    plt.show()

binom_dis(n=20,p=0.6)

运行结果如下:

 3)泊松分布

        泊松分布的参数λ是单位时间(或单位面积)内随机事件的平均发生次数。 泊松分布适合于描述单位时间内随机事件发生的次数。当二项分布的n很大而p很小时,泊松分布可作为二项分布的近似,其中λ为np。通常当n≧20,p≦0.05时,就可以用泊松公式近似得计算。事实上,泊松分布正是由二项分布推导而来的。

下面是参数μ=8时的泊松分布python实现,在Scipy中将泊松分布的参数表示为μ:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def poisson_pmf(mu=3):
    poisson_dis= stats.poisson(mu)
    x = np.arange(poisson_dis.ppf(0.001), poisson_dis.ppf(0.999))
    print(x)
    fig, ax = plt.subplots(1, 1)
    ax.plot(x, poisson_dis.pmf(x), 'bo', ms=8, label = 'poisson pmf')
    ax.legend(loc = 'best', frameon = False)
    plt.ylabel('Probability')
    plt.title('PMF of poisson distribution(mu={})'.format(mu))
    plt.show()

poisson_pmf(mu=8)

1.2 连续随机变量分布

1)均匀分布

        均匀分布也叫矩形分布,它是对称概率分布,在相同长度间隔的分布概率是等可能的。 均匀分布由两个参数a和b定义,它们是数轴上的最小值和最大值,通常缩写为U(a,b)。

在python中用location和scale分别表示起点和区间长度,代码如下:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def uniform_distribution(loc=0,scale=1):
    uniform_dis = stats.uniform(loc=loc,scale=scale)
    x = np.linspace(uniform_dis.ppf(0.01), uniform_dis.ppf(0.99), 100)
    fig, ax = plt.subplots(1, 1)

    #直接传入参数
    ax.plot(x, stats.uniform.pdf(x, loc=2, scale=4), 'r-', lw=5, alpha=0.6, label='uniform pdf')
    #从冻结的均匀分布取值
    ax.plot(x, uniform_dis.pdf(x), 'k-', lw=2, label='frozen pdf')
    #计算ppf分别等于0.001,0.5,0.999时的x值
    vals = uniform_dis.ppf([0.001, 0.5, 0.999])
    print(vals)#[2.004 4.    5.996]

    #检测cdf和ppf的精确度
    print(np.allclose([0.001, 0.5, 0.999], uniform_dis.cdf(vals)))#结果为True

    r = uniform_dis.rvs(size=10000)
    ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
    plt.ylabel('Probability')
    plt.title(r'PDF of Unit({}, {})'.format(loc, loc+scale))
    ax.legend(loc= 'best', frameon = False)
    plt.show()
    
uniform_distribution(loc=2,scale=4)

运行结果如下:

 2)指数分布

        指数分布(也称为负指数分布)是描述泊松过程中的事件之间的时间的概率分布,即事件以恒定平均速率连续且独立地发生的过程。这表示如果一个随机变量呈指数分布,当s,t>0时有P(T>t+s|T>t)=P(T>s)。即,假如你在排队接受服务的时间长短服从指数分布,那么无论你已经排了多久的队,在排t分钟的概率始终是相同的,代码如下:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def exponential_dis(loc=0, scale=1.0):
    '''
    指数分布按照定义只有一个参数lambda,这里的scale = 1/lambda
    param loc:定义域的左端点,相当于将整体分布沿x轴平移loc
    param scale:lambda的倒数,loc+scale表示改分布的均值,scale^2表示该分布的方差
    '''
    exp_dis = stats.expon(loc=loc, scale=scale)
    x = np.linspace(exp_dis.ppf(0.000001), exp_dis.ppf(0.999999), 100)
    fig, ax = plt.subplots(1, 1)

     #直接传入参数
    ax.plot(x, stats.expon.pdf(x, loc=loc, scale=scale), 'r-', lw=5, alpha=0.6, label='uniform pdf')
    #从冻结的均匀分布取值
    ax.plot(x, exp_dis.pdf(x), 'k-', lw=2, label='frozen pdf')
    #计算ppf分别等于0.001,0.5,0.999时的x值
    vals = exp_dis.ppf([0.001, 0.5, 0.999])
    print(vals)#[2.004 4.    5.996]

    #检测cdf和ppf的精确度
    print(np.allclose([0.001, 0.5, 0.999], exp_dis.cdf(vals)))

    r = exp_dis.rvs(size=10000)
    ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
    plt.ylabel('Probability')
    plt.title(r'PDF of Exp(0.5)')
    ax.legend(loc= 'best', frameon = False)
    plt.show()
    
exponential_dis(loc=0, scale=2)

运行结果如下:

 3)正态分布

正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。

若随机变量X服从一个数学期望为μ、方差为σ2的正态分布,记为N(μ,σ2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

import numpy as np
import matplotlib.pyplot as plt
import math

u = 0
#均值μ
u01 = -2
sig = math.sqrt(0.2)
#标准差

x = np.linspace(u-3*sig, u+3*sig, 50)
y_sig = np.exp(-(x-u)**2/(2*sig**2))/(math.sqrt(2*math.pi)*sig)
print(x)
print('='*20)
print(y_sig)
plt.plot(x, y_sig, 'r-', linewidth=2)
plt.grid(True)
plt.show()


总结

        本文为大家重点介绍了与人工智能有关的梳理统计方法,概率统计知识在人工智能领域发挥着非常重要的作用,如深度学习理论,概率图模型等都依赖于概率分布作为框架的基本建模语言,学习了解机器学习的概率统计对你的掌握百利无一害~~

        欢迎大家留言一起讨论问题~~~


 系列文章目录

第二章:机器学习的概率统计模型(附代码)(一)

第二章:机器学习的概率统计模型(附代码)(二)

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Statistical learning refers to a set of tools for modeling and understanding complex datasets. It is a recently developed area in statistics and blends with parallel developments in computer science and, in particular, machine learning. The field encompasses many methods such as the lasso and sparse regression, classification and regression trees, and boosting and support vector machines. With the explosion of “Big Data” problems, statistical learning has be- come a very hot field in many scientific areas as well as marketing, finance, and other business disciplines. People with statistical learning skills are in high demand. One of the first books in this area—The Elements of Statistical Learning (ESL) (Hastie, Tibshirani, and Friedman)—was published in 2001, with a second edition in 2009. ESL has become a popular text not only in statis- tics but also in related fields. One of the reasons for ESL’s popularity is its relatively accessible style. But ESL is intended for individuals with ad- vanced training in the mathematical sciences. An Introduction to Statistical Learning (ISL) arose from the perceived need for a broader and less tech- nical treatment of these topics. In this new book, we cover many of the same topics as ESL, but we concentrate more on the applications of the methods and less on the mathematical details. We have created labs illus- trating how to implement each of the statistical learning methods using the popular statistical software package R . These labs provide the reader with valuable hands-on experience.
### 回答1: 《统计学习方法》是一本经典的机器学习教材,其中介绍了统计学习的基本原理和常用方法。李航编写的《统计学习方法》一书在学术界和工业界都有很高的影响力。 对于李航《统计学习方法》一书中的MATLAB代码,我不清楚具体指的是书中的哪些代码。该书中没有提供完整的MATLAB代码,但其中给出了一些算法的伪代码和概念性的示例。 如果要在MATLAB中实现书中的算法,可以根据伪代码和示例进行改写和实现。具体的实现方式取决于要实现的算法和具体应用的需求。 一般来说,实现统计学习方法的MATLAB代码需要用到一些基本的数学和编程技巧,如矩阵运算、概率理论、优化算法等。可以利用MATLAB中的矩阵和向量操作的高效性,简化算法的实现过程。 对于不熟悉MATLAB语言的人来说,编写《统计学习方法》的MATLAB代码可能相对困难。此时,可以参考相关的机器学习库和工具箱,如MATLAB自带的Statistics and Machine Learning Toolbox或者第三方开源库,来实现相关的算法。 总之,《统计学习方法》一书提供了机器学习算法的理论基础和实现思路,而具体的MATLAB代码的编写取决于实际需求和编程经验。 ### 回答2: 李航的《统计学习方法》是机器学习领域的经典教材之一,其中包含了很多重要的算法和理论。针对这本书中的内容,可以使用MATLAB编写相关的代码来实现其中的一些算法。 例如,在书中介绍了支持向量机(SVM)的原理和实现方法。MATLAB提供了一个简单易用的工具箱,可以直接调用其中的函数来实现支持向量机的训练和预测。下面是一个简单的MATLAB代码示例: ``` % 导入数据集 load('data.mat'); X = data(:, 1:2); % 输入特征 y = data(:, 3); % 标签 % 训练支持向量机模型 svm_model = fitcsvm(X, y, 'KernelFunction', 'linear'); % 预测新样本 new_data = [2, 3; 4, 5]; % 新样本特征 labels = predict(svm_model, new_data); % 预测标签 % 输出预测结果 disp(labels); ``` 以上代码首先导入数据集,然后使用`fitcsvm`函数训练了一个线性核的支持向量机模型。接着,我们可以使用这个模型对新的样本进行预测,使用`predict`函数可以得到预测的标签。最后,将预测结果输出到命令行中。 需要注意的是,以上代码只是一个简单的示例,实际应用中可能需要进行更多的数据预处理、调参等操作。而且,书中涉及的其他算法和方法也可以使用类似的方式在MATLAB中进行实现。希望这个简单的示例能够帮助你理解如何在MATLAB中编写《统计学习方法》中的算法代码。 ### 回答3: 李航的《统计学习方法》是一本经典的机器学习教材,其中介绍了统计学习方法的原理、算法和应用。Matlab是一种常用的科学计算软件,也是机器学习中常用的编程语言之一。在学习和实践统计学习方法过程中,我们可以使用Matlab来实现其中的算法和案例。 首先,可以使用Matlab来编写Perceptron算法的实现。Perceptron算法是 Li Haung 在《统计学习方法》中介绍的一种简单的二分类算法。我们可以编写一个函数,输入训练数据集和标签集,利用Perceptron算法进行训练,得到权重向量W和截距b。然后,我们可以使用得到的W和b来预测新的样本数据。这个过程可以使用Matlab的矩阵操作和循环结构来实现。 接下来,可以使用Matlab来实现K近邻算法。K近邻算法是《统计学习方法》中介绍的一种非参数分类算法。我们可以编写一个函数,输入训练数据集、训练标签集和测试数据,计算测试数据与训练数据之间的距离,并找到K个最近邻的样本。然后,根据这K个最近邻的标签来预测测试数据的类别。在Matlab中,可以使用欧氏距离计算距离,并利用排序函数来找出K个最近邻。 另外,我们还可以用Matlab来实现决策树算法。决策树是《统计学习方法》中介绍的一种常用的分类算法。我们可以编写一个函数,输入训练数据集和标签集,通过递归地选择最优特征来构建决策树。然后,使用构建好的决策树来预测新的样本数据的类别。在Matlab中,可以使用选择最优特征的指标和递归函数来构建决策树。 总结来说,通过使用Matlab来实现《统计学习方法》中的算法,我们能更好地理解和应用统计学习方法的原理和算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hulake_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值