重点事情说三遍!!!
逻辑回归虽然名字叫回归,但它是正经的分类方法!分类方法!分类方法!
1. 逻辑回归
假如我们已经得到了线性模型,的取值范围可以是(负无穷,正无穷)。但我们不想让它的值这么大,所以我们就将该值压缩到[0,1]。而sigmoid函数就有这个功能,函数表达式如下:
将线性模型带入即可得到:
2. 损失函数
通俗讲,损失函数就是衡量真实值和预测值之间差距的函数。我们希望这个函数越小越好。最小损失是0。
- 当真值为1,模型的预测输出为1时,损失最好为0,预测为0是,损失尽量大。
- 当真值为0,模型的预测输出为0时,损失最好为0,预测为1是,损失尽量大。
所以,我们尽量使损失函数尽量小,越小说明预测的越准确。
Andrew Ng在课程中给出了损失函数如下:
整理一下就是:
对于个样本,总的损失函数可表示为:
上式基于最大似然估计推导而得,详细参见http://www.ai-start.com/ml2014/html/week3.html
3.梯度下降
根据损失函数,我们就可以通过梯度下降求解令其值最小的最优解。重点来了!!
求导可得:
梯度下降算法之外的选择:
除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS)
4. 多分类问题
常用逻辑回归 (logistic regression)来解决二分类问题,当然也可以处理多类别分类问题,叫做"一对多" (one-vs-all) 的分类算法。
假如说你现在需要一个学习算法能自动地将邮件归类到不同的文件夹里,或者说可以自动地加上标签,那么,你也许需要一些不同的文件夹,或者不同的标签来完成这件事,来区分开来自工作的邮件、来自朋友的邮件、来自家人的邮件或者是有关兴趣爱好的邮件,那么,我们就有了这样一个分类问题:其类别有四个,分别用、、、 来代表。
对于二元分类问题,我们的数据看起来可能是像这样:
对于一个多类分类问题,我们的数据集或许看起来像这样:
用3种不同的符号来代表3个类别,我们如何得到一个学习算法来进行分类呢?
我们现在已经知道如何进行二元分类,可以使用逻辑回归,对于直线或许你也知道,可以将数据集一分为二为正类和负类。用一对多的分类思想,我们可以将其用在多类分类问题上。
现在我们有一个训练集,好比上图表示的有3个类别,我们用三角形表示 ,方框表示,叉叉表示 。我们下面要做的就是使用一个训练集,将其分成3个二元分类问题。
我们将多个类中的一个类标记为正向类(),然后将其他所有类都标记为负向类,这个模型记作。接着,类似地第我们选择另一个类标记为正向类(),再将其它类都标记为负向类,将这个模型记作 ,依此类推。 最后我们得到一系列的模型简记为: 其中
最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量即可。
5. 过拟合(overfit)
对于过拟合问题,常采用以下两种方法:
如果我们发现了过拟合问题,应该如何处理?
- 丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA)
- 正则化。 保留所有的特征,但是减少参数的大小(magnitude)。