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θ( ...
随机推荐
- mysql qps tps
(1)QPS(每秒Query量) QPS = Questions(or Queries) / seconds mysql > show global status like 'Question% ...
- 【转】iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)-- 不错
原文网址:http://www.cnblogs.com/JuneWang/p/3850859.html iOS页面间传值的方式(NSUserDefault/Delegate/NSNotificatio ...
- Project Euler 26 Reciprocal cycles
题意:求1到n中所有数的倒数中循环小数循环体最长的数 解法:如果一个数的质因子只有2和5,那么这个数的倒数一定不是一个循环小数.如果一个数含有质因子2或5,那么它的循环体和去掉质因子2和5之后的数的循 ...
- 使用VS2010调用matlab的mat格式文件
做实验需要将matlab实现的meanshift的结果中的region的Iabels矩阵,需要把labels.mat读入VS2010中,实现功能,在此把实现过程记录下来. C++读取mat文件的步骤如 ...
- HDU4578 Transformation 线段树
这个题让我重新学习了加 乘 在区间的操作 题解:http://blog.csdn.net/guognib/article/details/25324025?utm_source=tuicool& ...
- iOS 之NSJSONReadingOptions说明【转】
首先用代码来说明NSJSONReadingMutableContainers的作用: NSString *str = @"{\"name\":\"kaixuan ...
- 【转】为什么C++编译器不能支持对模板的分离式编译
出处:刘未鹏(pongba) http://blog.csdn.net/pongba) 首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h ...
- uva 11168
题意:给出平面上的n个点,求一条直线,使得所有点在该直线的同一侧且所有点到该直线的距离和最小,输出该距离和. 思路:要使所有点在该直线的同一侧,明显是直接利用凸包的边更优.所以枚举凸包的没条边,然后求 ...
- PHP与MySQL动态网站开发2
处理HTML表单 <input type="text" name="city"/> 通过$_REQUEST['city'];访问,$_REQUEST ...
- php支持rewrite 时创建.htaccess文件
1.win+r 快捷键 运行中输入cmd 2.进入dos界面:输入copy con .htaccess 3.回车后可以输入内容,再次回车即可产生文件