关键词:
Logistic回归是机器学习中非常经典的一个方法,主要用于解决二分类问题,它是多分类问题softmax的基础,而softmax在深度学习中的网络后端做为常用的分类器,接下来我们将从原理和实现来阐述该算法的思想。
1.原理
a.问题描述
考虑二分类问题,利用回归的思想,拟合特征向量到类别标签的回归,从而将分类问题转化为回归问题,通常通过引入Logistic平滑函数实现。
假设已知训练样本集\(D\)的\(n\)个样本\(\{(x_{i},t_{i})| i=1,...,n\}\) ,其中\(t_{i}\in \left \{ 0,1 \right \}\) 为类别标签,\(x_{i} \in R^{d}\) 为特征向量。
b.Logistic函数
Logistic回归需要用到一个重要的Logistic函数,又称为Sigmod函数,Logistic的重要作用就是通过它建立了特征和类别概率的拟合关系,其形式如下:
\(f\left ( x \right )=\frac{1}{1+exp(-x)}\)
对应的图如下所示:
Logistic函数具有以下两个重要的性质:
i: \(f(-x)=1-f(x)\)
ii: \({f}'(x)=f(x)f(-x)=f(x)(1-f(x))\)
c.目标函数
根据Logistic函数,Logistic回归的回归函数为
\(g(x)=\frac{1}{1+exp(w^{\mathit{T}}x)}\)
其中\(w\) 为回归参数。
我们使用到极大似然估计法,因此需要构造关于每个已知样本 \(\left ( x_{i},t_{i} \right )\)的概率密度:
\(P(x_{i},t_{i};w)=\left\{\begin{matrix}
g(x_{i}),t_{i}=1 &\\
1-g(x_{i}),t_{i}=0 &
\end{matrix}\right.=g(x_{i})^{t_{i}}g(x_{i})^{(1-t_{i})}\)
可进一步表示为:
\(P(x_{i},t_{i};w)=g(x_{i})^{t_{i}}(1-g(x_{i})^{(1-t_{i})}\)
有了以上的定义,我们的目标是希望通过寻找合适的\(w\),使得每个样本点的似然概率最大,因此接下来就是构造似然函数,然后通过似然函数构造目标函数。
似然函数的构造的思路是假设样本独立前提下,期望每个样本的似然概率最大,换句话而言就是期望所有样本的似然概率乘积最大,即:
\(p(D|w)=\prod_{i=1}^{n}g(x_{i})^{t_{i}}(1-g(x_{i})^{(1-t_{i})}\)
以上乘积通常求导数非常的困难,容易引入关联的变量,通常通过取负对数(-ln)来将乘积转化为求和,以及最大化转化为最小化形式(最优化问题通常转化为最小化问题),因此上述问题可转化为:
\(E(w)=-\left [ \sum_{i=1}^{n} t_{i}ln(g(x_{i})+(1-t_{i})ln(1-g(x_{i}) \right ]\)
以上公式即为目标函数了。
d.优化算法
该优化问题采用Newton-Raphson迭代优化,迭代公式为:
\(w^{new}=w^{old}-\mathbf{H}^{-1}\triangledown E(w)\)
其中\(\mathbf{H}\)为\(E(w)\) 关于\(w\)的二阶导数矩阵。
\(\triangledown E(w)=\sum_{i=1}^{n}(y_{i}-t_{i})x_{i}=\mathbf{X}^{T}(\mathbf{y}-\mathbf{t})\)
\(\mathbf{H}=\triangledown\triangledown E(w)=\sum_{i=1}^{n}y_{i}(y_{i}-t_{i})x_{i}x_{i}^{T}=\mathbf{X}^{T}\mathbf{A}\mathbf{X}\)
其中\(\mathbf{A}\)为正定矩阵,即:
\(\mathbf{A}=\begin{bmatrix}
g(x_1)(1-g(x_1)) & 0 & \cdots & 0\\
0 & g(x_2)(1-g(x_2)) & \cdots & 0\\
\cdots & \cdots & \ddots & \cdots\\
0 & 0 & \cdots & g(x_n)(1-g(x_n))
\end{bmatrix}\)
由于\(\mathbf{A}\)为正定,因此\(\mathbf{H}\)也为正定矩阵。注意,\(g(x_i)\)的计算基于上一次的估计参数\(w^{old}\)来代入Logisti回归函数求解。
2.实现
我们举一个例子,并通过python编程求解它。问题描述为:一门考试,20位考生花费0~6小时备考。现在希望获悉备考时长与是否通过考试的关系,数据如下表格所示:
数据的解释变量仅仅为1维的学习时间,回归参数为2维向量。拟合的结果为:
\(g(time)=\frac{1}{1+exp(1.5046\cdot time-4.0777)}\)
拟合的效果图如下所示:
\(w\)迭代的梯度变化非常快,五次就能达到非常好的结果,如下所示:
[ 4.54704357] [ 0.19111694] [ 0.2380104] [ 0.01743344] [ 8.45306379e-05] [ 1.95907862e-09] [ 1.90137901e-16] [ 1.90137901e-16] [ 1.90137901e-16] [ 1.90137901e-16]
我们使用了python实现Logistic回归,注意:我们这里对\(\mathbf{H}\)是直接的求逆,如果特征维度很高的情况下,这会消耗较大的计算亮,因此我们可以采用更有效的求解方法,如Cholesky分解法,最后贴上马农最爱的代码:
import numpy as np from matplotlib import pyplot as plt class LogisticClassifier: def __init__(self): print("init"); def logistic(self,Xa,wa): val = 1/(1+np.exp(-Xa.dot(wa))); return val; def train(self,X,t,iter_num): print("start to training"); Xa = np.array(X) xsize = Xa.shape dim = xsize[1]+1 num = xsize[0] Xa = np.c_[Xa,np.ones([num,1])] ta = np.array(t) print dim,num wa = 0.5*np.ones([dim,1]) for it in range(iter_num): ya = self.logistic(Xa,wa) deriv_wa = Xa.T.dot(ya-ta) R = np.diag((ya*(1-ya)).flat) H = Xa.T.dot(R).dot(Xa) delta_w = np.linalg.inv(H).dot(deriv_wa) wa = wa - delta_w; print np.linalg.norm(delta_w.T, 2, 1) #print wa return wa if __name__ == "__main__": print ('This is main of module "hello.py"') logCls = LogisticClassifier(); #construct data X = [[0.5],[0.75],[1],[1.25],[1.5],[1.75],[1.75],[2],[2.25],[2.5],[2.75],[3],[3.25],[3.5],[4],[4.25],[4.5],[4.75],[5],[5.5]] t = [[0],[0],[0],[0],[0],[0],[1],[0],[1],[0],[1],[0],[1],[0],[1],[1],[1],[1],[1],[1]] iter_num = 10; #training weight w = logCls.train(X, t, iter_num) print ("learned weight:\n") print w #draw and show the result pos_t = [x for i, x in enumerate(t) if x == [1]] pos_X = [X[i] for i, x in enumerate(t) if x == [1]] neg_t = [x for i, x in enumerate(t) if x == [0]] neg_X = [X[i] for i, x in enumerate(t) if x == [0]] plt.scatter(pos_X,pos_t,color="r",marker='o',s = 100) plt.scatter(neg_X,neg_t,color="g",marker='o',s = 100) Xfitted = np.array(np.linspace(0,6,100)) XfittedC = np.c_[Xfitted,np.ones([100,1])] Yfitted = logCls.logistic(XfittedC, w) plt.plot(Xfitted.flat,Yfitted.flat,color="b",linewidth= 5) #reset the axes ax = plt.gca() #no bonding box ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') #set as zero ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0.5)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',3)) plt.xlabel("X",fontsize="xx-large") plt.ylabel("t",fontsize="xx-large") plt.title("Logistic method,learned weight:[%f,%f]"%(w[0],w[1]),fontsize="xx-large") plt.legend(["Fitted function","Postive Samples","Negative Samples"],fontsize="xx-large",loc='upper left'); plt.show()
3.参考资料
[1].Logistic回归与梯度下降法
[2].Logistic回归与牛顿迭代法
机器学习-最小二乘法
一、引言这段时间学习《机器学习》,学到第5章的“Logistic回归”,感觉相当吃力。追本溯源,从“Logistic回归”到“线性回归”,再到“最小二乘法”。最终定格到了《高等数学》(第六版·下册)第九章第10节“最小二乘法”... 查看详情
机器学习笔记—logistic回归
本文申明:本系列笔记全部为原创内容,如有转载请申明原地址出处。谢谢序言:whatislogisticregression?Logistics一词表示adj.逻辑的;[军]后勤学的n.[逻]数理逻辑;符号逻辑;[军]后勤学,“回归”是由英国著名生物学家兼统计学家... 查看详情
《机器学习实战》logistic回归算法
=====================================================================《机器学习实战》系列博客是博主阅读《机器学习实战》这本书的笔记也包含一些其他python实现的机器学习算法 查看详情
[机器学习实战]logistic回归
1.Logistic回归: 1)优点:计算代价不高,易于理解和实现; 2)缺点:容易欠拟合,分类精度可能不高; 3)适用数据类型:数值型和标称型数据; 2.分类思想: 根据现有数据对分类边界线建立回归公式,以此... 查看详情
机器学习实战四(logisticregression)
机器学习实战四(LogisticRegression)这一章会初次接触最优化算法,在日常生活中应用很广泛。这里我们会用到基本的梯度上升法,以及改进的随机梯度上升法。Logistic回归优点:计算代价不高,易于理解和实现缺点:容易欠拟合... 查看详情
ng机器学习视频笔记——logistic回归
ng机器学习视频笔记(四)——logistic回归 (转载请附上本文链接——linhxx) 一、概述1、基本概念 logistic回归(logisticregression),是一个分类(classification)算法(注意不是回归算法,... 查看详情
机器学习实战笔记logistic回归
参考链接http://blog.csdn.net/lu597203933/article/details/38468303Logistic代码#Logistic回归分类使用梯度上升找最佳参数importnumpyasnpdefloadDataSet():datMat=[];labelMat=[]fr=open(‘testSet.txt‘)forlineinfr.readlines():lineAr 查看详情
机器学习实战第5章logistic回归
第5章Logistic回归Logistic回归概述Logistic回归虽然名字叫回归,但是它是用来做分类的。其主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。须知概念Sigmoid函数回归概念假设现在有一些数据点,我们用一条直线... 查看详情
logistic回归分类算法原理分析与代码实现
...。集中基于随机梯度上升的逻辑回归分类器能够支持在线学习。 2.但逻辑回归算法缺点很明显-一般只能解决两个类的分类问题。 3.另外逻辑回归容 查看详情
机器学习实战之logistic回归
...2.logistic回归分类函数 一、概述 分类技术是机器学习和数据挖掘应用中的重要组成部分。在数据科学中,大约70%的问题属于分类问题。解决分类问题的算法也有很多种,比如 查看详情
干货机器学习中的五种回归模型及其优缺点
...ewspace-2199810/ 线性和逻辑斯蒂(Logistic)回归通常是是机器学习学习者的入门算法,因为它们易于使用和可解释性。然而,尽管他们简单但也有一些缺点,在很多情况下它们并不是最佳选择。实际上存在很多种回归模型,每种... 查看详情
[机器学习实战-logistic回归]使用logistic回归预测各种实例(代码片段)
[机器学习实战-Logistic回归]使用Logistic回归预测各种实例目录[机器学习实战-Logistic回归]使用Logistic回归预测各种实例本实验代码已经传到gitee上,请点击查收!一、实验目的二、实验内容与设计思想实验内容设计思想三、实验使... 查看详情
mnist机器学习入门
...以TensorFlow为工具,写一个手写体数字识别程序,使用的机器学习方法是Softmax回归。一、Softmax回归的原理 Softmax回归是一个线性的多类分类模型,实际上它是直接从Logistic回归模型转化而来的。区别在于Logistic回归模型为两类... 查看详情
机器学习实战精读--------logistic回归
Logistic回归的主要目的:寻找一个非线性函数sigmod最佳的拟合参数拟合、插值和逼近是数值分析的三大工具回归:对一直公式的位置参数进行估计拟合:把平面上的一些系列点,用一条光滑曲线连接起来logistic主要思想:根据现... 查看详情
机器学习——基础整理:线性回归;二项logistic回归;softmax回归;广义线性模型
...线性模型 二项Logistic回归是我去年入门机器学习时学的第一个模型,我觉得这个模型很适合用来入门(但是必须注意这个模型有很多很多很多很多可以展开的地方)。比较有意思的是那时候还不会矩阵微积分,... 查看详情
机器学习--logistics(代码片段)
摘要1.Logistic回归分类2.梯度下降法3.代码实现与解释 Logistic回归逻辑斯特回归(logisticregression)是一种非常经典的分类方法。其用到的分类函数一般为Sigmoid函数,其函数形式为: 其图形表示如下: 从图中我们可... 查看详情
机器学习_logistic回归和梯度下降
原文:http://blog.csdn.net/dongtingzhizi/article/details/15962797 Logistic回归总结 PDF下载地址:http://download.csdn.net/detail/lewsn2008/65474631.引言 看了Stanford的AndrewNg老师的机 查看详情
机器学习实践之logistic回归
...et/qq_37608890/article/details/78827013)。 本文根据最近学习机器学习书籍网络文章的情况,特将一些学习思路做了归纳整理 查看详情