|
|
|
|
移动端
创建专栏

机器学习虾扯淡之Logostic回归

大家好我是小蕉。不知道小伙伴有没有什么意见建议,是不是发现每个字都看得懂,但是全篇都不知道在说啥?哈哈哈哈哈哈,那就对了。

作者:大蕉|2017-09-01 13:19

有奖调研 | 1TB硬盘等你拿 AI+区块链的发展趋势及应用调研


0x00 前言

大家好我是小蕉。上一次我们说完了线性回归。不知道小伙伴有没有什么意见建议,是不是发现每个字都看得懂,但是全篇都不知道在说啥?哈哈哈哈哈哈,那就对了。

这次我们来聊聊,有小伙伴说,那我如果我么想把结果分为两拨,就这样的,咋办?

大蕉大笔一挥。啊这不是分好了吗?

我敢说,现在百分之很多十(目测七八十)说自己在做人工智能的,都只是用Logistic回归在做分析。

“就你事多。我不会分。”

“想学啊你?我教你啊。”

0x01 Logistic是啥玩意

想法大概是这样。把数据映射到Logistic函数上边,大于0.5我们就认为是类别y1 = 0,小于0.5我们认为是类别y2 = 1。

  1. y ∈ {0 , 1} 

这个函数长啥样?就长下面这样。

  1. π (x) = 1 / ( 1 + exp (-x)) 

所以我们在这种情况下,观察到各个样本的概率长下面这样。

  1. P( Y = 1 | x ) = 1 / ( 1 + exp (-x))  
  2. P( Y = 0 | x ) = 1 / ( 1 + exp (x)) 

所以比值比ODD 长这样

  1. odd = P( Y = 1 | x ) / P( Y = 0 | x ) = exp (x) 

对数比值比刚刚好

  1. ln odd = x 

你说神不神奇!!当然我们不仅仅只有一个参数是吧?所以对原始数据变成

  1. g(x) = θ.T * x + b 

其中θ是一个N维的向量,跟每一个样本X的维度保持一致这样。

所以LR的映射函数做一下线性变换就变成这样了。

  1. π (x) = 1 / ( 1 + exp (-g(x))) 

到这里,我们已经知道Logistic回归是什么鸟了,其实就是把数据映射到Logistic函数上,根据概率来进行分类。

0x02 极大似然估计

那我们要怎么得到损失函数loss呢?不要急跟大蕉一步一步来。

上面我们已经看到了每个样本的概率。现在说一下极大似然估计是什么东西。极大似然估计,就是我们装作这些个参数啊,我们老早就知道了,然后借此来估计现在这些样本被观察到的概率。你脑子wata啦?既然这些样本都已经发现了,所以实际概率肯定是百分之百啊!!概率要越大越好越大越好,而又只是一个估计值,所以我们就叫它极大似然估计啦。

所以我们观察到样本的概率是

  1. P = (p ^ Y) * (( 1 - p) ^ ( 1 - Y )) 

怎么容易一点去理解这行蜈蚣一样的公式呢?把Y的值0跟1代进去就行了,你就懂了,Y等于0的时候就是(1 - p ),y等于1时就是 p。就是这么简单。

下面是重点。敲黑板,划重点!!!我就是卡在这里想了很多天,完全不知道损失函数怎么来的!

因为所有样本都是相互独立的,所以他们的联合概率分布是他们的概率乘积。

  1. L(θ) = ∏ (p ^ yi) * ( (1 - p) ^ (1 - yi)) 

yi是每个样本的实际Y值。我们这里要求最大值嘛,那要变成损失函数咋变?我们知道这个值永远是 ( 0 , 1)的,所以直接加个负号,本来求最大就变成求最小了。

  1. ∴ loss = - L(θ) 

当然我们习惯这样加,看起来比较高端,m是样本的个数

  1. ∴ loss = - 1/m * L(θ) 

无所谓,原理一样的。

乘法是很消耗资源的,我们可以把它转换成对数,这样所有的乘法都变成加法啦!!而且而且函数的性质不变。所以最终的损失函数长这样。

  1. loss(θ) = - log L(θ) 

下面开始我们用Andrew NG大大的方式变换一下好了,仅仅是为了后面比较好算而已。

  1. P = p ^ (y + 1) / 2 * (1 - p) ^ - (y - 1) / 2  
  2. Y ∈ {-1,1} 

跟上面没什么本质的差别,只是把Y的值域变成-1跟1了。下面就是普通的公式变换。

0x03 损失函数咋来的

  1. l(θ) = - ∑ ln(p ^ (yi + 1) / 2 * (1 - p) ^ - (yi - 1) / 2) 

进行log变换,幂乘变成乘法。

  1. = - ∑ (yi + 1) / 2 * lnp - (yi - 1) / 2 * ln(1 - p) ) 

把p代进去,也就是把把负号放到P里边了。变成直接取倒数。就得到下面这个

  1. = ∑ (yi + 1) / 2 * ln(1 + exp (-g(xi)) - (yi - 1) / 2 * ln( 1 + exp (g(xi))) 

观察一下,就可以看出来。自己代进去就知道啦。

  1. ∴ 当yi = 1 时,l(θ) = ∑ ln(1 + exp ( - g(xi)) 

当yi = -1 时,l(θ) = ∑ ln(1 + exp ( g(xi))

所以最终的损失函数长这样。

  1. l(θ) = ∑ ln(1 + exp ( - yi * g(xi)) 

好了,到这里我们的推导就结束了,接下来就按照梯度下降算法去求最小值就好啦。

0x04 怎么用呢

然后我们就可以用最终得到的参数进行预测,大于0就当成类别Y1 ,即Y = 1,小于0当成类别Y1,即Y = -1。当然,这只能用于二分类。

那这玩意有什么用呢?应用场景比比皆是。

用户点击还是不点击?客户是欺诈还是没欺诈?客户逾期还是不逾期?这个产品是推荐还是不推荐?

传说中的人工智能预测高端引擎就出来了,小伙伴自己试试看把。

0x05 结束语

今天就酱,掰~跪在地上求不掉粉。

【本文为51CTO专栏作者“大蕉”的原创稿件,转载请通过作者微信公众号“一名叫大蕉的程序员”获取授权】

戳这里,看该作者更多好文

【编辑推荐】

  1. 如何搭建大规模机器学习平台?以阿里和蚂蚁的多个实际场景为例
  2. Andrew NG 深度学习课程笔记:二元分类与 Logistic 回归
  3. 如何通过牛顿法解决Logistic回归问题
  4. 从头开始:用Python实现带随机梯度下降的Logistic回归
  5. 自动化机器学习第一步:使用Hyperopt自动选择超参数
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

热门职位+更多