分类算法之逻辑回归(Logistic Regression)

1.二分类问题

现在有一家医院,想要对病人的病情进行分析,其中有一项就是关于良性\恶性肿瘤的判断,现在有一批数据集是关于肿瘤大小的,任务就是根据肿瘤的大小来判定是良性还是恶性。这就是一个很典型的二分类问题,即输出的结果只有两个值----良性和恶性(通常用数字0和1表示)。如图1所示,我们可以做一个直观的判定肿瘤大小大于5,即为恶心肿瘤(输出为1);小于等于5,即为良性肿瘤(输出为0)。

2.分类问题的本质

分类问题本质上属于有监督学习,给定一个已知分类的数据集,然后通过分类算法来让计算机对数据集进行学习,这样计算机就可以对数据进行预测。以肿瘤的例子来说,已有数据集如图1所示,现在要对一个病人的病情进行诊断,那么计算机只需要将该病人的肿瘤大小和5进行比较,然后就可以推断出是恶性还是良性。分类问题和回归问题有一定的相似性,都是通过对数据集的学习来对未知结果进行预测,区别在于输出值不同。回归问题的输出值是连续值(例如房子的价格),分类问题的输出值是离散值(例如恶性或者良性)。既然分类问题和回归问题有一定的相似性,那么我们能不能在回归的基础上进行分类呢?答案是可以的。一种可行的思路是,先用线性拟合,然后对线性拟合的预测结果值进行量化,即将连续值量化为离散值。

3.分类问题的假设函数

分类问题虽然和回归问题有一定的类似,但是我们并不能直接使用回归问题中的假设函数作为分类问题的假设函数。还是以图1的例子为例,如果我们采用一元线性函数(即\(h(x) = \theta_0+\theta_1x\))去进行拟合的话,结果可能是这样子的:$h_\theta(x) = \dfrac{5}{33}x-\frac{1}{3} $,体现在图片中就是:

这样,你可能会做这样的一个判断:对于这个线性拟合的假设函数,给定一个肿瘤的大小,只要将其带入假设函数,并将其输出值和0.5进行比较,如果大于0.5,就输出1;小于0.5,就输出0。在图1的数据集中,这种方法确实可以。但是如果将数据集更改一下,如图3所示,此时线性拟合的结果就会有所不同:

如果采用相同的方法,那么就会把大小为6的情况进行误判为良好。所以,我们不能单纯地通过将线性拟合的输出值与某一个阈值进行比较这种方式来进行量化。对于逻辑回归,我们的量化函数为Sigmoid函数(也称Logistic函数,S函数)。其数学表达式为:\(S(x) = \dfrac{1}{1+e^{-x}}\) ,其图像如图4:

可以看到S函数的输出值就是0和1,在逻辑回归中,我们采用S函数来对线性拟合的输出值进行量化,所以逻辑回归的假设函数为:

\[h_\theta(x)=\dfrac{1}{1+e^{-\theta^Tx}}=\dfrac{1}{1+e^{-\sum_{i=0}^n\theta_ix_i}} \tag{3.1}\]

其中,\(x\)为增广特征向量(1*(n+1)维),\(\theta\)为增广权向量(1*(n+1)维)。这个假设函数所表示的数学含义是:对于特定的样本\(x\)与参数矩阵\(\theta\),分类为1的概率(假设y只有0和1两类),也就即\(h_\theta(x) = P(y=1|x;\theta)\)。根据其数学意义,我们可以这样认为:如果\(h_\theta(x)>0.5\),则判定y = 1;如果\(h_\theta(x)<0.5\),则判定y = 0。

4.逻辑回归的代价函数(Cost Function)

代价函数(成本函数),也就是损失函数。在逻辑回归中,代价函数并不是采用均方误差(主要原因是,逻辑回归的均方误差并不是一个凸函数,并不方便使用梯度下降法),而是通过极大似然法求解出来的一个函数,其数学表达式为:

\[J(\theta)= \dfrac{1}{m}\sum_{i=1}^m[-yln(h_\theta(x))-(1-y)ln(1-h_\theta(x))] \tag{4.1}\]

这个函数看起来有点复杂,我们将它一步步进行拆分来理解,我们将每个样本点与假设函数之间的误差记为\(Cost(h_\theta(x),y)=-yln(h_\theta(x))-(1-y)ln(1-h_\theta(x))\),这样代价函数就可以理解为误差的均值。下面我们再详细看一下这个误差函数,由于y的取值只能是0或者1,我们可以将误差函数写成分段函数的形式:

\[Cost(h_\theta(x),y)=\begin{cases} -ln(h_\theta(x)),\quad &y = 1 \\ -(1-y)ln(1-h_\theta(x)), &y=0 \end{cases} \tag{4.2}\]

4.2式和4.1式是等价的,依据4.2式,不难得出:当y=1时,如果判定为y=1(即\(h_\theta(x) = 1\)),误差为0;如果误判为y=0(\(即h_\theta(x) = 0\)),误差将会是正无穷大。当y=0时,如果判定为y=0(即\(h_\theta(x) = 0\)),误差为0;如果误判为y=1(即\(h_\theta(x) = 1\)),误差将会是正无穷大。(注意:\(h_\theta(x) = 1\)表示y等于1的概率为1,等价于认为y=1;\(h_\theta(x) = 0\)表示y等于1的概率为0,等价于认为y=0)

如果用矩阵来表示代价函数,就是:

\[J(\theta)=-\dfrac{1}{m}Y^Tln(h_\theta(X))-(E-Y)^Tln(E-h_\theta(X)) \tag{4.3}\]

其中\(Y\)为样本真实值组成的列向量(m*1维),\(X\)为增广样本矩阵((1+n)*m维),E为全1列向量(m*1维)。

5.逻辑回归使用梯度下降法

逻辑回归的代价函数和线性回归的损失函数一样,都是凸函数,所以我们可以采用梯度下降法来求参数矩阵\(\theta\)使得代价函数\(J(\theta)\)取得最小值。其具体算法与线性回归中的梯度下降法(可以参考我的另一篇博客线性回归之梯度下降法)并没有太大区别,只是对应的偏导有所不同。逻辑回归的代价函数的偏导为:

\[\dfrac{\partial J(\theta)}{\theta_i} = \dfrac{1}{m}\sum_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})x_i^{(j)} = \dfrac{1}{m}\sum_{j=1}^m(\dfrac{1}{1+e^{-\sum_{i=0}^n\theta_ix_i^{(j)}}}-y^{(j)})x_i^{(j)}\quad (i=0,1,\dots,n)\tag{5.1}\]

对应的参数更新规则为:

\[\theta_i = \theta_i-\alpha\dfrac{\partial J(\theta)}{\theta_i} = \theta_i-\alpha\dfrac{1}{m}\sum_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})x_i^{(j)}\quad (i=0,1,\dots,n)\tag{5.2}\]

如果用矩阵表示就是:

\[\dfrac{\partial J(\theta)}{\theta} = \dfrac{1}{m}X^T(h_\theta(X)-Y),\quad \theta=\theta-\alpha\dfrac{1}{m}X^T(h_\theta(X)-Y) \tag{5.3}\]

其中,\(\alpha\)为迭代步长。

6.多元逻辑回归

对于多元逻辑回归,一种可行的思路是将其简化为二元。例如,如果数据集的分类包含1,2,3这三个类别。如果现在要判断一个样本是不是类1,我们可以将数据集看作是两类----即1类和非1类(将类2和类3),这样我们就可以求得针对类1的假设函数\(h^{(1)}_\theta(x)\),同理还有\(h^{(2)}_\theta(x)\)和\(h^{(3)}_\theta(x)\)。这样我们的判定规则就变为:

\[if \quad max\{h^{(i)}_\theta(x)\} = h^{(j)}_\theta(x), then \quad y = j\quad(i,j=1,2,3) \tag{6.1}\]

7.小结

虽然逻辑回归中带有“回归”二字,但其实它是一个分类算法。逻辑回归的思想和模式识别中的判别函数非常相似,两者可以结合起来进行学习。

参考链接:

逻辑回归原理小结

分类算法之逻辑回归(Logistic Regression的更多相关文章

  1. 机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识, ...

  2. 机器学习总结之逻辑回归Logistic Regression

    机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问 ...

  3. Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)” 清晰讲解logistic-good!!!!!!

    原文:http://52opencourse.com/125/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D ...

  4. 机器学习 (三) 逻辑回归 Logistic Regression

    文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...

  5. ML 逻辑回归 Logistic Regression

    逻辑回归 Logistic Regression 1 分类 Classification 首先我们来看看使用线性回归来解决分类会出现的问题.下图中,我们加入了一个训练集,产生的新的假设函数使得我们进行 ...

  6. 逻辑回归(Logistic Regression)详解,公式推导及代码实现

    逻辑回归(Logistic Regression) 什么是逻辑回归: 逻辑回归(Logistic Regression)是一种基于概率的模式识别算法,虽然名字中带"回归",但实际上 ...

  7. 机器学习(四)--------逻辑回归(Logistic Regression)

    逻辑回归(Logistic Regression) 线性回归用来预测,逻辑回归用来分类. 线性回归是拟合函数,逻辑回归是预测函数 逻辑回归就是分类. 分类问题用线性方程是不行的   线性方程拟合的是连 ...

  8. 机器学习入门11 - 逻辑回归 (Logistic Regression)

    原文链接:https://developers.google.com/machine-learning/crash-course/logistic-regression/ 逻辑回归会生成一个介于 0 ...

  9. SparkMLlib学习分类算法之逻辑回归算法

    SparkMLlib学习分类算法之逻辑回归算法 (一),逻辑回归算法的概念(参考网址:http://blog.csdn.net/sinat_33761963/article/details/51693 ...

随机推荐

  1. 项目一:ssm超市订单管理系统

    声明:项目参考于课程教材,学习使用,仅在此记录 项目介绍 ssm超市订单管理系统,功能模块有订单管理,供应商管理,用户管理,密码修改,退出系统,管理模块中包括基本的增删改查 集成工具使用idea,基于 ...

  2. BZOJ 4392 卡牌游戏

    Description 奶牛贝茜是卡牌游戏的狂热爱好者, 但是令人吃惊的, 她缺乏对手. 不幸的是, 任何牧 群里的其他牛都不是好对手. 他们实在是太差了 , 实际上, 他们玩卡牌游戏时会遵循一种完全 ...

  3. bugku 各种·绕过

    点开是一段PHP的代码,先来审计一波代码. 发现将uname和passwd用sha1进行了加密,那么我们只要绕过这个函数构造相等就可以了. 可以使这两个值sha1的值相等,但他们本身的值又不等.(想详 ...

  4. django安装以及配置

    一.django的安装和启动 1.安装 pip3 install django==1.11.22 目前来讲1.11.22版本比较稳定 2.django的创建 命令行:cmd先去到django创建目录, ...

  5. 权限维持-wmi事件

    0x01 前言 WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具),提供了从命令行接口和批命令脚本执行系统管理的支持. 在2015年的b ...

  6. 微信小程序之媒体查询@media

    微信小程序支持媒体查询,代码如下: @media screen and (min-width: 700px) { .container { padding: 30rpx; } } @media scr ...

  7. pytest中unicode编码问题(如test_fix.py::Test1::test_s1[\u6d4b\u8bd5-\u6d4b\u8bd5])

    现象: 采用如下方式可将其正确显示为中文 ss = r"test_fix.py::Test1::test_s1[\u6d4b\u8bd5-\u6d4b\u8bd5]" print( ...

  8. spring boot 中的路径映射

    在spring boot中集成thymeleaf后,我们知道thymeleaf的默认的html的路径为classpath:/templates也就是resources/templates,那如何访问这 ...

  9. 玩转 RTC时钟库 DS3231

    1.前言     接着博主的上一篇 玩转 RTC时钟库 + DS1302,这一篇我们重点讲解DS3231时钟模块.没有看过上一篇的同学,麻烦先去阅读一下,因为很多理论基础已经在上一篇做了详细讲解,这里 ...

  10. qt 计时器自动刷新图片

    计时器 QTimer *timer; timer->start (); void PictureShow::stopStartPage() { if (timer->isActive()) ...