机器学习 Week2 —— Logistic回归,正则化

2019-05-02  本文已影响0人  Hardy_

之前介绍了线性回归模型,这个模型是用于处理回归问题,接下来介绍一下分类问题的处理。首先介绍二分类问题,举个例子,根据肿瘤大小判断一个肿瘤是良性还是恶性,这个时候对应的类别就是良性/恶性,我们可以将良性记为1,恶性记为0:

Classification problem

对于0-1分类问题,使用线性回归很多时候并不是一个好的办法,我们会得到一条尽可能匹配训练集的直线,但是这条直线大部分情况下是不能很好匹配的,并且会出现结果比0小或者比1大的情况,而在0-1分类问题中我们只有0和1两种结果。

Logistic Regression(Logistic回归)

Logistic 回归是一种分类算法,得出的结果都在0到1之间,首先介绍Logistic回归用于处理二分类问题。同之前一样,我们先看一下它的假设函数(Hypothesis):
线性回归的 Hypothesis 是h(\theta)=\theta^Tx,而 Logistic 回归的 Hypothesis 是h(\theta)=g(\theta^Tx),其中g(z)=\frac{1}{1+e^{-z}}叫做Logistic 函数或者Sigmoid 函数,这个函数的值域是0到1,因此得到的假设函数的值域也是0到1,Sigmoid 函数的图像:

Graph of Logistics Curve

使用这个假设函数,我们就能够对给定的输入数据得到一个位于区间(0,1)的输出结果,但是在二分类问题中,我们想要的结果只能是0或者1中的其中一个,并不包括0到1之间的小数,那么h(\theta)的意义是什么呢。这时我们可以用h(\theta)表示在给定的参数\theta和输入数据x下,y取1的概率,即:
h(\theta)=P(y=1|x,\theta)
比如上面肿瘤的例子中,给定了肿瘤大小,确定了一组参数\theta,通过h(\theta)的公式计算出了h(\theta)=0.7,那么意义就是说这个肿瘤是恶性肿瘤的概率是0.7。在实际应用中,我们可以将h(\theta)>0.5的情况对应分类1,将h(\theta)<0.5的情况对应分类0。
介绍完了 Logistic 回归的假设函数再来简单介绍一下决策边界(Decision Boundary)的概念,在 Logistic 回归中,可以看到我们的决策边界是h(\theta)=0.5,代进h(\theta)的公式其实就是\theta^Tx=0。如果我们用一个具体的例子,就可以看到,决策边界其实表现在可视化的图上面就是一条线,不一定是直线,这条线区分开了我们要判断的两个类别:

Decision Boundary

图中两个类别用叉和圆圈表示,而决策边界就是将\theta^Tx=0展开之后得到的式子。比如上图的\theta^Tx对应-3+x_1+x_2,那么决策边界就是-3+x_1+x_2=0,也就是图中的粉色的直线。

Logistic回归的损失函数

和线性回归模型中的方法一样,想要找到假设函数中最优的参数\theta,我们的方法是建立一个损失函数,把优化目标变为最小化损失函数。对于线性回归,我们使用的损失函数是 Square cost function,但是对于 Logistic 回归,则不能使用 square cost function 作为损失函数,因为只有凸函数(Convex Function)才好下降到最小值,而 Logistic 回归中的 Sigmoid 函数是一个非凸函数(Non-convex Function)。所以我们需要建立一个新的损失函数,让这个新的损失函数是凸函数。
这个新的损失函数为:
\begin{align*} J(\theta)=\frac{1}{m}[\sum_{i=1}^m-\log(h_{\theta}(x))] &\;\;\;\;, y=1 \newline\ J(\theta)=\frac{1}{m}[\sum_{i=1}^m-\log(1-h_{\theta}(x))] &\;\;\;\;, y=0 \end{align*}

根据这个定义,画出它的图像为:


Cost function of Logistic regression

可以看到,这个新的损失函数是符合损失函数的性质的。对于y=1的情况来说,如果h(\theta)=1,那么预测准确,cost 就是0,如图,如果h(\theta)=0,预测不准确,cost 趋近无穷,对于y=0的情况也一样。一种简化版的损失函数可以写成:
J(\theta)=-\frac{1}{m}[\sum_{i=1}^my^{(i)}\log(h(x^{(i)}))+(1-y^{(i)})\log(1-h(x^{(i)}))]

最小化 Logistic 回归的损失函数

接下来我们需要最小化 Logistic 回归的损失函数,第一种方法就是像线性回归模型中一样,使用梯度下降法,那么 Logistic 回归中的梯度下降法的公式和线性回归模型中是一样的,唯一不一样的就是假设函数h(\theta)需要改成 Logistic 回归的假设函数:
\begin{align*}& Repeat \; \lbrace \newline & \; \theta_j := \theta_j - \alpha \dfrac{\partial}{\partial \theta_j}J(\theta) \newline & \rbrace\end{align*}
除了使用梯度下降法最小化损失函数之外,其实还有很多种最小化的方法,比如"Conjugate gradient", "BFGS", 和 "L-BFGS",这些都是更加快速但是更复杂的优化算法。
这里介绍另一种方法,就是使用 Octave 这类编程语言中自带的最小化函数,在 Octave 中,我们可以使用 fminfunc() 函数,只需要给出Cost function 以及参数的初始取值,fminfunc() 函数就可以自动帮我们最小化 Cost function,代码示例:
先定义 cost function:

function [jVal, gradient] = costFunction(theta)
  jVal = [...code to compute J(theta)...];
  gradient = [...code to compute derivative of J(theta)...];
end

然后使用Octave自带的fminfunc()函数进行优化:

options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
   [optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

在多分类问题中使用 Logistic 回归

如果现在不止有两类需要分类,而是有A,B,C,D...多个类别需要分类,这个时候可以使用一对多(One-vs-all)的分类方法,对于每一个类别比如A类别,都使用 Logistic 回归创建一个单独的分类器,这时将这个特定的类别A记为1,其余所有类别B,C,D...都记为0,相当于又回到了二分类中,对于n个类别,一共需要创建n个不同的分类器,第i个分类器的假设记为h^{(i)}_{\theta}(x),得到n个分类器之后,最后判断的时候先使用给定的数据算出所有的h^{(i)}_{\theta}(x),那么每个h^{(i)}_{\theta}(x)其实就代表了给定数据取类别i的概率,然后看哪个h^{(i)}_{\theta}(x)最大,那么就属于哪一类。
比如对于下图例子中的多分类问题,一共有三个类别,我们分别对三角形代表的类别、方框代表的类别和叉代表的类别建立一个分类器,一共得到三个假设函数,分类的时候将三个假设函数的值计算出来,哪个大就属于哪个类别:

One-vs-all

欠拟合和过拟合

接下来介绍一个机器学习中很常用的概念:欠拟合和过拟合

线性回归与 Logistic 回归中的正则化

上一篇下一篇

猜你喜欢

热点阅读