分类算法1——Logistic Regression
Logistic Regression模型
我从线性、函数、图像以及算法实践这几个方面对Logistic Regression模型进行表述。
线性可分和线性不可分
正常来说,一个关于分类的问题可以分成线性可分和线性不可分两种。(还有一种叫非线性可分,难顶)
1) 线性可分是指能够使用线性函数正确分类,如在坐标轴上y>3的一类,y<3为另一类,那么y=3就是他们的线性函数。
2) 线性不可分就是不能找到一条能用函数表示的线来将分类问题正确区分。
Logistic Regression模型
Logistic Regression模型就是一种线性分类模型。就拿我举的y=3这个例子来说,这条y=3的直线就称作超平面。(也有解释是二维线性扩充成三维平面,不会作三维模型图见谅)
那么在其他不同的情况下呢?我们可以发现有这样的线性函数,来表达所有超平面:
y
=
K
x
+
b
y =Kx+b
y=Kx+b (线性函数)
其中
K
K
K是权重,
b
b
b为偏置。在多维的情况下
K
和
b
K和b
K和b均为为向量。在Log模型下我们可以通过对样本进行训练学习得到超平面,在这个平面下把数据分成正负两个类别。这时就该使用阈值函数来将输出的内容进行范围控制了,将样本数据映射到不同的类别里面。常用的阈值函数有Sigmoid函数:
f
(
x
)
=
1
1
+
e
−
x
f(x)=\frac1{1+e^{-x}}
f(x)=1+e−x1
图像如下:
从Sigmoid函数图像中可以看出他的值域为
(
0
,
1
)
(0,1)
(0,1)(注意不包括0和1)。
通过python(本人的是py3.7)实现的话函数表达式如下:
def sig(x):
return 1.0/(1+np.exp(-x))
对于输入的向量
X
X
X,属于正例的概率为:
P
(
y
=
1
∣
X
,
W
,
b
)
=
1
1
+
e
−
(
W
X
+
b
)
P(y=1|X,W,b)=\frac1{1+e^{-(WX+b)}}
P(y=1∣X,W,b)=1+e−(WX+b)1
负例的概率为:
P ( y = 0 ∣ X , W , b ) = 1 − 1 1 + e − ( W X + b ) P(y=0|X,W,b) = 1-\frac1{1+e^{-(WX+b)}} P(y=0∣X,W,b)=1−1+e−(WX+b)1
对于Logistic Regression算法来说,需要求解分割超平面的话,就需要得到权重矩阵W和偏置向量b。要得到模型的这两个参数,则需要定义损失函数。
损失函数
假设我们有m个训练样本。{(X1,Y1),(X2,Y2),…,(Xm,Ym)},运用极大似然函数进行估算后,其似然函数为:
L w , b = ∏ i = 0 m [ ( 1 1 + e − ( W X i + b ) ) Y ( i ) ∗ ( 1 − 1 1 + e − ( W X i + b ) ) 1 − Y ( i ) ] L_{w,b} =\prod_{i=0}^m [(\frac1{1+e^{-(WXi+b)}})^{Y(i)}*(1-\frac1{1+e^{-(WXi+b)}})^{1-Y(i)}] Lw,b=i=0∏m[(1+e−(WXi+b)1)Y(i)∗(1−1+e−(WXi+b)1)1−Y(i)]
求似然函数的极大值,我们可以用Log似然函数,通常是将负的Log似然函数作为损失函数,即the negative log-likelihood(NLL)作为他的损失函数,这时只要计算NLL的极小值(为什么是极小值而不是最小值,导函数概念该复习了,解决极小值问题就需要涉及到凸优化or非凸优化问题),就可以找到似然函数最大值解,进而得到分割的超平面函数。损失函数 l l l为:
l w , b = − 1 m l o g L = − 1 m ∑ i = 0 m ( Y i ∗ l o g ( 1 1 + e − ( W X i + b ) ) + ( 1 − Y ( i ) ) ∗ l o g ( 1 − 1 1 + e − ( W X i + b ) ) ) ] l_{w,b} = -\frac1{m}logL =-\frac1{m} \sum_{i=0}^m (Yi*log(\frac1{1+e^{-(WXi+b)}})+({1-Y(i)})*log(1-\frac1{1+e^{-(WXi+b)}}))] lw,b=−m1logL=−m1i=0∑m(Yi∗log(1+e−(WXi+b)1)+(1−Y(i))∗log(1−1+e−(WXi+b)1))]
为了得到函数 l l l的最小值,就需要用到梯度下降的方法了。
梯度下降
梯度下降是一种迭代的优化算法,根据初始点在每一次迭代过程中选择下降方法方向,进而改变需要修改的参数,对于优化问题,梯度下降如下:
1.随机选择一个初始点
w
w
w
2.重复下面方法
2.1决定方向:
d
i
=
−
∂
∂
w
f
(
x
)
∣
w
i
d_i = -\frac\partial{\partial w}f(x)|_{wi}
di=−∂w∂f(x)∣wi
2.2选择步长
a
a
a
2.3更新:
w
i
+
1
=
w
i
+
a
∗
d
i
w_{i+1} = w_i + a * d_i
wi+1=wi+a∗di
3条件满足后停止
(我觉得牛顿法用来入门很不错)