Logistic Regression分类介绍

对数几率回归时为了使用线性回归模型来做分类任务,使用对数几率函数,把线性模型的预测值和样本的真实标记 y y 连接起来。
对数几率函数:

y = 1 1 + e z y=\frac{1}{1+e^{-z}}

单位阶跃函数:
f ( x ) = { 1 z > 0 0.5 z = 0 0 z < 0 f(x) = \begin{cases} 1 \qquad & z >0 \\ 0.5 \qquad & z = 0\\ 0 \qquad & z < 0 \\ \end{cases}
对数几率函数和单位阶跃函数图像:
在这里插入图片描述
使用对数几率函数是因为:
二分类任务中,需要将线性回归模型 z = w T x + b z=w^Tx+b 的预测值 z z 转换为0和1,理论上单位阶跃函数最适合,预测值 z z 大于零就判为 正例,小于零则判为反例预测值为 临界值零则可任意判别。
由于单位阶跃函数不连续,不适于计算,而对数几率函数是连续函数,对单位阶跃函数的逼近比较好,输出值在 z z = 0 附近变化很陡,将 z 值转化为一个接近 0 或 1 的 y y 值,即:
y = 1 1 + e z y=\frac{1}{1+e^{-z}}
将对数几率回归和线性回归结合起来的到:

y = 1 1 + e ( w x T + b ) y=\frac{1}{1+e^{-(wx^T+b)}}
即:
l n y 1 y = w T x + b ln\frac{y}{1-y}=w^Tx+b
y y 看做是样本为正例的概率, 1 y 1-y 则为样本为负例的概率, y 1 y \frac{y}{1-y} 为几率。对几率做对数即为对数几率回归。
通俗的讲,对数几率回归就是利用线性回归的输出值。根据线性回归的输出值 z z 来判断样本为正例还是负例,判断的方法是对这个输出值 z z 做对数几率变换。

流程为:
1、由输入 x x 通过线性模型得到 z z ;
2、由 z z 通过对数几率得到两个值0和1,分别对应输入 x x 位负例还是正例。
要得到 z z 就要确定 z = w T x + b z=w^Tx+b 中的 w w b b ,我们通过极大似然法来估计 w w b b ,对于 l n y 1 y = w T x + b ln\frac{y}{1-y}=w^Tx+b ,将 y y 视为类后验概率估计 p ( y = 1 x ) p(y = 1|x) (即拿出一个样本 x x ,这个样本为‘1’类的概率),则原式为
l n p ( y = 1 x ) p ( y = 0 x ) = w T x + b ln\frac{p(y = 1|x)}{p(y = 0|x)}=w^Tx+b ,

又因为
p ( y = 0 x ) + p ( y = 1 x ) = 1 p(y = 0|x)+p(y = 1|x)=1 ,可得:

p ( y = 1 x ) = e ( w x T + b ) 1 + e ( w x T + b ) p(y = 1|x)=\frac{e^{(wx^T+b)}}{1+e^{(wx^T+b)}}

p ( y = 0 x ) = 1 1 + e ( w x T + b ) p(y = 0|x)=\frac{1}{1+e^{(wx^T+b)}}

此时对于二分类问题,损失函数为 c o s t x , y = { l n ( 1 1 + e ( w x T + b ) ) y = 1 l n ( 1 1 1 + e ( w x T + b ) ) y = 0 cost(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}
= { l n ( e ( w x T + b ) 1 + e ( w x T + b ) ) y = 1 l n ( 1 1 + e ( w x T + 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}
= { l n ( p ( y = 1 x ) ) y = 1 l n ( 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}
其中y=1表示正样本,y=0表示负样本。

对于给定的数据集 [ ( x i , y i ) ] i = 1 m {[(x_i, y_i)]^m_{i =1}} ,对率回归模型最大化对数似然(即对后验概率的对数求和)得到:
l ( w , b ) = i = 1 m l n p ( y i x i ; w , b ) l(w,b)= \sum_{i=1}^{m}lnp(y_i|x_i;w,b)
让每个样本属于其真实标记的概率越大越好。
β = ( w , b ) β= (w,b) ; x ^ = ( x ; 1 ) \hat{x}=(x;1) , w T x + b w^Tx+b 则为 β T x ^ β^T\hat{x}
p 1 ( x ^ ; β ) = p ( y = 1 x ^ ; β ) p_{1}(\hat{x};β)= p(y = 1|\hat{x};β) ,
p 0 ( x ^ ; β ) = p ( y = 0 x ^ ; β ) = 1 p 1 ( x ^ ; β ) p_{0}(\hat{x};β)= p(y = 0|\hat{x};β)=1-p_{1}(\hat{x};β)
p 1 ( x ^ ; β ) p_{1}(\hat{x};β) p 0 ( x ^ ; β ) p_{0}(\hat{x};β) 合并起来为:
p ( x ^ ; β ) p(\hat{x};β) = p ( y = 1 x ^ ; β ) y i p ( y = 0 x ^ ; β ) 1 y i p(y = 1|\hat{x};β)^{y_{i}}p(y = 0|\hat{x};β)^{1-y_{i}}
= p 1 ( x ^ ; β ) y i p 0 ( x ^ ; β ) 1 y i =p_{1}(\hat{x};β)^{y_{i}}p_{0}(\hat{x};β)^{1-y_{i}}
该式可以看做为损失函数
则:
l n ( p ( y i x i ; w , b ) ) ln(p(y_i|x_i;w,b)) = y i l n ( p 1 ( x ^ ; β ) ) + ( 1 y i ) l n ( p 0 ( x ^ ; β ) ) y_{i}ln(p_{1}(\hat{x};β))+(1-y_{i})ln(p_{0}(\hat{x};β))
该式可看做对数损失函数

带入得:
l ( β ) = i = 1 m ( y i l n ( p 1 ( x ^ ; β ) ) + ( 1 y i ) l n ( p 0 ( x ^ ; β ) ) ) l(β)=\sum_{i=1}^{m}(y_{i}ln(p_{1}(\hat{x};β))+(1-y_{i})ln(p_{0}(\hat{x};β)))
= i = 1 m ( y i l n ( e ( w x T + b ) 1 + e ( w x T + b ) ) + ( 1 y i ) l n ( 1 1 + e ( w x T + 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 = 1 m ( y i ( ( w x T + b ) l n ( 1 + e ( w x T + b ) ) ) ( 1 y i ) l n ( 1 + e ( w x T + 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 = 1 m ( y i ( ( w x T + b ) l n ( 1 + e ( w x T + b ) ) =\sum_{i=1}^{m}(y_{i}((wx^T+b)-ln({1+e^{(wx^T+b)}})
= i = 1 m ( y i β T x i ^ l n ( 1 + β T x i ^ ) ) =\sum_{i=1}^{m}(y_{i}β^T\hat{x_{i}}-ln({1+β^T\hat{x_{i}}}))
该式可看做代价函数
改为求最小值:
l ( β ) = i = 1 m ( y i β T x i ^ + l n ( 1 + β T x i ^ ) ) l(β)=\sum_{i=1}^{m}(-y_{i}β^T\hat{x_{i}}+ln(1+β^T\hat{x_{i}}))
该式可看做目标函数
可使用不同的优化求解最小值的方法求出最优解 β = a r g m i n l ( β ) β^{*}=argmin l(β)

对数几率回归的优点:
例如它是直接对分类可能性进行建模,无需事先假设数据分布?这样就避免了假设分布不准确所带来的问题;它不是仅预测出"类别",而是可得到近似概率预测,这对许多需利用概率辅助决策的任务很有用;此外,对率函数是任意阶可导的凸函数,有很好的数学性质,现有的许多数值优化算法都可直接用于求取最优解。

使用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))

猜你喜欢

转载自blog.csdn.net/qq_33699659/article/details/83063664
今日推荐