对数几率回归时为了使用线性回归模型来做分类任务,使用对数几率函数,把线性模型的预测值和样本的真实标记yyy连接起来。
对数几率函数:
y=11+e−zy=\frac{1}{1+e^{-z}}y=1+e−z1
单位阶跃函数:
f(x)={1z>00.5z=00z<0f(x) =
\begin{cases}
1 \qquad & z >0 \\
0.5 \qquad & z = 0\\
0 \qquad & z < 0 \\
\end{cases}f(x)=⎩⎪⎨⎪⎧10.50z>0z=0z<0
对数几率函数和单位阶跃函数图像:
使用对数几率函数是因为:
二分类任务中,需要将线性回归模型z=wTx+bz=w^Tx+bz=wTx+b的预测值zzz转换为0和1,理论上单位阶跃函数最适合,预测值 zzz 大于零就判为 正例,小于零则判为反例预测值为 临界值零则可任意判别。
由于单位阶跃函数不连续,不适于计算,而对数几率函数是连续函数,对单位阶跃函数的逼近比较好,输出值在 zzz = 0 附近变化很陡,将 z 值转化为一个接近 0 或 1 的 yyy值,即:
y=11+e−zy=\frac{1}{1+e^{-z}}y=1+e−z1
将对数几率回归和线性回归结合起来的到:
y=11+e−(wxT+b)y=\frac{1}{1+e^{-(wx^T+b)}}y=1+e−(wxT+b)1
即:
lny1−y=wTx+bln\frac{y}{1-y}=w^Tx+bln1−yy=wTx+b
把yyy看做是样本为正例的概率,1−y1-y1−y则为样本为负例的概率,y1−y\frac{y}{1-y}1−yy为几率。对几率做对数即为对数几率回归。
通俗的讲,对数几率回归就是利用线性回归的输出值。根据线性回归的输出值zzz来判断样本为正例还是负例,判断的方法是对这个输出值zzz做对数几率变换。
流程为:
1、由输入xxx通过线性模型得到zzz;
2、由zzz通过对数几率得到两个值0和1,分别对应输入xxx位负例还是正例。
要得到zzz就要确定z=wTx+bz=w^Tx+bz=wTx+b中的www和bbb,我们通过极大似然法来估计www和bbb,对于lny1−y=wTx+bln\frac{y}{1-y}=w^Tx+bln1−yy=wTx+b,将yyy视为类后验概率估计p(y=1∣x)p(y = 1|x)p(y=1∣x)(即拿出一个样本xxx,这个样本为‘1’类的概率),则原式为
lnp(y=1∣x)p(y=0∣x)=wTx+bln\frac{p(y = 1|x)}{p(y = 0|x)}=w^Tx+blnp(y=0∣x)p(y=1∣x)=wTx+b,
又因为
p(y=0∣x)+p(y=1∣x)=1p(y = 0|x)+p(y = 1|x)=1p(y=0∣x)+p(y=1∣x)=1,可得:
p(y=1∣x)=e(wxT+b)1+e(wxT+b)p(y = 1|x)=\frac{e^{(wx^T+b)}}{1+e^{(wx^T+b)}}p(y=1∣x)=1+e(wxT+b)e(wxT+b)
p(y=0∣x)=11+e(wxT+b)p(y = 0|x)=\frac{1}{1+e^{(wx^T+b)}}p(y=0∣x)=1+e(wxT+b)1
此时对于二分类问题,损失函数为cost(x,y)={−ln(11+e−(wxT+b))y=1−ln(1−11+e−(wxT+b))y=0cost(x,y)=\begin{cases}
-ln(\frac{1}{1+e^{-(wx^T+b)}}) \qquad & y =1 \\
-ln(1-\frac{1}{1+e^{-(wx^T+b)}}) \qquad & y= 0\\
\end{cases}cost(x,y)={−ln(1+e−(wxT+b)1)−ln(1−1+e−(wxT+b)1)y=1y=0
={−ln(e(wxT+b)1+e(wxT+b))y=1−ln(11+e(wxT+b))y=0\begin{cases}
-ln(\frac{e^{(wx^T+b)}}{1+e^{(wx^T+b)}}) \qquad & y =1 \\
-ln(\frac{1}{1+e^{(wx^T+b)}}) \qquad & y= 0\\
\end{cases}⎩⎨⎧−ln(1+e(wxT+b)e(wxT+b))−ln(1+e(wxT+b)1)y=1y=0
={−ln(p(y=1∣x))y=1−ln(p(y=0∣x))y=0\begin{cases}
-ln(p(y = 1|x)) \qquad & y =1 \\
-ln(p(y = 0|x)) \qquad & y= 0\\
\end{cases}{−ln(p(y=1∣x))−ln(p(y=0∣x))y=1y=0
其中y=1表示正样本,y=0表示负样本。
对于给定的数据集[(xi,yi)]i=1m{[(x_i, y_i)]^m_{i =1}}[(xi,yi)]i=1m,对率回归模型最大化对数似然(即对后验概率的对数求和)得到:
l(w,b)=∑i=1mlnp(yi∣xi;w,b)l(w,b)= \sum_{i=1}^{m}lnp(y_i|x_i;w,b)l(w,b)=∑i=1mlnp(yi∣xi;w,b)
让每个样本属于其真实标记的概率越大越好。
令β=(w,b)β= (w,b)β=(w,b);x^=(x;1)\hat{x}=(x;1)x^=(x;1) ,wTx+bw^Tx+bwTx+b则为βTx^β^T\hat{x}βTx^,
令p1(x^;β)=p(y=1∣x^;β)p_{1}(\hat{x};β)= p(y = 1|\hat{x};β)p1(x^;β)=p(y=1∣x^;β),
p0(x^;β)=p(y=0∣x^;β)=1−p1(x^;β)p_{0}(\hat{x};β)= p(y = 0|\hat{x};β)=1-p_{1}(\hat{x};β)p0(x^;β)=p(y=0∣x^;β)=1−p1(x^;β)
把p1(x^;β)p_{1}(\hat{x};β)p1(x^;β)和p0(x^;β)p_{0}(\hat{x};β)p0(x^;β)合并起来为:
p(x^;β)p(\hat{x};β)p(x^;β) =p(y=1∣x^;β)yip(y=0∣x^;β)1−yip(y = 1|\hat{x};β)^{y_{i}}p(y = 0|\hat{x};β)^{1-y_{i}}p(y=1∣x^;β)yip(y=0∣x^;β)1−yi
=p1(x^;β)yip0(x^;β)1−yi=p_{1}(\hat{x};β)^{y_{i}}p_{0}(\hat{x};β)^{1-y_{i}}=p1(x^;β)yip0(x^;β)1−yi
该式可以看做为损失函数
则:
ln(p(yi∣xi;w,b))ln(p(y_i|x_i;w,b))ln(p(yi∣xi;w,b)) = yiln(p1(x^;β))+(1−yi)ln(p0(x^;β))y_{i}ln(p_{1}(\hat{x};β))+(1-y_{i})ln(p_{0}(\hat{x};β))yiln(p1(x^;β))+(1−yi)ln(p0(x^;β))
该式可看做对数损失函数
带入得:
l(β)=∑i=1m(yiln(p1(x^;β))+(1−yi)ln(p0(x^;β)))l(β)=\sum_{i=1}^{m}(y_{i}ln(p_{1}(\hat{x};β))+(1-y_{i})ln(p_{0}(\hat{x};β)))l(β)=∑i=1m(yiln(p1(x^;β))+(1−yi)ln(p0(x^;β)))
=∑i=1m(yiln(e(wxT+b)1+e(wxT+b))+(1−yi)ln(11+e(wxT+b))=\sum_{i=1}^{m}(y_{i}ln(\frac{e^{(wx^T+b)}}{1+e^{(wx^T+b)}})+(1-y_{i})ln(\frac{1}{1+e^{(wx^T+b)}})=∑i=1m(yiln(1+e(wxT+b)e(wxT+b))+(1−yi)ln(1+e(wxT+b)1)
=∑i=1m(yi((wxT+b)−ln(1+e(wxT+b)))−(1−yi)ln(1+e(wxT+b))=\sum_{i=1}^{m}(y_{i}((wx^T+b)-ln({1+e^{(wx^T+b))}})-(1-y_{i})ln({1+e^{(wx^T+b)}})=∑i=1m(yi((wxT+b)−ln(1+e(wxT+b)))−(1−yi)ln(1+e(wxT+b))
=∑i=1m(yi((wxT+b)−ln(1+e(wxT+b))=\sum_{i=1}^{m}(y_{i}((wx^T+b)-ln({1+e^{(wx^T+b)}})=∑i=1m(yi((wxT+b)−ln(1+e(wxT+b))
=∑i=1m(yiβTxi^−ln(1+βTxi^))=\sum_{i=1}^{m}(y_{i}β^T\hat{x_{i}}-ln({1+β^T\hat{x_{i}}}))=∑i=1m(yiβTxi^−ln(1+βTxi^))
该式可看做代价函数
改为求最小值:
l(β)=∑i=1m(−yiβTxi^+ln(1+βTxi^))l(β)=\sum_{i=1}^{m}(-y_{i}β^T\hat{x_{i}}+ln(1+β^T\hat{x_{i}}))l(β)=∑i=1m(−yiβTxi^+ln(1+βTxi^))
该式可看做目标函数
可使用不同的优化求解最小值的方法求出最优解β∗=argminl(β)β^{*}=argmin l(β)β∗=argminl(β)
对数几率回归的优点:
例如它是直接对分类可能性进行建模,无需事先假设数据分布?这样就避免了假设分布不准确所带来的问题;它不是仅预测出"类别",而是可得到近似概率预测,这对许多需利用概率辅助决策的任务很有用;此外,对率函数是任意阶可导的凸函数,有很好的数学性质,现有的许多数值优化算法都可直接用于求取最优解。
使用sklearn来调用逻辑回归
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
digits = datasets.load_digits()
x_digits = digits.data
y_digits = digits.target
x_train = x_digits[:round(.9*len(x_digits))]
x_test = x_digits[round(.9*len(x_digits)):]
y_train = y_digits[:round(.9*len(y_digits))]
y_test = y_digits[round(.9*len(y_digits)):]
logistic = LogisticRegression()
print('Logistic Score: %f'%logistic.fit(x_train,y_train).score(x_test,y_test))