引言
假设今天希望将机器学习应用到医院中去,比如对于某一个患了心脏病的病人,求他3个月之后病危的概率。那么我们该选择哪一个模型,或者可以尝试已经学过的线性回归?
但是很遗憾的是,如果我们要利用线性回归,我们收集到的资料中应当包含病人3个月后病危的概率。这在实际中是很难得到的,因为对于一个患病的病人,你只能知道他3个月后到底是病危或者存活。所以线性回归并不适用这种场景。
logistic函数
上面提到我们最终的目标是一个概率值(P(y|x)),这里(y=+1)指代病人3个月后病危这个事件;(y=-1)指代病人3个月后存活这个事件。显然(P(-1|x) = 1 - P(1|x)).
我们先前学过线性回归,知道可以通过加权的方式求出各项特征的'分数',那这个分数怎么转换为一个概率值?这里就需要引入一个logistic函数。它的表达式为:$$
heta(s)=frac{1}{1+e^{-s}}
egin{equation}
h(x) = frac{1}{1+e{-wTx}} w,x都是向量
end{equation}
D = {(x_1, 1), (x_2, 1), (x_3, 1), ... , (x_n, -1)}
egin{equation}
P(x_1, 1) * P(x_2, 1) * P(x_3, 1) * ... * P(x_n, -1)
end{equation}$$
再将(2)式写为条件概率分布$$
egin{equation}
P(x_1)P(1|x_1) * P(x_2)P(1|x_2) * P(x_3)P(1|x_3) * ... * P(x_n)P(-1|x_n)
end{equation}$$
再者,假设每一笔数据的概率服从0-1分布。$$egin{equation}
P(y|x_i) =
left {
egin{array}{lr}
f(x_i) y=+1
1 - f(x_i) y=-1
end{array}
ight.
end{equation}$$
所以最后写成的形式:$$egin{equation}
P(x_1)f(x_1) * P(x_2)f(x_2) * P(x_3)f(x_3) * ... * P(x_n)(1-f(x_n))
end{equation}$$
也就说这笔资料(D)由真正的模型(f(x))产生的话,概率是(5)这么大。但是我们不知道真正的模型f(x)长什么样子,我们现在只知道我们自己定义了一个模型(h(x)),它长成(1)这个样子。所以现在的任务就是从很多的(h(x)_1, h(x)_2, h(x)_3, ..., h(x)_m)中找到其中一个最接近真正的模型(f(x))并将它作为我们最后的(h(x))。
所以如何衡量(h(x))与(f(x))的接近程度?如果我们现在用(h(x))代替(f(x))去产生这组数据集(D)也能得到一个概率(6).$$egin{equation}
P(x_1)h(x_1) * P(x_2)h(x_2) * P(x_3)h(x_3) * ... * P(x_n)(1-h(x_n))
end{equation}$$
使得(6)式的概率最大的那个(h(x))我们会认为它与(f(x))最相似,这就是最大似然的思想。又因为对于所有的(h(x)_i)产生的概率:$$egin{equation}
P(x_1) * P(x_2) * P(x_3) * ... * P(x_n)
end{equation}$$
这部分都是相同的,所以我们认为最接近(f(x))的(h(x))能使(8)最大即可
再由于logistic函数的第2个性质,可以将(8)变形:
最终的目标是解出下面这个优化问题:$$egin{equation}
mathop{max}limits_{w} prod_{i=1}^{n}h(y_ix_i)
end{equation}$$
再次变形,求一个式子的最大值,相当于求它相反数的最小:$$egin{equation}
mathop{min}limits_{w} -prod_{i=1}^{n}h(y_ix_i)
end{equation}$$
接下来我们要对(11)式取对数,一方面原因是因为对数函数的单调特性,另一方面是能将原来的连乘简化到连加,所以取对数后:$$egin{equation}
mathop{min}limits_{w} -sum_{i=1}^{n}ln{h(y_ix_i)}
end{equation}$$
将(h(x))展开,能得到$$egin{equation}
mathop{min}limits_{w} -sum_{i=1}{n}ln{frac{1}{1+e{-y_iw^Tx_i}}} w与x_i都是向量,x_i表示第i笔数据
end{equation}$$
再一次$$egin{equation}
mathop{min}limits_{w} sum_{i=1}{n}ln{(1+e{-y_iw^Tx_i})} w与x_i都是向量,x_i表示第i笔数据
end{equation}$$
大功告成,我们得到了逻辑回归的损失函数,它长成(15)式这个样子$$egin{equation}
J(w)= sum_{i=1}{n}ln{(1+e{-y_iw^Tx_i})} w与x_i都是向量,x_i表示第i笔数据
end{equation}$$
我们的目标就是找到最小化(J(w))的那个(w).就像在线性回归中做的那样,接下来我们要利用链式法则对它求导:$$egin{equation}
frac{partial J(w)}{partial w_j} = sum_{i=1}^{n}frac{partial ln{(1+e{-y_iwTx_i})}}{partial (-y_iw^Tx_i)} * frac{partial (-y_iw^Tx_i)}{partial w_j}
end{equation}$$
化解得到$$egin{equation}
frac{partial J(w)}{partial w_j} = sum_{i=1}{n}frac{e{-y_iwTx_i}}{1+e{-y_iw^Tx_i}} * (-y_ix_{i,j}) x_{i,j}是个标量,是第i笔数据中第j个分量
end{equation}$$
所以对于整个向量(w)的梯度为$$
egin{equation}
frac{partial J(w)}{partial w} = sum_{i=1}{n}frac{e{-y_iwTx_i}}{1+e{-y_iw^Tx_i}} * (-y_ix_i) 想象将对单个w_i的结果笔直堆成一个向量
end{equation}$$
而(frac{e^{-y_iw^Tx_i}}{1+e^{-y_iw^Tx_i}})正好可以写成logistic函数的形式,所以最终对(w)的梯度写成下面这个样子$$
egin{equation}
frac{partial J(w)}{partial w} = sum_{i=1}{n}h(-y_iwTx_i)(-y_ix_i)
end{equation}$$
很遗憾,我们令(19)等于0的话,很难求解出(w)。为此,我们需要用额外的方法求解这个问题。
梯度下降
这个可学习的资料太多了,思想就是假设函数上有一个点,它沿着各个方向都有它的方向导数,那么总是沿着方向导数最大的反方向走,也就是梯度的反方向走,这个点总是能走到最低点。每一次移动的距离用一个系数lr来表示,每次更新(w),数次迭代之后,(w)趋近于最优解:$$
egin{equation}
w_{i+1} := w_{i} - lr * sum_{i=1}{n}frac{e{-y_iwTx_i}}{1+e{-y_iw^Tx_i}} * (-y_ix_i) lr是大于0的系数
end{equation}$$
另一个版本
Let (p(y_i|x_i, w) = p(y_i=1|x_i, w)^{y_i}(1 - p(y_i=1|x_i, w))^{1-y_i}),
egin{equation}
egin{aligned}
&max_{w}prod_{i=1}^N p(y_i | x_i, w) Leftrightarrow min_{w}left(-sum_{i=1}^Nlog{p(y_i|x_i, w)}
ight)
&=min_{w}left(-sum_{i=1}^Ny_ilog{p(y_i=1|x_i, w)}+(1-y_i)log{(1-p(y_i=1|x_i, w))}
ight)
&=min_{w}left(-sum_{i=1}^Ny_ilog{h(x_i; w)}+(1-y_i)log{(1-h(x_i; w)})
ight)
end{aligned}
end{equation}
therefore,
egin{equation}
egin{aligned}
J(w) = -sum_{i=1}^Ny_ilog{h(x_i; w)}+(1-y_i)log{(1-h(x_i; w)}
end{aligned}
end{equation}
then, we derive this function (J(w)) as below,
egin{equation}
egin{aligned}
frac{partial{J(w)}}{partial{w}} &= -sum_{i=1}^Ny_i(log{h(x_i; w))^prime}+(1-y_i)(log{(1-h(x_i; w))})^prime
&=-sum_{i=1}^Ny_ifrac{h(x_i; w)^prime}{h(x_i; w)}+(1-y_i)frac{-h(x_i; w)^prime}{1-h(x_i; w)}
end{aligned}
end{equation}
Because the derivation of sigmoid function to w is
egin{equation}
egin{aligned}
frac{partial{h(x_i; w)}}{partial{w}} &= frac{exp{(-wTx_i)}}{(1+exp{(-wTx_i)})^2} * x_i
&=h(x_i; w)(1-h(x_i; w)) * x_i
end{aligned}
end{equation}
so, we can get
egin{equation}
egin{aligned}
frac{partial{J(w)}}{partial{w}} &=-sum_{i=1}^Ny_ifrac{h(x_i; w)^prime}{h(x_i; w)}+(1-y_i)frac{-h(x_i; w)^prime}{1-h(x_i; w)}
&=-sum_{i=1}^Ny_ifrac{h(x_i; w)(1-h(x_i; w)) * x_i}{h(x_i; w)}+(1-y_i)frac{-h(x_i; w)(1-h(x_i; w)) * x_i}{1-h(x_i; w)}
&=-sum_{i=1}^Nx_iy_i(1-h(x_i; w))-x_i(1-y_i)h(x_i;w)
&=-sum_{i=1}^Nx_i(y_i-h(x_i; w))
&=sum_{i=1}^Nx_i(h(x_i; w)-y_i)
end{aligned}
end{equation}