机器学习算法-逻辑回归(LR)
给定多元输入x=(x1,x2,...,xn)T\textbf{x}=(x_1,x_2,...,x_n)^{T},让预测其可能的输出yy。遇到此类问题,稍微学习过高等数学或统计分析的人,大脑中首先闪现的方法肯定是线性回归!找到如下的关系式:
y=f(x)=\textbf{w}^{T}\textbf{x}+w_{0},其中\textbf{w}=(w_1,w_2,...,w_n)
那么任何时候给定任何值,都可以轻而易举地得到对应的输出。虽说线性回归分析简单直观、易于理解,但是如何确定参数w\textbf{w}和w0w_0却是让人头疼的问题。常用的方法就是提前观察到一组输入-输出值:(x1,y1)(\textbf{x}_1,y_1)、(x2,y2)(\textbf{x}_2,y_2)、… 、(xn,yn)(\textbf{x}_n,y_n),再利用优化问题
\arg\min_{\textbf{w},w_0} \frac{1}{n}\sum^{n}_{i=1}L(f(\textbf{x}_i),y_i)
确定参数 w\textbf{w}和 w0w_0( 监督学习)。知道 w\textbf{w}和 w0w_0后就可以用得到的回归关系式愉快的玩耍了。
可回归与分类又有什么关系呢?其实分类问题也是预测问题:给定样本对象值,预测其可能属于的类别。既然同样是预测问题,那便可以用回归的思想来进行建模。不过稍微深入的思考一下便会发现,直接利用线性回归关系进行分类预测是不可取的。因为一般分类问题的可能输出都是离散有限的,而线性回归的输出域却是(−∞,∞)(-\infty,\infty)。在知道了输入对象的值后,明显无法清晰直观的通过回归关系进行类别判定。那是不是回归分析就不能用于预测分类,答案明显是否定的。
虽说线性回归无法直接用于分类预测,但可以对其加层映射:将连续无穷输出映射到指定的有限输出。逻辑回归(Logistic Regression, LR)便是基于此思想在线性回归的结果上加上一个逻辑函数,将连续输出映射到[0,1][0,1]输出。逻辑回归是统计学习中的经典分类方法,通过历史数据的表现对未来结果发生的概率进行预测分类,概率大于一定阈值,输出为1,否则输出为0。
一、逻辑函数
在展开描述逻辑回归之前,先隆重介绍一下逻辑函数。设xx是连续随机变量,则其对应的逻辑函数的数学形式是:
g(x)=\frac{1}{1+\exp(-x)}.
g(x)g(x)的图形是一条S形曲线,该曲线以点(0,12)(0,\frac{1}{2})为中心对称,即满足:
g(-x)-\frac{1}{2}=-g(x)+\frac{1}{2}.
曲线在中心 (0,12)(0,\frac{1}{2})附近增长速度较快,在两端增长速度较慢。具体的形状如下图所示:
二、逻辑回归
利用逻辑函数映射的逻辑回归主要被用于二分类问题(多分类问题会在另外一篇博客中介绍),由条件概率分布P(x|y)P(\textbf{x}|y)表示。其中x\textbf{x}为mm维的取值为实数的随机变量,而随机变量yy的取值被限定为0或1。具体的表达形式是:
P(y=1|\textbf{x})=\frac{\exp(\textbf{w}^{T}\textbf{x}+w_{0})}{1+\exp(\textbf{w}^{T}\textbf{x}+w_{0})},
P(y=0|\textbf{x})=\frac{1}{1+\exp(\textbf{w}^{T}\textbf{x}+w_{0})},
假定现在给出新的样本x\textbf{x},按照上面两个等式可以分别计算出P(y=1|x)P(y=1|\textbf{x})和P(y=0|x)P(y=0|\textbf{x}),如果P(y=1|x)≥P(y=0|x)P(y=1|\textbf{x})\geq P(y=0|\textbf{x}),则样本x\textbf{x}被分到y=1y=1类,如果P(y=1|x)<P(y=0|x)P(y=1|\textbf{x})
,则样本x\textbf{x}被分到y=0y=0类。
三、模型参数估计
如同线性回归一样,要想利用逻辑进行分类预测,需要先获得参数w\textbf{w}和w0w_{0}的值,此时便需要先定义一个评判指标,接下来通过不断地优化此指标以得到参数w\textbf{w}和w0w_{0}。
对于逻辑回归分类问题,可以利用常见的损失函数(Loss function)来构建成本函数(Cost function)作为优化目标。不过0-1损失函数或平方损失函数虽说可以很好地表征其效果,不过二者的结果均是离散的,无法通过有效的优化方法求得结果。
考虑一下逻辑回归的输出定义,可以看到其是以条件概率作为类别的评判准则,那么可以利用极大似然估计法估计模型参数。极大似然原理的直观想法是,一个随机试验如有若干个可能的结果AA,BB,CC,…\ldots ,若在一次试验中,结果AA出现了,那么可以认为实验条件对AA的出现有利,也即出现的概率P(A)P(A)较大。
为简化后续的描述,对于单个样本对象(xi,yi)(\textbf{x}_i,y_i)先做如下设定:
P(y=1|\textbf{x}_i)=p(\textbf{x}_i),则P(y=0|\textbf{x}_i)=1-p(\textbf{x}_i).
将上面两个等式进行合并,可表述为:
P(y_i|\textbf{x}_i)=(p(\textbf{x}_i))^{y_i}(1-p(\textbf{x}_i))^{1-y_i}.
因此对于给定的训练集T={(x1,y1),(x2,y2),…,(xn,yn)}T=\{(\textbf{x}_1,y_1),(\textbf{x}_2,y_2),\ldots,(\textbf{x}_n,y_n)\},似然函数为:
L(\textbf{w},w_{0})=\prod_{i=1}^{n}P(y_i|\textbf{x}_i)=\prod_{i=1}^{n}(p(\textbf{x}_i))^{y_i}(1-p(\textbf{x}_i))^{1-y_i}
通过求解如下优化问题,便可挑选参数w\textbf{w}和w0w_{0}的极大似然估计值w¯\bar{\textbf{w}}和w¯0\bar{w}_{0}:
\bar{\textbf{w}},\bar{w}_{0}=\arg\max_{\textbf{w},w_{0}} L(\textbf{w},w_{0})=\arg\max_{\textbf{w},w_{0}} \prod_{i=1}^{n}P(y_i|\textbf{x}_i).
问题是如何求解上面的优化问题才能把参数w\textbf{w}和w0w_{0}的极大似然估计w¯\bar{\textbf{w}}和w¯0\bar{w}_{0}求出。更多场合是利用lnL(w,w0)\ln L(\textbf{w},w_{0})是L(w,w0)L(\textbf{w},w_{0})的增函数,故lnL(w,w0)\ln L(\textbf{w},w_{0})与L(w,w0)L(\textbf{w},w_{0})在同一点处达到最大值,于是对似然函数L(w,w0)L(\textbf{w},w_{0})取对数对数似然函数为:
\ln L(\textbf{w},w_{0})=\sum_{i=1}^{n}y_i\ln (p(\textbf{x}_i))+(1-y_i)\ln(1-p(\textbf{x}_i)).
这样问题就变成以对数似然函数为目标函数的最优化问题,解如下方程求得极大值,对应的解便是w\textbf{w}和w0w_{0}的估计值:
\frac{\partial \ln L(\textbf{w},w_{0})}{\partial \textbf{w}}=0 和\frac{\partial \ln L(\textbf{w},w_{0})}{\partial w_0}=0.
假设已经求得w\textbf{w}和w0w_{0}的极大似然估计值为w¯\bar{\textbf{w}}和w¯0\bar{w}_{0},那么学习到的逻辑回归模型为:
P(y=1|\textbf{x})=\frac{\exp(\bar{\textbf{w}}^{T}\textbf{x}+\bar{w}_{0})}{1+\exp(\bar{\textbf{w}}^{T}\textbf{x}+\bar{w}_{0})},
P(y=0|\textbf{x})=\frac{1}{1+\exp(\bar{\textbf{w}}^{T}\textbf{x}+\bar{w}_{0})},
四、逻辑回归优缺点
1. 优点:预测结果是界于0和1之间的概率,训练简单、容易使用和解释;可以适用于连续性和类别性自变量。对于类别形自变量,只需要进行数值转换即可,如收入、中、低→\to0、1、2,性别男、女→\to0、1;分类时计算量非常小,速度很快,存储资源低;对多重共线性问题,可以结合正则化来解决。
2. 缺点:当特征空间很大时,逻辑回归的性能不是很好,容易欠拟合;只能处理两分类问题(在此基础上衍生出来的Softmax可以用于多分类),且必须线性可分;对模型中自变量多重共线性较为敏感,例如两个高度相关自变量同时放入模型,可能导致较弱的一个自变量回归符号不符合预期,符号被扭转。需要利用因子分析或者变量聚类分析等手段来选择代表性的自变量,以减少候选变量之间的相关性。
五、逻辑回归R实战
基于IRIS数据集进行测试,不过逻辑回归只支持二分类,因此训练时选取1-100的样本,其中1-50条样本属于setosa类,剩下的50条样本属于versicolor类。
data_sample <- iris[1:100,];
m <- dim(data_sample)[1] #获取数据集记录条数
val <- sample(m, size =round(m/3), replace = FALSE, prob= rep(1/m, m)) #抽样,选取三分之二的数据作为训练集。
iris.learn <- data_sample[-val,] #选取训练集
iris.valid <- data_sample[val,] #选取验证集
logit.fit <- glm(Species~., family = binomial(link = 'logit'), data = iris.learn); real_sort <- iris.valid$Species; #测试数据集实际类别
prdict_res <- predict(logit.fit, type="response", newdata=iris.valid); #预测数据产生概率
res1 <- data.frame(predict=prdict_res, real=real_sort); #查看数据产生概率和实际分类的关系
res2 <- data.frame(predict=ifelse(prdict_res>0.5, "virginica", "versicolor"), real=real_sort); #根据数据产生概率生成预测分类
res3 <- table(data.frame(predict=ifelse(prdict_res>0.5, "virginica", "versicolor"), real=real_sort));
参考资料
- http://blog.sina.com.cn/s/blog_5dd0aaa50102vjq3.html 逻辑回归优缺点
- https://item.jd.com/10975302.html 统计学习方法 李航
- http://blog.csdn.net/comaple/article/details/45062489 R语言数据分析系列之九 - 逻辑回归
机器学习算法-逻辑回归(LR)相关推荐
- 机器学习算法——逻辑回归(LR)
LR是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义.模型清晰,背后的概率学经得住推敲.它拟合出来的参数就代表了每一个特征(feature)对结果的影响. Logisti ...
- 机器学习算法--逻辑回归原理介绍
一.逻辑回归基本概念 1. 什么是逻辑回归 逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏. Log ...
- Python机器学习算法 — 逻辑回归(Logistic Regression)
逻辑回归--简介 逻辑回归(Logistic Regression)就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型 ...
- 机器学习算法(逻辑回归)-Lect02
参考资料: 周志华.<机器学习> 李航.<统计学习方法> cs229 notes 吴恩达机器学习-网易云课堂 1.Logistic回归损失函数的极大似然推导:西瓜书公式3.27 ...
- 从零开始数据科学与机器学习算法-逻辑回归-04
Logistic Regression 更多的是从概率的层面进行建模,但是我们实际应用中,更多的是用在二元分类型的问题 案例: 列子:如上图所示:有两类数据 方形=0 圆形=1 坐标轴 类型: X1 ...
- 【机器学习算法笔记系列】逻辑回归(LR)算法详解和实战
逻辑回归(LR)算法概述 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 逻辑 ...
- 逻辑回归二分类算法python_机器学习第七周--二分类算法逻辑回归
一.Logistic分类算法 逻辑回归(Logistic Regression, LR)是传统机器学习中的一种分类模型,由于算法的简单和高效,解释性好以及容易扩展等优点,被广泛应用于点击率预估(CTR ...
- python机器学习案例系列教程——逻辑分类/逻辑回归LR/一般线性回归(softmax回归)
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 线性函数.线性回归 参考:http://blog.csdn.net/luanpeng825485697/article/details ...
- Machine Learning | (4) Scikit-learn的分类器算法-逻辑回归
Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...
最新文章
- Linux 系统 文件锁 fcntl函数详解
- 【组合数学】生成函数 ( 使用生成函数求解不定方程解个数示例 )
- IO模型(select, poll, epoll的区别和原理)
- 车载电脑中控软件_ 车载手机支架怎么选?教你3招,开车的时候方便快捷
- 怎么样才能更高效的学习区块链
- numpy.ndarray索引/切片方式
- java jar killed_我的Java应用程序被OOMKilled了,原因竟是这样?
- jquery.zclip轻量级复制失效问题
- ZOJ 3985 2017CCPC秦皇岛 E:String of CCPC
- php数组用中文作为键
- JS中改变this指向的两种方法
- 编写第一个操作WORD文档的应用程序
- linux中脚本都是.sh吗,Linux跑脚本用sh和./有什么区别?
- 治愈系书单|林曦《只生欢喜不生愁》
- 路由器被蹭网后,我有被黑的风险吗?
- java返回当年的天数_获取Java中当年剩余的天数
- 内推贴 || Marvell 2021校园招聘火热开启
- Spring Boot 实现苹果支付同步验证
- 证实!对华28nm以下大硅片出口管制已纳入瓦森纳协定
- 计算机网络基础北邮,北邮 大三下 计算机网络技术实践 实验五_图文