重新开始我们的机器学习之路!
逻辑回归(Logistic Regression)
逻辑回归,虽然叫它回归,但是其实它是分类算法,更准确地说叫分类建模方法,(详见我的自然语言处理系列)。我这样说,分类和回归本质上是同一类问题不知道有没有想打我?哈哈。大家会说,怎么可能呢,分类是分类,回归是回归啊,这是常识啊!我这样说是因为,不管是分类问题还是问题,本质上都是要对如下概率进行建模:
大家同意么?
有人会说,生成式模型不是对这样概率建模吗?
是的,大哥,你学的很好,但是我们都知道,建模 p(x,y) p ( x , y ) 最终还是要建模 p(y|x) p ( y | x ) 。
有人会说,如果分类问题和回归问题本质上是同一类问题?那难道能用回归问题解决分类问题吗?
是的,对。你可以用分类建模方法建模回归问题,没人说不可以,只是效果不行而已。
不管是分类问题还是回归问题,都是要建模 p(y|x) p ( y | x ) ,但是, p(y|x) p ( y | x ) 再往下等于什么,这其实是你的主观判断!是你认为,这是一个分类问题,可以上逻辑回归,SVM,不能上线性回归。对不对?不同的算法其实是选择了不同的建模方式。
那么逻辑回归是怎么建模的呢?
我们在回看,线性回归是怎么建模的:
一个是为认为 y y 是关于的伯努利分布,一个认为 y y 是关于d的高斯分布。就是这点不同。sigm是sigmoid函数,输出[0,1]
那你要问了,凭什么就认为正好是高斯分布,伯努利分布,凭什么认为参数就是这些,那么巧吗?这就是建模过程中的假设,假设你服从这样的分布。没有假设,没有办法建模。
参数估计
模型定义好之后,就要估计模型的参数了,极大似然咯,老油条都知道。
这里还分两种情形,虽然本质上都一样,一种呢,二分类是{0,1}标签。
p(y=1)=sigm(wTx)
p
(
y
=
1
)
=
s
i
g
m
(
w
T
x
)
,
p(y=0)=1−sigm(wTx)
p
(
y
=
0
)
=
1
−
s
i
g
m
(
w
T
x
)
这时候:
这就是所谓的交叉熵函数
另外其实还有一种情形,就是二分类的标签的{1, -1}
这个时候 p(y=1)=sigm(wTx)=11+exp(−wTx) p ( y = 1 ) = s i g m ( w T x ) = 1 1 + e x p ( − w T x ) p(y=−1)=sigm(wTx)=11+exp(+wTx) p ( y = − 1 ) = s i g m ( w T x ) = 1 1 + e x p ( + w T x ) . 这种情形也很常见。这个时候:
损失函数定好了,我们怎么去更新参数呢?
我们用 h(x)=sigm(wTx) h ( x ) = s i g m ( w T x ) ,sigmoid函数有一个特定,那就是 h′(x)=h(x)(1−h(x)) h ′ ( x ) = h ( x ) ( 1 − h ( x ) ) ,感兴趣的同学可以直接推导一下。
我们的目标是损失函数到达最小,怎么能让损失函数达到最小呢? w w 往损失函数最小化的方法更新,那到底是哪个方法呢?梯度的方向,损失函数对求导数:
欧了,然后梯度更新