机器学习总结系列之逻辑回归

线性回归适合连续型的函数拟合任务(也就是回归任务),即对于不同的输入x,输出y所属于的域是一个连续的空间,而对于y是确定的离散的空间的分类任务,比如y只取0,1的二分类问题,仍然使用线性回归的直线拟合无法适应大量输入x而y只限制在0-1的情况,我们需要一种值域在0-1的函数来作为我们的假设函数。

这个函数就是被称为逻辑函数(Logistic Function)或者Sigmoid函数。它的函数表达式如下

\(g(z)=\frac{1}{1+e^{-z}}\)

它的函数图像如下图所示,整个值域在0-1,以z=0时函g(z)=0.5,

假设函数

基于以上,逻辑回归的假设函数是基于Sigmoid函数定义的,参数z是通过\(\theta^Tx\)来定义的,综合起来,其假设函数是

\(h_\theta(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}}\)

并且和线性回归不同的是其假设函数不是最终y的值,而是使用x和\(\theta\)计算出的y=1情况的概率

\(h_\theta(x)=P(y=1|x;\theta)\)
\(h_\theta(x)>=0.5,y=1\)
\(h_\theta(x)<0.5,y=0\)

相比之下,线性回归计算的结果直接是y的值,而逻辑回归计算出来的是y=1的概率,如果这个概率大于0.5,我们就认为结果是1,反之则y=0。根据Sigmoid函数的定义,我们知道当\(\theta^T>=0\)的时候\(h_\theta(x)>=0.5\),我们把这条\(\theta^T>=0\)称为决策边界(decision boundary)

损失函数

如果我们想要想线性回归那样使用梯度下降来计算最优的参数\(\theta\),我们需要构造逻辑回归的损失函数。线性回归的损失函数是假设函数值和真实值平方差的平均值,像下面这样

\(J(\theta_0,\theta_1,\cdots,\theta_n)={{1\over 2m}(h_\theta(x^{(i)})-y^{(i)})^2} \)

这样的一个原因是,如果假设函数的结果和真实结果相差的太大,那么损失函数的值也会增大,而梯度下降就是不断削减这个损失函数的过程。而逻辑回归的真实值y是离散的0和1,而假设函数\( h_\theta(x)\)是y等于1的概率,所以逻辑应该是这样的,当y=1而\( h_\theta(x)\)的概率越小时,损失函数应该变大,对应的,如果y=0而\( h_\theta(x)\)越大时,损失函数应该变大。所以逻辑回归用一个分段函数来表示其损失函数,其中log代表自然对数

\(Cost(h_\theta(x),y)=-log(h_\theta(x)),if(y=1)\)
\(Cost(h_\theta(x),y)=-log(1-h_\theta(x)),if(y=0)\)

这函数的函数图像如下

那么其损失函数等于所有训练集的Cost函数和的平均值

\(J(\theta)=\frac{1}{m}\sum_{i=1}^m Cost(h_\theta(x),y)\)

我们可以将Cost分段函数写成一个函数

\(Cost(h_\theta(x),y)=-ylog(h_\theta(x))-(1-y)log(1-h_\theta(x))\)

\(J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]\)

有了损失函数\(J(\theta)\),我们的目标就是利用训练数据最小化\(J(\theta)\),使用梯度下降法取最优值,对\(J(\theta)\)求导过程如下

推到后其值为

\(\frac{\partial}{\partial\theta_j}=\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{i})-y^{(i)})x_j^{(i)}\)

虽然这里的求导后和线性回归的形式一样,但是这里的\(h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}\),和线性回归是不同的

其优化过程就是迭代的更新\(\theta\),也就是

\(\theta_j=\theta_j-\alpha \frac{\partial}{\partial\theta_j}\)
\(\theta_j=\theta_j-\alpha \frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{i})-y^{(i)})x_j^{(i)}\)

我们可以自己实现梯度下降,也可以使用内置的优化函数fminunc来进行优化,其使用有三步

  1. 给出迭代每一步的计算函数function [jval,gradient]=costFunction(theta)
  2. 给出迭代的选项设置对象options=optimset(‘GradObj’,’on’,’MaxIter’,100)和初始的initialTheta
  3. 使用fminunc获取结果:
    [optTheta,functionVal,exitFlag]=fminunc(@costFunction,initialTheta,options)

多分类问题

多分类问题可以通过二分类问题推广而来,假设有n种分类,那么我们可以对每一个种类训练一个逻辑回归函数,然后取其中的最大值作为分类结果
Class 1:\(h_\theta^{(1)}(x)=P(y=1|x;\theta)\)
Class 2:\(h_\theta^{(2)}(x)=P(y=2|x;\theta)\)
Class 3:\(h_\theta^{(3)}(x)=P(y=3|x;\theta)\)
取\(max(h_\theta^{(i)})\)为最终结果

声明

本文首发表于Wenqi’s Blog,更多技术分享欢迎关注!转载须注明文章出处,已委托维权骑士为本站的文章进行维权,作者保留文章所有权。

坚持原创技术分享,您的支持将鼓励我继续创作!