Logistic Regression and Classification
分类(Classification)与回归都属于监督学习,两者的唯一区别在于,前者要预测的输出变量\(y\)只能取离散值,而后者的输出变量是连续的。这些离散的输出变量在分类问题中通常称之为标签(Label)。
线性回归的策略同样也适用于分类吗?答案是否定的。下面结合例子简要说明理由。假设我们现在的任务是根据肿瘤大小判断是否为良性肿瘤,答案当然只有yes或no。我们用\(y=1\)表示良性肿瘤,用\(y=0\)表示恶性肿瘤。当然,如果你想用其他两个不同的值分别对应这两类肿瘤也是可以的。在下图所示的例子中,我们都使用线性回归的方式进行分类。在左图中,如果样本对应的输出值小于\(0.5\),我们视其为恶性肿瘤,否则为良性肿瘤,分类效果还不错;在右图中,良性肿瘤的大小范围变广了一些,线性模型要发生偏转,如果仍然用\(0.5\)作为分类的阈值(Threshold),误分类的样本所占比例就不少了。另外一方面,该分类问题中\(y\)只能取0或1两种值,而线性模型预测的值去可以远大于1或远小于0,极大地偏离输出变量的值。因此,我们认为用线性回归解决分类问题是不明智的。
![]() |
![]() |
接下来,我们以二分类为基础展开讨论。样本标签\(y\in\{0,1\}\),标签为1的样本称为正样本(Positive Samples),标签为0的样本称为负样本(Negative Samples)。我们希望假设函数\(h_\theta(x)\in[0,1]\),选用logistic函数。下图为logistic函数曲线图,定义域为\((-\infty,+\infty)\),在整个定义域上都连续可导,其一阶偏导如下:
\begin{align}g'(z)&=\frac{d}{dz}\frac{1}{1+e^{-z}}\\&=-\frac{1}{(1+e^{-z})^2}\cdot \frac{d(1+e^{-z})}{dz}\\&=\frac{e^{-z}}{(1+e^{-z})^2}\\&=\frac{1}{1+e^{-z}}\cdot\left(1-\frac{1}{1+e^{-z}}\right)\\&=g(z)(1-g(z))\end{align}

我们的假设函数形式如下:
\begin{equation}h_\theta(x)=g(\theta^Tx)=\frac{1}{1+\exp(-\theta^Tx)}\end{equation}
假设分类问题中的后验概率(posterior probability)形式如下:
\begin{equation}P(y=1|x;\theta)=h_\theta(x)\end{equation}
\begin{equation}P(y=0|x;\theta)=1-h_\theta(x)\end{equation}
综合公式(7)和公式(8),用更紧凑的形式表述:
\begin{equation}P(y|x;\theta)=h_\theta(x)^y(1-h_\theta(x))^{1-y}\end{equation}
假设所有样本相互独立,则似然函数为:\begin{align}L(\theta)&=P(\vec{y}|X;\theta)\\&=\prod_{i=1}^mP(y^{(i)}|x^{(i)};\theta)\\&=\prod_{i=1}^m(h_\theta(x^{(i)})^{y^{(i)}}(1-h_\theta(x^{(i)}))^{1-y^{(i)}}\end{align}
将公式(13)转换为对数似然函数的形式:
\begin{equation}\ell(\theta)=\log L(\theta)=\sum_{i=1}^m y^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))\end{equation}
对数似然函数\(\ell(\theta)\)对参数\(\theta\)求导:
\begin{equation}
\begin{array}{ll}
&\quad\frac{\partial\ell(\theta)}{\partial \theta_i}\\
&=\sum_{j=1}^m\left(y^{(j)}\frac{1}{g(\theta^Tx^{(j)})}-(1-y^{(j)})\frac{1}{1-g(\theta^Tx^{(j)})}\right)\\
&\quad\cdot\frac{\partial}{\partial\theta_i}g(\theta^Tx^{(j)})\\
&=\sum_{j=1}^m\left(y^{(j)}\frac{1}{g(\theta^Tx^{(j)})}-(1-y^{(j)})\frac{1}{1-g(\theta^Tx^{(j)})}\right)\\
&\quad\cdot g(\theta^Tx^{(j)})(1-g(\theta^Tx^{(j)}))\frac{\partial}{\partial\theta_i}\theta^Tx^{(j)}\\
&=\sum_{j=1}^m\left(y^{(j)}(1-g(\theta^Tx^{(j)})-(1-y^{(j)})g(\theta^Tx^{(j)})\right)x_i^{(j)}\\ &=\sum_{j=1}^m(y^{(j)}-h_\theta(x^{(j)}))x_i^{(j)}
\end{array}
\end{equation}
最后,我们可以采用梯度上升(Gradient Ascend)的策略迭代更新参数\(\theta\),以使对数似然函数收敛到最大值,更新规则如下:
\begin{equation}\theta_i=\theta_i+\alpha\sum_{j=1}^m(y^{(j)}-h_\theta(x^{(j)}))x_i^{(j)}\end{equation}
我在数据集ionosphere上做了实验,实验代码在这里下载。该数据集一共有351个样本,每个样本有35个属性,其中第35个属性为'b'或'g'(表示bad或good),是一个二分类问题。我将整个数据集抽取7成作为训练集,剩下的作为测试集,最终得到的正确率为\(91.509\%\)。代码中有两点要说明:1)代码中实际上还考虑了对参数\(\theta\)正则化处理,避免某些参数过大,我们将LGClassifier.m中的lambda设置为0即可屏蔽正则项,在lambda=0.1时,正确率是会有提升的;2)本文中的目标函数是求使似然函数最大的参数,但是我们利用的LBFGS工具包只针对使目标函数最小的优化,我们只需要在文中的目标函数前面添加负号即可将最大化问题等价转化为最小化问题;最后,在针对参数\(\theta\)求倒数的时候,也需要在前面添加负号。
Logistic Regression and Classification的更多相关文章
- Logistic Regression求解classification问题
classification问题和regression问题类似,区别在于y值是一个离散值,例如binary classification,y值只取0或1. 方法来自Andrew Ng的Machine ...
- 使用sklearn和caffe进行逻辑回归 | Brewing Logistic Regression then Going Deeper
原文首发于个人博客https://kezunlin.me/post/c50b0018/,欢迎阅读! Brewing Logistic Regression then Going Deeper. Bre ...
- More 3D Graphics (rgl) for Classification with Local Logistic Regression and Kernel Density Estimates (from The Elements of Statistical Learning)(转)
This post builds on a previous post, but can be read and understood independently. As part of my cou ...
- Some 3D Graphics (rgl) for Classification with Splines and Logistic Regression (from The Elements of Statistical Learning)(转)
This semester I'm teaching from Hastie, Tibshirani, and Friedman's book, The Elements of Statistical ...
- 李宏毅机器学习笔记3:Classification、Logistic Regression
李宏毅老师的机器学习课程和吴恩达老师的机器学习课程都是都是ML和DL非常好的入门资料,在YouTube.网易云课堂.B站都能观看到相应的课程视频,接下来这一系列的博客我都将记录老师上课的笔记以及自己对 ...
- Logistic Regression Using Gradient Descent -- Binary Classification 代码实现
1. 原理 Cost function Theta 2. Python # -*- coding:utf8 -*- import numpy as np import matplotlib.pyplo ...
- Classification week2: logistic regression classifier 笔记
华盛顿大学 machine learning: Classification 笔记. linear classifier 线性分类器 多项式: Logistic regression & 概率 ...
- 机器学习理论基础学习3.3--- Linear classification 线性分类之logistic regression(基于经验风险最小化)
一.逻辑回归是什么? 1.逻辑回归 逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的. logistic回归也称为逻辑回归,与线性回归这样输出 ...
- Classification and logistic regression
logistic 回归 1.问题: 在上面讨论回归问题时.讨论的结果都是连续类型.但假设要求做分类呢?即讨论结果为离散型的值. 2.解答: 假设: 当中: g(z)的图形例如以下: 由此可知:当hθ( ...
随机推荐
- apache开源项目--Sirona
Apache Sirona 为 Java 应用程序提供了一个简单但可扩展的监控解决方案. apache / sirona
- 缓存你的BITMAP对象
在app中通常最占内存.占流量的元素就是图片了,图片往往又无处不在,特别是伴随着list,GridView或者ViewPager出现,这些图片随着你的滑动操作,时而出现在你的屏幕中,时而消失在屏幕之外 ...
- 建立自己的bin目录,在当前路径运行shell脚本
Shell脚本nusers cat nusers #! /bin/sh - who | wc -l 如果你要编写自己的脚本,最好准备自己的bin目录来存放它们,并且让Shell能够自动找到它们.这不难 ...
- 编写高效的C程序与C代码优化 via jobbole
http://blog.jobbole.com/82582/ 原文出处: codeproject 译文出处:CodingWu的博客 欢迎分享原创到伯乐头条
- HDU4738 Caocao's Bridges 无向图的桥
一眼题:找所有的桥,然后求最小权值 但是有很多坑点 1:如果本来不联通 输出0,(这个坑我知道) 2:但是还有一个坑,就是当整个连通,最小桥的权值是0时,也必须派一个人去,wa了无数遍(还是太年轻) ...
- 通过chrome识别手机端app元素--Chrome:inspector
现实中应该有这样一种情况,就是一个app只支持手机端使用,同时他又是hybrid的,那么其中的webview部分的元素属性如何去获得呢? 使用下面的方法可以解决这个问题: 调试 Android Chr ...
- 配置OpenGL及第一个实例
Windows环境下安装GLUT的步骤:1.将下载的压缩包解开,将得到5个文件2.在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VS,则应该是其安装目录下面的“VC\PlatformSD ...
- SystemParametersInfo
Python的模块pywin32中的win32gui.SystemParametersInfo()函数 在使用win32con.SPI_SETDESKWALLPAPER设置Wallpaper时,其第二 ...
- wxWidgets Tutorial
wxWidgets Tutorial网站整理 两个重要的教程网站:1:点这里:2:点这里. 还有一个wxWidgets项目参考的网站:点这里. 已经翻译好的中文教程:点这里. 参考书籍:<wxW ...
- HIbernate学习笔记(六) 关系映射之多对多
六.多对多 - 单向 Ø 一般的设计中,多对多关联映射,需要一个中间表 Ø Hibernate会自动生成中间表 Ø Hibernate使用many-to-ma ...

