机器学习中的逻辑回归到底是回归还是分类

[机器学习]逻辑回归,Logistic regression |分类,Classification
本文是 Andrew Ng 《机器学习》公开课的学习笔记
现实中的例子有 ,垃圾邮件/非垃圾邮件, 肿瘤是良性还是恶性等等。
怎么分类?
我从高中数学积累了一个经验。假设直线方程是 f(x) = 0, &那么直线左边的点带入直线方程左边,得到的结果 & 0;相反,直线 右边的点带入直线方程左边的式子,得到的结果 && 0。
所以,如果我们能找到这样一条直线,使它左边的点 属于 A类,右边的点 属于 B类,那么再有一个新的点进来,我们就可以知道这个点 属于哪一类了!
对,还是找直线(这里为了方面解释,说的是简单的模型。也可以是 多个feature,高次幂等等。)
为什么说是 Regression呢?因为我们用了 linear regression的 hypothesis。&
为什么说是 Logistic呢?因为这里的结果只有 0 和1 (离散的)。linear regression的结果是连续的。
上面仅仅用 & 或者 & 表达的式子,没本法找 costFunction,不能求最优解。于是,伟大的科学家想到了下面这个式子,对 hypothesis做了一个转换
可以看到 转换以后,h(x)的取值范围是 0~1,Z &0 时,h(x) & 0.5。 Z & 0时,h(x) & 0.5。这样我们通过h(x)的取值来判断分类了。
求Theta,当然还是要靠 min CostFunction啦
因为h(x)变化了,costfunction如果采用linear regression的形式,其就不是 convex的了,就不能使用梯度下降法
convex 和non-convex的比较
于是,前辈想到了给 h(x) 加log的方式作为 costFunction,这样的costFunction又变为convex
由上面两个曲线可知,当y=1时,costFunction逐渐减小的办法就是 使 h(x)趋近于1
当y=0时,要costFunction逐渐减小,就是使h(x)趋近于0,这整合我们的意思。
两个式子总归不好求,于是有了下面的合体,而且 求导以后的 式子也是那么的和谐。美!
使用梯度下降法得到的 更新theta的式子,表达上可以跟 linear regression如此的相似,差别只在h(x)上。
其实,从h(x)的取值上来看,我们可以理解为,预测结果为1的概率是h(x)
multi-class classifiation
one-vs-all classification。 一对多分类,就是说,把多类别转换成 2类,A类和余下的所有类。这样就可以采用上述分两类的 logistic regression方法。
通过one-vs-all的方法,对每一类都要训练出一个 hypothesis。
最后通过对多个hypothesis的结果进行比较然后预测
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?机器学习中的逻辑回归到底是回归还是分类?能否用逻辑回归实现连续目标的预测,比如说时间序列?怎么实现? - 知乎131被浏览18225分享邀请回答01 条评论分享收藏感谢收起本文由&@&出品,转载请注明出处。&
文章链接:&
在大多数情况下,线性回归分类并不能较好的判定,如图
其中紫红色的线表示在未出现最右侧样本点的情况下的预测,而当有最右侧点时,线性回归预测变为蓝色线。这时再看中间的一些点,实际结果都与预测的是相反的。鉴于此,较好的方式是说明预测结果的可能性概率。这个时候用到的是逻辑回归分类。
逻辑回归分类利用Sigmoid曲线,可以较好地体现样本分类时,多大地概率可能性接近正或者负分类。
调整参数矩阵,适配不同样本的x向量,使h函数趋近于1或者-1最好了,保证较好地分离。
Sigmoid是一个分界函数,意义是在偏离最小的theta参数下,对新样本进行预测,事实与预期相等的概率。
所以在构造代价函数时,如果结果与预测值相反,无限增大代价函数值;而结果与预测值相同时,代价函数为0。
直接将Sigmoid曲线应用于逻辑回归分类,套用线性回归分类的公式,得到的预测曲线可能不是凸函数,有很多局部最优点(具体的数学理论可以不必太关心)。这时,可以用变形的代价函数。
本文已收录于以下专栏:
相关文章推荐
如果说傅里叶函数是三菱镜,那基于核函数的SVM支持向量机,从直观上理解,就是m(样本数)个基于K(分类的类型数)个类型的结果分类的样本核不断匀速膨胀的肥皂泡(实际中用的不是球形肥皂泡,而是高斯核函数,...
公司没有软件开发流程,几句话描述了需求,然后自己做设计,开发和测试。
我自己先分析需求,然后做数据库设计,以及界面设计,开发,编码,测试,在开发一半的时候,发现数据库表还需要加一个字段,然后后台代码...
LSD直线检测
Windows-7-64
#include #include
class ClimbStairs {
10;//有N级楼梯
C语言指针是经典问题了,还是做错啊~
int main()
int a[4] = {1,2,3,4};
int *p = (int*)(&a+1); // a数组的地址加1,是以a数组的大...
在 LeNet5的深入解析 我们已经对 LetNet-5 网络结构做出了详细的描述,接下来我们将深入分析 Caffe 中怎么使用 LetNet-5 的这个模型进行预测。
Caffe 中关于 LetN...
“完成端口”模型是迄今为止最为复杂的—种I/O模型。然而。假若—个应用程序同时需要管理为数众多的套接字,那么采用这种模型。往往可以达到最佳的系统性能,然而不幸的是,该模型只适用于以下操作系统(微软的)...
机器学习(九)反向传播算法
1、神经网络浅讲:从神经元到深度学习 - 推酷
2、【转】脉络清晰的BP神经网络讲解,赞 - 编程小翁 - 博客园
为了分类,需要计算代价函数、代价函数关于参数的偏导数
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)后使用快捷导航没有帐号?
查看: 1821|回复: 1
手把手教你机器学习算法:逻辑回归(附源码)
金牌会员, 积分 1104, 距离下一级还需 1896 积分
论坛徽章:33
原帖地址:
1、总述逻辑回归是应用非常广泛的一个分类,它将数据拟合到一个logit函数(或者叫做logistic函数)中,从而能够完成对事件发生的概率进行预测。
2、由来要说逻辑回归,我们得追溯到线性回归,想必大家对线性回归都有一定的了解,即对于多维空间中存在的样本点,我们用特征的线性组合去拟合空间中点的分布和轨迹。如下图所示:
线性回归能对连续值结果进行预测,而现实生活中常见的另外一类问题是,分类问题。最简单的情况是是与否的二分类问题。比如说医生需要判断病人是否生病,银行要判断一个人的信用程度是否达到可以给他发信用卡的程度,邮件收件箱要自动对邮件分类为正常邮件和垃圾邮件等等。
当然,我们最直接的想法是,既然能够用线性回归预测出连续值结果,那根据结果设定一个阈值是不是就可以解决这个问题了呢?事实是,对于很标准的情况,确实可以的,这里我们套用Andrew Ng老师的课件中的例子,下图中X为数据点肿瘤的大小,Y为观测结果是否是恶性肿瘤。通过构建线性回归模型,如hθ(x)所示,构建线性回归模型后,我们设定一个阈值0.5,预测hθ(x)≥0.5的这些点为恶性肿瘤,而hθ(x)&0.5为良性肿瘤。
但很多实际的情况下,我们需要学习的分类数据并没有这么精准,比如说上述例子中突然有一个不按套路出牌的数据点出现,如下图所示:
你看,现在你再设定0.5,这个判定阈值就失效了,而现实生活的分类问题的数据,会比例子中这个更为复杂,而这个时候我们借助于线性回归+阈值的方式,已经很难完成一个鲁棒性很好的分类器了。在这样的场景下,逻辑回归就诞生了。它的核心思想是,如果线性回归的结果输出是一个连续值,而值的范围是无法限定的,那我们有没有办法把这个结果值映射为可以帮助我们判断的结果呢。而如果输出结果是 (0,1) 的一个概率值,这个问题就很清楚了。我们在数学上找了一圈,还真就找着这样一个简单的函数了,就是很神奇的sigmoid函数(如下):
如果把sigmoid函数图像画出来,是如下的样子:
Sigmoid Logistic Function从函数图上可以看出,函数y=g(z)在z=0的时候取值为1/2,而随着z逐渐变小,函数值趋于0,z逐渐变大的同时函数值逐渐趋于1,而这正是一个概率的范围。所以我们定义线性回归的预测函数为Y=WTX,那么逻辑回归的输出Y= g(WTX),其中y=g(z)函数正是上述sigmoid函数(或者简单叫做S形函数)。
3、判定边界我们现在再来看看,为什么逻辑回归能够解决分类问题。这里引入一个概念,叫做判定边界,可以理解为是用以对不同类别的数据分割的边界,边界的两旁应该是不同类别的数据。
从二维直角坐标系中,举几个例子,大概是如下这个样子:
有时候是这个样子:
甚至可能是这个样子:
上述三幅图中的红绿样本点为不同类别的样本,而我们划出的线,不管是直线、圆或者是曲线,都能比较好地将图中的两类样本分割开来。这就是我们的判定边界,下面我们来看看,逻辑回归是如何根据样本点获得这些判定边界的。
我们依旧借用Andrew Ng教授的课程中部分例子来讲述这个问题。
回到sigmoid函数,我们发现:当g(z)≥0.5时,z≥0;对于hθ(x)=g(θTX)≥0.5, 则θTX≥0, 此时意味着预估y=1;反之,当预测y = 0时,θTX&0;所以我们认为θTX =0是一个决策边界,当它大于0或小于0时,逻辑回归模型分别预测不同的分类结果。先看第一个例子hθ(x)=g(θ0+θ1X1+θ2X2),其中θ0 ,θ1 ,θ2分别取-3, 1, 1。则当&#+X2≥0时, y = 1; 则X1+X2=3是一个决策边界,图形表示如下,刚好把图上的两类点区分开来:例1只是一个线性的决策边界,当hθ(x)更复杂的时候,我们可以得到非线性的决策边界,例如:这时当x12+x22≥1时,我们判定y=1,这时的决策边界是一个圆形,如下图所示:所以我们发现,理论上说,只要我们的hθ(x)设计足够合理,准确的说是g(θTx)中θTx足够复杂,我们能在不同的情形下,拟合出不同的判定边界,从而把不同的样本点分隔开来。4、代价函数与梯度下降我们通过对判定边界的说明,知道会有合适的参数θ使得θTx=0成为很好的分类判定边界,那么问题就来了,我们如何判定我们的参数θ是否合适,有多合适呢?更进一步,我们有没有办法去求得这样的合适参数θ呢?这就是我们要提到的代价函数与梯度下降了。
所谓的代价函数Cost Function,其实是一种衡量我们在这组参数下预估的结果和实际结果差距的函数,比如说线性回归的代价函数定义为:
当然我们可以和线性回归类比得到一个代价函数,实际就是上述公式中hθ(x)取为逻辑回归中的g(θTx),但是这会引发代价函数为“非凸”函数的问题,简单一点说就是这个函数有很多个局部较低点,如下图所示:而我们希望我们的代价函数是一个如下图所示,碗状结构的凸函数,这样我们算法求解到局部较低点,就一定是全局最小值点。
因此,上述的Cost Function对于逻辑回归是不可行的,我们需要其他形式的Cost Function来保证逻辑回归的成本函数是凸函数。我们跳过大量的数学推导,直接出结论了,我们找到了一个适合逻辑回归的代价函数:
Andrew Ng老师解释了一下这个代价函数的合理性,我们首先看当y=1的情况:如果我们的类别y = 1, 而判定的hθ(x)=1,则Cost = 0,此时预测的值和真实的值完全相等,代价本该为0;而如果判断hθ(x)→0,代价-&∞,这很好地惩罚了最后的结果。而对于y=0的情况,如下图所示,也同样合理:下面我们说说梯度下降,梯度下降算法是调整参数θ使得代价函数J(θ)取得最小值的最基本方法之一。从直观上理解,就是我们在碗状结构的凸函数上取一个初始值,然后挪动这个值一步步靠近较低点的过程,如下图所示:
我们先简化一下逻辑回归的代价函数:
从数学上理解,我们为了找到最小值点,就应该朝着下降速度最快的方向(导函数/偏导方向)迈进,每次迈进一小步,再看看此时的下降最快方向是哪,再朝着这个方向迈进,直至较低点。用迭代公式表示出来的最小化J(θ)的梯度下降算法如下:5、代码与实现
我们来一起看两个具体数据上做逻辑回归分类的例子,其中一份数据为线性判定边界,另一份为非线性。示例1。第一份数据为data1.txt,部分内容如下:
我们先来看看数据在空间的分布,代码如下。
[python] [url=]view plain[/url][url=]copy[/url]from numpy import loadtxt, where
from pylab import scatter, show, legend, xlabel, ylabel
#load the dataset
data = loadtxt('/home/HanXiaoyang/data/data1.txt', delimiter=',')
X = data[:, 0:2]
y = data[:, 2]
pos = where(y == 1)
neg = where(y == 0)
scatter(X[pos, 0], X[pos, 1], marker='o', c='b')
scatter(X[neg, 0], X[neg, 1], marker='x', c='r')
xlabel('Feature1/Exam 1 score')
ylabel('Feature2/Exam 2 score')
legend(['Fail', 'Pass'])
得到的结果如下:
下面我们写好计算sigmoid函数、代价函数、和梯度下降的程序:
[python] [url=]view plain[/url][url=]copy[/url]def sigmoid(X):
'''''Compute sigmoid function '''
den =1.0+ e **(-1.0* X)
gz =1.0/ den
def compute_cost(theta,X,y):
'''''computes cost given predicted and actual values'''
m = X.shape[0]#number of training examples
theta = reshape(theta,(len(theta),1))
J =(1./m)*(-transpose(y).dot(log(sigmoid(X.dot(theta))))- transpose(1-y).dot(log(1-sigmoid(X.dot(theta)))))
grad = transpose((1./m)*transpose(sigmoid(X.dot(theta))- y).dot(X))
#optimize.fmin expects a single value, so cannot return grad
return J[0][0]#,grad
def compute_grad(theta, X, y):
'''''compute gradient'''
theta.shape =(1,3)
grad = zeros(3)
h = sigmoid(X.dot(theta.T))
delta = h - y
l = grad.size
for i in range(l):
sumdelta = delta.T.dot(X[:, i])
grad=(1.0/ m)* sumdelta *-1
theta.shape =(3,)
return grad
我们用梯度下降算法得到的结果判定边界是如下的样子:
最后我们使用我们的判定边界对training data做一个预测,然后比对一下准确率:
[python] [url=]view plain[/url][url=]copy[/url]def predict(theta, X):
'''''Predict label using learned logistic regression parameters'''
m, n = X.shape
p = zeros(shape=(m,1))
h = sigmoid(X.dot(theta.T))
for it in range(0, h.shape[0]):
if h[it]&0.5:
#Compute accuracy on our training set
金牌会员, 积分 1428, 距离下一级还需 1572 积分
论坛徽章:20
强啊。好好学习了强啊。好好学习了机器学习——逻辑回归
这次,我们来谈一谈一种业界应用十分广泛的分类模型,逻辑回归。
逻辑回归虽然名字叫做“回归”,但是事实上它是一个分类模型。我们来看一个例子,说明为什么有了线性回归还需要逻辑回归。
在上面这张图里面,有两条h(x),左边一条是一个合适的模型;但是如果我们在图象非常右边的位置加一个点,这是完全符合逻辑的。但是新的h(x)会大幅度向它偏倚,导致模型不够准确。
对于分类问题来说,只需要预测是或者不是即可,模型取值为0,或者1.
但是线性回归会让模型取值远大于1,或者远小于0.
等等这些原因导致了线性回归不适合用于分类问题。因此为了解决分类问题,引入逻辑回归。它可以让模型的取值在[0,1]之间。
如上图所示,逻辑回归的模型其实就是将线性回归的模型加入到g(z)中,g(z)是sigmod函数。z=θ0+θ1
x+... &。z的内容就是线性回归原来的模型。g(z)的图象是上图右下角的图象,取值在(0,1)之间。
上图表现了新的hθ(x)的含义,比如hθ(x) =
0.7,代表着,如果用θ这个(组)参数,当取值为x时,取值为1的概率是0.7,相应的,取值为0的概率为0.3
为什么要用sigmod函数来替换H(x)呢?在我的理解中,有以下三个理由:
方便。如下图所示,假设我们已经构建好模型了,进行预测,只需要检查z取值,z & 0 分类为1,反之分类为0
又如下图所提出的重要概念:desicion boundary .
假设我们已经得到模型为g(-3 + x1 + x2) 那么desicion boundary 就是-3 + x1 + x2 = 0 .
大于0预测1,小于0预测0.
2. 第二个原因是出在cost function上。相信大家对cost
function还有印象。梯度下降法的实质就是不断地减小cost
function,以期得到完美的模型。但不幸的是,如果我们继续沿用线性回归的cost
function,由于sigmod函数的加入,图象会变成凹函数,如下图左下角所示。这样就有了很多局部最优值,导致梯度下降法无法得到最优解。
其实我们仔细想想,cost
function的实质就是,体现模型和实际的差距。只要cost function达到这样的效果就是好的cost
function:预测的越准,cost function越小,预测的越不准,cost
function越大,且是凸函数,只有全局最优解。
所以,逻辑回归引入了这样的cost function。分别对应y = 1
和 y = 0 的情况。
这两幅图都很明显的表达出来,当模型预测的准确的时候,cost
function取值为0,当完全不准的时候,cost
function取值为正无穷。而且,统计学上可以证明,这个函数是凸函数,只有一个全局最优解。我们可以把这两个分开的式子合并,变成下图求和符号里面的那部分。
在得到这个cost
function之后,又到了熟悉的梯度下降法时间。事实上,你会发现,在应用梯度下降法时,迭代的方程和线性回归完全相同。这也是我认为之所以使用sigmod函数的原因之三(实在太方便了,代码随便改改就好~)。
好了,看到这儿,你已经掌握了如何编写一个逻辑回归。下面我还想谈谈如何处理多分类问题。由于上面我们的结论,全部建立在类别只有两个的前提下。那么,如果是有多个类别,应该怎么处理呢?
如上右图所示,当你有3个类别的时候,我们的处理方法是,one vs
all. 也就是说,当你预测一个类别的时候,所有的其他类一视同仁,都是异类。如下图:
当然,这样你就会得到3个模型,分别计算样本属于三个类别的概率。当需要预测的时候,选择概率最大的那个类别就可以了。
好了,逻辑回归我想记录的就是这些。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信