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

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

欠拟合和过拟合

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

  • 欠拟合(underfitting)是指得到的模型即使是在训练集上也不能很好地进行预测,更不用说将这个模型用于实际的预测了
  • 过拟合(overfitting)是指模型太过完美地匹配了训练集的数据,但是却不能很好的泛化,对于新数据的预测能力依然不强
    通过下图举个例子,第一张图存在欠拟合的问题,得到的模型连训练集上的点都没有很好的预测,第二张图中的模型比较好,第三章图存在过拟合的问题,模型精准地经过了每一个点,但是却产生了很多复杂的弯曲:
    Underfitting and Overfitting

    所以出现欠拟合和过拟合都是不好的情况,对于过拟合的情况,课程中介绍了两种处理的方法:
  • 减少特征的数量:可以手动去除一些特征,也可以使用自动选择特征的算法
  • 正则化(Regularization):保留所有的特征,但是减小\theta_j的值,用于所有特征都对预测结果有微小贡献的时候,具体的说,使用正则化方法之后的损失函数变为:
    J(\theta)=\frac{1}{2m}[\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^2+\lambda\sum_{j=1}^n\theta_j^2]
    其中\lambda叫做正则化参数,作用是控制\theta_j,让其减小,注意减小的\theta_j是从1开始,\theta_0不受影响。使用正则化的方法,我们可以减轻过拟合问题,使上图中图三的曲线向图二变化。但是,如果正则化参数\lambda选取得过大,会导致曲线继续变平滑,从而导致欠拟合

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

  • 线性回归中的正则化
    在线性回归模型中,我们曾经使用了梯度下降法和 Normal Equation 两种方法来最小化损失函数。在正则化之后,损失函数有所变化,因此无论是使用梯度下降法还是Normal Equation我们的公式都有所变化。对于梯度下降法,\theta_j的更新公式变为:
    \theta_j=\theta_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}
    对于 Normal Equation,\theta的计算方法变为:
    \begin{align*}& \theta = \left( X^TX + \lambda \cdot L \right)^{-1} X^Ty \newline& \text{where}\ \ L = \begin{bmatrix} 0 & & & & \newline & 1 & & & \newline & & 1 & & \newline & & & \ddots & \newline & & & & 1 \newline\end{bmatrix}\end{align*}

  • Logistic回归中的正则化
    和线性回归相似,Logistic 回归中的损失函数变为:
    J(\theta)=-\frac{1}{m}\sum^m_{i=1}[y^{(i)}log(h_{\theta}(x^{(i)}))+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]+\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容