zoukankan      html  css  js  c++  java
  • Machine Learning Notes Ⅴ

    生成学习算法

    我们之前学习的算法都属于判别学习算法,它们都是直接对(P(ymid x))进行建模。

    而生成学习算法则是由贝叶斯公式(P(y=imid x)=frac{P(y=i,x)}{P(x)}=frac{P(xmid y=i) imes P(y=i)}{sum_{j=1}^{k}{P(xmid y=j) imes P(y=j)}})得到。他把(x,y)视为两个有关联的随机变量,通过对(y)的不同取值下的(x)建模来得到(P(xmid y=i)),对(y)的直接建模得到(P(y=i)),从而计算出计算(P(y=imid x))。因为我们必须对不同(y)(x)分别建模,这就要求(y)的取值必须是有限的,所以生成学习算法一般用于分类问题。

    高斯判别分析(Gaussian Discriminant Analysismodel)

    高斯判别分析是一种生成学习算法,它假设了输入特征(x in mathbb{R}^n)(y=i)的情况下下服从高斯分布(N(vec mu _i,Sigma))
    上面的高斯分布属于多维高斯分布,(N(mu,Sigma))的概率密度函数定义为$$P(z)=frac{1}{(2pi)^{(D/2)} mid Sigmamid ^{1/2}}exp(-frac12 {(x-mu)}TSigma{-1}(x-mu))$$其中(mu)为均值;(Sigma)为协方差矩阵,有(Sigma=E[(x-mu){(x-mu)}^T])
    我们假设原问题(yin lbrace0,1 brace),服从伯努利分布。则有

    [egin{align*} P(xmid y=0)&=frac{1}{(2pi)^{(D/2)} mid Sigmamid ^{1/2}}exp(-frac12 {(x-mu_0)}^TSigma^{-1}(x-mu_0))\ \ P(xmid y=1)&=frac{1}{(2pi)^{(D/2)} mid Sigmamid ^{1/2}}exp(-frac12 {(x-mu_1)}^TSigma^{-1}(x-mu_1))\ \ P(y)&=phi^y(1-phi)^{1-y} end{align*} ]

    我们要最大化对数似然函数(l(phi,mu_0,mu_1,Sigma)=log{prod_{i=1}^m{P(x^{(i)},y^{(i)})}})
    显然,对数似然函数中的参数可以直接通过统计学的方法得到。

    [egin{align*} phi&=frac{sum_{i=1}^m{1lbrace y^{(i)}=1 brace}}{m}\ \ mu_0&=frac{sum_{i=1}^m{1lbrace y^{(i)}=0 brace x^{(i)}}}{sum_{i=1}^m{1lbrace y^{(i)}=0 brace}}\ \ mu_1&=frac{sum_{i=1}^m{1lbrace y^{(i)}=1 brace x^{(i)}}}{sum_{i=1}^m{1lbrace y^{(i)}=1 brace}} \ \ Sigma&=frac{sum_{i=1}^m{(x^{(i)}-mu_{y^{(i)}}){(x^{(i)}-mu_{y^{(i)}})}^T}}{m} end{align*} ]

    这时,我们对于答案(y)的预测就是

    [egin{align*} argmax(P(ymid x))&=argmax(frac{P(x,y)}{P(x)})\ &=argmax(frac{P(xmid y)P(y)}{P(xmid y=0)P(y=0)+P(xmid y=1)P(y=1)})\ \ &=argmax(P(xmid y)P(y)) end{align*} ]

    (argmax(f(arg)))的值是使(f(arg))最大的(arg)的取值。

    (若x,y无关,那么(P(xmid y))是一个常量,答案就是使(P(y))最大的(y)。)

    高斯判别分析与Logistic回归
    可以证明,若(xmid y=1)(xmid y=0)都属于同一种指数分布族,那么(P(y=1mid x))是Logistic函数。但这个性质反过来并不成立。可以看出高斯判别分析的假设比Logistic回归更强,所以当(xmid y)满足或近似满足高斯分布时,高斯判别分析需要的样本更少,效果更好。但Logistic回归可以用于大部分情况。

    朴素贝叶斯算法(Naive Bayes)

    样例问题:区分垃圾邮件
    如何提取特征:

    • 首先构建一个词典,对于一个邮件根据字典中的词语是否出现来构建特征向量。

    和之前一样,我们要对(P(xmid y))建模。但由于(x)共有(2^n)种特定取值,不能直接计算出各种情况的概率。所以我们做出了一个不太合理的假设:给定(y)时,(x_i)是条件独立的
    所以有

    [egin{align*} P(x_1,x_2,ldots,x_nmid y)&=P(x_1mid y1)P(x_2mid y,x1)cdots P(x_nmid y,x_1,x_2,ldots,x_{n-1})\ \ &=P(x_1mid y)P(x_2mid y)cdots P(x_nmid y) end{align*} ]

    定义

    [egin{align*} phi(imid y=1)&=P(x_i=1mid y=1)\ \ phi(imid y=0)&=P(x_i=1mid y=0)\ \ phi_y&=P(y=1) end{align*} ]

    同样有对数似然函数(l(phi_y,phi(imid y=0),phi(imid y=1))=log{prod_{i=1}^m{P(x^{(i)},y^{(i)})}})
    可以计算出

    [egin{align*} phi(jmid y=1)&=frac{sum_{i=1}^m{1lbrace x^{(i)}_j=1,y^{(i)}=1 brace}}{sum_{i=1}^m{1lbrace y^{(i)}=1 brace}} \ \ phi(jmid y=0)&=frac{sum_{i=1}^m{1lbrace x^{(i)}_j=1,y^{(i)}=0 brace}}{sum_{i=1}^m{1lbrace y^{(i)}=0 brace}} \ \ phi_y&=frac{sum_{i=1}^m{1lbrace y^{(i)}=1 brace}}m end{align*} ]

    注意到,如果字典中的某一个词语(x_r)没有在样本中出现过,那么(P(x_rmid y)=0),那么此时我们求出的(P(ymid x)=frac{P(x,y)}{P(x)}=frac{0}{0}),无法计算。
    而且即使一个词语(x_r)没有在样本中出现过,也并不代表它不会出现,(P(x_r))不应该等于(0)。所以这里我们引入拉普拉斯平滑(Laplace Smoothing)的方法:

    • 假如(y in lbrace 1,2,ldots,k brace),我们令(P(y=j)=cfrac{sum_{i=1}^m{1lbrace y^{(i)}=j brace}+1}{sum_{t=1}^k{left( sum_{i=1}^m{1 lbrace y^{(i)}=t brace} +1 ight)}})

    这样我们就算出了没有在样本中出现的特征的概率,并且使用拉普拉斯平滑可以让我们的概率更具有预测性。

  • 相关阅读:
    使用Mongodb存放文件系统的离线栅格数据,供Cesium访问
    Moogose的基本连接以及增删改查操作
    MongoDB
    Linq对列表进行分组,求和,排序
    ArcEngine对属性表的操作
    ArcEngine打开GDB,SHP的方法
    javaweb之JSP+Servlet
    node.js后端之sequelize
    javascript的闭包
    LeetCode 第133场周赛总结
  • 原文地址:https://www.cnblogs.com/LincHpins/p/6131878.html
Copyright © 2011-2022 走看看