李宏毅机器学习课程总结(2)

分类(Classification)

       与回归问题不同,分类问题不需要输出具体的预测的值,只需要输出所输入的数据属于哪个类别。在医疗诊断、手写文字识别、金融贷款和人脸识别等领域有着广泛应用。

       那么要如何进行分类呢?首先要收集数据,尽可能地收集每个类别上的数据。要注意,分类问题并不能使用回归的方法来做,回归对于分类器f好坏的定义与分类中不同,回归会受到大数值的数据影响,使分类器向大数值方向偏转而忽略了在分类器周围的数据。

       对于二元分类问题,需要找到一个f,将数据x输入,根据输出来判断是属于类别1还是类别2。定义损失函数:统计分类器f在训练集上判断错误的次数,找到好的f的方法有:支持向量机(Support Vector Mechine)和感知机(Perceptron)。

       李宏毅老师首先引入了生成(Generative)模型算法,假设出现的数据都服从某一概率分布,即训练集中的数据都是从某一个高斯分布中抽取出来的,要用训练集中的数据分布来估计出该高斯分布中的μ和Σ。要注意的是,所有的高斯分布都能从中抽取出训练集中的这些数据,有区别的是不同高斯分布抽取出这些数据的概率不同,而我们的目标就是找到一个高斯分布,从这个高斯分布中抽取出训练集中的这些数据的概率最大。输入x后,这个高斯分布会输出从中抽取出这个x的概率,越靠近中心点的概率越大。

极大似然估计(Maximum Likelihood)

       高斯分布中的参数有μ和Σ,只需要有μ和Σ,就可以输出抽取出输入x的概率。假设数据集中一共有n个数据项,评判高斯分布的函数即为

                                           \large L(\mu ,\sum )=挑选出\large x_1的概率 * 挑选出\large x_2的概率 * ..... *挑选出\large x_n的概率

式中的L指的是Likelihood,可能性,而不是回归中的损失函数L。我们希望找到能使L值最大的μ*和Σ*。

      在极大似然估计中,

                                                  \large \mu ^* = \frac{1}{n}\sum_{i=1}^{n} x_i,           \large {\sum}^* = \frac{1}{n}\sum_{i=1}^{n} [(x_i^n - \mu ^*)(x_i^n - \mu ^*)^T]

       分布计算类别c1和类别c2的μ*和Σ*,这样就可以利用高斯分布计算p(x|c1)和p(x|c2),运用贝叶斯公式,就可以计算出p(c1|x),即输入一个x,这个x的类别是c1的概率,如果这个概率>0.5,则属于类别c1,否则属于类别c2。

       尝试后发现准确率很低,甚至不如随机分类器,将所有的特征都加入,准确率并没有得到较大提升。原因可能是由于每个类别都要计算一次Σ,而Σ会随着特征的增加而宽高增加,模型会很复杂,计算量很大,容易出现过拟合现象。尝试每个类别共用一个Σ,即每个类别的高斯分布只是μ不相同,共享同一个Σ。

       方法是先计算出每个类别的Σ,在二元分类中就是

                                                                        \large \sum =\frac{n_1}{n}{\sum }_1 + \frac{n_2}{n}{\sum }_2

所以共享的Σ就是所有类别的Σ的平均值。共用Σ以后代入所有的特征进行训练,准确率得到较大提升。同时看到共用Σ后,类别间的分界线(p>0.5?)是线性的。

       这个方法称为朴素贝叶斯模型(Naive Bayesian Model),要使用朴素贝叶斯,就要假设训练数据服从某一概率分布(如高斯分布,伯努利分布等),和每个维度相互独立。如果该假设不成立,使用朴素贝叶斯的话就会产生较大的偏差。

逻辑回归(Logistic Regression)

       在上述的共用一个Σ方法中,得到的分界线是线性的,经过数学推导,贝叶斯公式可以转化为

                                                                                 \large \sigma (z) = \frac{1}{1+exp(-z)}

其中,\large z=w*x+b,x是输入的数据,w和b是参数,可以通过上述的\large \mu _1, \mu _2, \sum算出。那么可不可以直接在训练集上训练出来w和b,而不是通过计算μ和Σ这样绕一圈呢?方法就是逻辑回归,同时也称为判别(Discriminative)模型。

      首先要确定决定一组参数w和b好坏的函数,定义为

                                                       \large L(w,b) = f_{w,b}(x_1)*f_{w,b}(x_2)*(1-f_{w,b}(x_3))*...

其中x1和x2是属于这组w和b所表示的类别,而x3属于另外一个类别。需要找到一组w*和b*,使得上式计算出来的概率最大。为了统一每一数据项的写法,将其中一个类别的\large \hat{y}设为1,另一个设为0,同时再取负自然对数:

                                            \large L(w,b) = -\sum _{i=1}^{n}[y_ilnf_{w,b}(x_i) + (1-y_i)ln(1-f_{w,b}(x_i))]

相当于两个伯努利分布\large y_i\large f_{w,b}(x)计算交叉熵(Cross Entropy),两个分布越接近,输出就越接近0。不能使用回归中的平方差之和来计算损失,平方差之和在分类问题中不论是在目标点近还是远的地方,产生的梯度都非常小,训练需要很多次迭代,参数更新速度很慢。

       所以参数的更新就为

                                                       \large w_{i+1} = w_i - \eta \sum_n -(\hat{y}^n-f_{w,b}(x^n)))*x_i^n

                                                             \large b_{i+1} = b_i - \eta \sum _n-(\hat{y}^n-f_{w,b}(x^n)))

判别模型与生成模型的对比

       判别模型是直接从训练集中训练出w和b,而生成模型是先要计算出每一个类别的μ和共享的Σ,在计算出w和b,而且这两组w和b是不一样的。判别模型中没有做假设,而生成模型中做了诸多假设,如维度是否独立和是否是高斯分布。判别模型通常优于生成模型,生成模型中做了假设使得分类器获得了意料之外的特点。但是判别模型对数据量的需求很大,而生成模型正好相反,在数据量较小时,做了诸多假设的生成模型可能会更好,并且能忽视掉标签错误的数据。

多分类问题

      首先利用逻辑回归计算每个类别的w和b,对于输入x,将x代入每个类别的y值,再将每个类别的y代入softmax中计算,softmax的输出都为正,而且和为1,每一个类别的输出可以看做是属于每个类的概率。评价w和b的好坏同样也是用交叉熵算法。

逻辑回归的限制

       因为逻辑回归产生的是一个线性分类器,在数据集是线性不可分的情况下无法发挥作用,可以进行特征转化,将每个点变化位置变得线性可分,但是通常很难找到一个转化方式。最好是让机器自己来寻找一个正确的转化方式,即先用多组w和b将每个特征变成线性可分,在用一组或多组w和b进行分类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值