1. 两类Logistic回归

Logistic回归是一种非常高效的分类器。它不仅可以预测样本的类别,还可以计算出分类的概率信息。

不妨设有$n$个训练样本$\{x_1, ..., x_n\}$,$x_i$是$d$维向量,其类别标签是$\{y_1, ..., y_n\}$。对于一个$c$类问题,$y_i \in \{1, 2, ..., c\}$。Logistic回归学习这样一个函数

\begin{equation}
f(x) = g(\theta^T x) = \frac{1}{1+e^{-\theta^T x}}
\end{equation}
其中,
\begin{equation}
g(z) = \frac{1}{1+e^{-z}}
\end{equation}
被称为Logistic函数或者Sigmoid函数。

设$x=[x^{(1)}, ..., x^{(d)}]^T$。实际上,$\theta^T x$这儿应该写成$\theta_0 + \theta^T x$($\theta$是$d$维向量),要有个常数项。但是为了方便,我们设$x^{(0)}=1$,所以$\theta_0 + \theta^T x$可以直接写作$\theta^T x$,而此处的$\theta$是$d+1$维向量,即$\theta^T x = \sum_{j=0}^d \theta_j x^{(j)}$。

可以看出来,当$z$无穷大时,$g(z)$趋于1;当$z$无穷小时,$g(z)$趋于0;当$z=0$时,$g(z)=0.5$。 $g(z)$的值域是$[0, 1]$,所以$f(x)$的值域也是$[0, 1]$。

首先我们考虑$2$类问题,设
\begin{equation}
P(y=1|x,\theta) = f(x)
\end{equation}
即对于给定的样本$x$,其属于类别$1$的概率是$f(x)$。则属于类别$0$的概率是
\begin{equation}
P(y=0 | x,\theta) = 1-f(x)
\end{equation}

上述概率也可以写作
\begin{equation}
P(y | x,\theta) = f(x)^y (1-f(x))^{1-y}
\end{equation}

Logistic回归具有如下的特点。一个事件发生的机率(odds)定义为事件发生的概率与不发生的概率的比值。设$p=P(y=1|x,\theta)$,那么事件的机率是$\frac{p}{1-p}$。其对数函数是
\begin{equation}
log \frac{p}{1-p} = log \frac{P(y=1|x,\theta)}{1-P(y=1|x,\theta)} = \theta x
\end{equation}
可以看出,输出类别$1$的对数机率是输入$x$的线性函数。

此外,后验概率也可以写作如下形式:
\begin{equation}
\begin{aligned}
& P(y=1 | x,\theta) = \frac{e^{\theta^T x}}{1+e^{\theta^T x}} \\
& P(y=0 | x,\theta) = \frac{1}{1+e^{\theta^T x}}
\end{aligned}
\end{equation}
(这与下文将到的多类形式一致)

学习or训练的过程就是通过训练数据,来求解出最优的参数$\theta$。而预测的方法是计算后验概率$P(y | x,\theta)$,如果大于$0.5$,则预测为类别$1$;否则为类别$0$。

以下使用极大似然估计方法来求解参数。参数$\theta$的似然函数是:
\begin{equation}
\begin{aligned}
L(\theta) & = \prod_{i=1}^{n} P(y_i | x_i, \theta) \\
& = \prod_{i=1}^{n} f(x_i)^{y_i} (1-f(x_i))^{1-y_i}
\end{aligned}
\end{equation}

最大化似然函数往往比较困难,可以通过最大化对数似然函数来求解。$\theta$的对数似然函数是:
\begin{equation}
\begin{aligned}
\ell(\theta) & = \log L(\theta) \\
& = \log \prod_{i=1}^{n} f(x_i)^{y_i} (1-f(x_i))^{1-y_i} \\
& = \sum_{i=1}^{n} \log f(x_i)^{y_i} (1-f(x_i))^{1-y_i} \\
& = \sum_{i=1}^{n} y_i \log f(x_i) + (1-y_i) \log (1-f(x_i))
\end{aligned}
\end{equation}

实际上,代价函数的形式是:
\begin{equation}
J(\theta) = -\frac{1}{n} \sum_{i=1}^{n} y_i \log f(x_i) + (1-y_i) \log (1-f(x_i))
\end{equation}
所以最小化代价函数就等价于最大化似然估计。

可以通过梯度下降法来求解$l(\theta)$的极大值。即
\begin{equation}
\theta := \theta + \alpha \nabla_{\theta} \ell(\theta)
\end{equation}

\begin{equation}
\begin{aligned}
\frac{\partial}{\partial \theta_j} \ell(\theta) & = \frac{\partial}{\partial \theta_j} \sum_{i=1}^{n} y_i \log g(\theta^Tx_i) + (1-y_i) \log (1-g(\theta^Tx_i)) \\
& = \sum_{i=1}^n (y_i \frac{1}{g(\theta^T x_i)} - (1-y_i) \frac{1}{1-g(\theta^T x_i)}) \frac{\partial}{\partial \theta_j} g(\theta^T x_i) \\
& = \sum_{i=1}^n (y_i \frac{1}{g(\theta^T x_i)} - (1-y_i) \frac{1}{1-g(\theta^T x_i)}) g(\theta^T x_i) (1- g(\theta^T x_i))\frac{\partial}{\partial \theta_j} \theta^Tx_i \\
& = \sum_{i=1}^n (y_i (1- g(\theta^T x_i)) - (1-y_i)g(\theta^T x_i)) x_i^{(j)} \\
& = \sum_{i=1}^n (y_i - f(x_i)) x_i^{(j)}
\end{aligned}
\end{equation}
$x_i^{(j)}$是第$i$个样本的第$j$个特征。

所以,对于参数$\theta$向量中的任一元素$\theta_j$,迭代方式如下:
\begin{equation}
\theta_j := \theta_j + \alpha \sum_{i=1}^n (y_i - f(x_i)) x_i^{(j)}
\end{equation}
如此,便可将全部参数求解出来。

此外,Logistic回归的求解也可以采用Newton迭代法等。

2. 正则化
在机器学习中,正则化是非常常用的方法。它用来约束模型的参数,使得求解出来的参数不会太大(模型不能过于复杂),以防止过拟合。

Logistic回归经常加入$\ell_1$正则或者$\ell_2$正则。参数求解的问题转变为:
\begin{equation}
\underset{\theta}{\arg \max} \;\; \ell(\theta) - \alpha \|\theta\|^2
\end{equation}

3. 多类情况

%可以换一种角度来理解Logistic回归。一个事件发生与不发生的比值被称为机率(odds)。假设发生的概率是$p$,那么发生的几率是$p/(1-p)$。几率越大,发生的可能性越大。

面向多类分类问题的Logistic回归,也叫softmax regression。假设是一个$c$类问题,则类别标签$y_i \in \{1, ..., c\}$。 使用one-vs-all策略可以将两类分类器扩展为多类分类器,即将选取任意一类,再将其它所有类看成是一类,构建一个两类分类器,这样一共需要$c$个分类器。

定义
\begin{equation}
\begin{aligned}
P(y=1 | x) &= \frac{e^{\theta_1^T x}}{\sum_{k=1}^{c}e^{\theta_k^T x}} \\
P(y=2 | x) &= \frac{e^{\theta_2^T x}}{\sum_{k=1}^{c}e^{\theta_k^T x}} \\
&... \\
P(y=c | x) &= \frac{e^{\theta_c^T x}}{\sum_{k=1}^{c}e^{\theta_k^T x}}
\end{aligned}
\end{equation}

该模型有这样一个性质,对于所有参数$\theta_i$,加上一个向量$v$,后验概率的值不变。即
\begin{equation}
\begin{aligned}
\frac{e^{(\theta_1+v)^T x}}{\sum_{k=1}^{c}e^{(\theta_k+v)^T x}} & = \frac{e^{\theta_1^T x + v^T x}}{\sum_{k=1}^{c}e^{\theta_k^T x + v^T x}} \\
& = \frac{e^{\theta_1^T x} e^{v^T x}}{\sum_{k=1}^{c} e^{\theta_k^T x} e^{v^T x}} \\
& = \frac{e^{\theta_1^T x}}{\sum_{k=1}^{c} e^{\theta_k^T x}}
\end{aligned}
\end{equation}

我们设$v=\theta_c$, 则新的参数为
\begin{equation}
\begin{aligned}
& \theta_1 = \theta_1 - \theta_c \\
& ... \\
& \theta_{c-1} = \theta_{c-1} - \theta_c \\
& \theta_c = 0
\end{aligned}
\end{equation}

则多类Logistic回归模型可写作
\begin{equation}
\begin{aligned}
P(y=1 | x) &= \frac{e^{\theta_1^T x}}{1 + \sum_{k=1}^{c-1}e^{\theta_k^T x}} \\
&... \\
P(y=c-1 | x) &= \frac{e^{\theta_{c-1}^T x}}{1 + \sum_{k=1}^{c-1}e^{\theta_k^T x}} \\
P(y=c | x) &= \frac{1}{1 + \sum_{k=1}^{c-1}e^{\theta_k^T x}}
\end{aligned}
\end{equation}

加入正则项后的代价函数可以表述为
\begin{equation}
J(\theta) = -\frac{1}{m} \left(\sum_{i=1}^n \sum_{k=1}^c 1\{y_i=k\} log\frac{\theta_k x_i}{\sum_{l=1}^c \theta_l^T x_i} \right)
\end{equation}
其中,$1\{y_i=k\}$是指示函数,若$y_i=k$为真,则等于$1$,否则等于$0$。

对于参数的求解,与两类问题的求解方法一样。

Logistic Regression分类器的更多相关文章

  1. 快速用梯度下降法实现一个Logistic Regression 分类器

    前阵子听说一个面试题:你实现一个logistic Regression需要多少分钟?搞数据挖掘的人都会觉得实现这个简单的分类器分分钟就搞定了吧? 因为我做数据挖掘的时候,从来都是顺手用用工具的,尤其是 ...

  2. Logistic Regression - Formula Deduction

    Sigmoid Function \[ \sigma(z)=\frac{1}{1+e^{(-z)}} \] feature: axial symmetry: \[ \sigma(z)+ \sigma( ...

  3. Stanford机器学习笔记-2.Logistic Regression

    Content: 2 Logistic Regression. 2.1 Classification. 2.2 Hypothesis representation. 2.2.1 Interpretin ...

  4. 在opencv3中实现机器学习之:利用逻辑斯谛回归(logistic regression)分类

    logistic regression,注意这个单词logistic ,并不是逻辑(logic)的意思,音译过来应该是逻辑斯谛回归,或者直接叫logistic回归,并不是什么逻辑回归.大部分人都叫成逻 ...

  5. Machine Learning - 第3周(Logistic Regression、Regularization)

    Logistic regression is a method for classifying data into discrete outcomes. For example, we might u ...

  6. (四)Logistic Regression

    1 线性回归 回归就是对已知公式的未知参数进行估计.线性回归就是对于多维空间中的样本点,用特征的线性组合去拟合空间中点的分布和轨迹,比如已知公式是y=a∗x+b,未知参数是a和b,利用多真实的(x,y ...

  7. Python实践之(七)逻辑回归(Logistic Regression)

    机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习算法与Pyth ...

  8. Logistic Regression(逻辑回归)(二)—深入理解

    (整理自AndrewNG的课件,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 上一篇讲解了Logistic Regression的基础知识,感觉 ...

  9. Logistic Regression 模型简介

    逻辑回归(Logistic Regression)是机器学习中的一种分类模型,由于算法的简单和高效,在实际中应用非常广泛.本文作为美团机器学习InAction系列中的一篇, 主要关注逻辑回归算法的数学 ...

随机推荐

  1. 【自己给自己题目做】:如何在Canvas上实现魔方效果

    最终demo -> 3d魔方 体验方法: 浮动鼠标找到合适的位置,按空格键暂停 选择要翻转的3*3模块,找到相邻两个正方体,鼠标点击第一个正方体,并且一直保持鼠标按下的状态直到移到第二个正方体后 ...

  2. zabbix 监控MySQL

    现在我来说一下我的监控环境 zabbix-3.0.3 MySQL-5.6.23 1.首先我们要登录MySQL,创建一个监控MySQL的用户 GRANT USAGE,PROCESS,SUPER,REPL ...

  3. git 最常用命令

    新建分支 git branch a #分支名称为a 切换到develop分支 git checkout a 新建分支并切换 git checkout -b a 推送到远程分支 git push ori ...

  4. 【BZOJ 2115】【WC 2011】Xor

    计算1到n的一条路径使得路径上的值xor和最大. 先任意走一条路径计算xor和,然后dfs的时候处理出所有的环的xor和,这样对于所有的环的xor和求线性基,在任意走出的路径的xor和上贪心即可. 正 ...

  5. 【51NOD 1478】括号序列的最长合法子段

    很恶心啊,一道水题改了半天,主要是各种细节没有注意到,包括左括号剩余时有可能会出错的情况,需要从后往前扫 贡献一组测试数据: ((()))())(())(( 答案:8 1 #include<cs ...

  6. Mybatis 操作数据库的主键自增长

    本篇文章将研究mybatis 实现oracle主键自增的机制 首先我们看对于同一张student表,对于mysql,sql server,oracle中它们都是怎样创建主键的 在mysql中 crea ...

  7. bootstrap-fileupload-上传文件控件

    官方github:https://github.com/kartik-v/bootstrap-fileinput 官方dome网站:http://plugins.krajee.com/file-bas ...

  8. js-设置焦点

    function CheckForm() { if(document.form1.trainingName.value==""){ alert("培训班名称不能为空!&q ...

  9. 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合

    背水一战 Windows 10 之 绑定 通过 Binding 绑定对象 通过 x:Bind 绑定对象 通过 Binding 绑定集合 通过 x:Bind 绑定集合 示例1.演示如何通过 Bindin ...

  10. 【BZOJ-2438】杀人游戏 Tarjan + 缩点 + 概率

    2438: [中山市选2011]杀人游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1638  Solved: 433[Submit][Statu ...