Logistic回归又称Logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。
我们讨论的是要预测的变量y是一个离散值情况下的分类问题。 在分类问题中,我们尝试预测的是结果是否属于某一个类。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;判断一个肿瘤是恶性的还是良性的。 我们预测的变量 y ∈ { 0 , 1 } y\in \left \{ 0,1 \right \} y∈{0,1},其中 0 表示负类(Negative class),1 表示正类(Positive class)。 Logistic回归算法是一种分类算法,它适用于标签取值离散的情况,它的输出值永远在0到1之间。不推荐将线性回归用于分类问题,线性回归模型的预测值可超越[0,1]范围。
对于分类问题,我们需要输出0或1,我们可以预测:
- 当 h θ ( x ) ⩾ 0.5 h_{\theta }(x)\geqslant 0.5 hθ(x)⩾0.5时,预测 y = 1 y=1 y=1。 - 当 h θ ( x ) ⩽ 0.5 h_{\theta }(x)\leqslant 0.5 hθ(x)⩽0.5时,预测 y = 0 y=0 y=0。
Logistic回归模型的假设函数是 h θ ( x ) = g ( θ T X ) h_{\theta }(x)=g(\theta ^{T}X) hθ(x)=g(θTX) ,其中 X X X代表特征向量, g g g代表Logistic函数。一个常用的Logistic函数为S形函数(Sigmoid function),公式为 g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1 ,函数图象如图1所示。
图1 S形函数图象h θ ( x ) h_{\theta }(x) hθ(x)的作用是:对于给定的输入变量 x x x,根据选择的参数计算输出变量 y = 1 y=1 y=1的可能性(estimated probablity),即 h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_{\theta }(x)=P(y=1|x;\theta ) hθ(x)=P(y=1∣x;θ),所以有 P ( y = 0 ∣ x ; θ ) + P ( y = 1 ∣ x ; θ ) = 1 P(y=0|x;\theta )+P(y=1|x;\theta )=1 P(y=0∣x;θ)+P(y=1∣x;θ)=1。
决策边界分为线性决策边界(Linear decision boundary)和非线性决策边界(Non-linear decision boundary)。 图2为线性决策边界的例子,红色代表正类,蓝色代表负类,其中参数 θ \theta θ为向量[-3 1 1],则当 − 3 + x 1 + x 2 ⩾ 0 -3+x_{1}+x_{2}\geqslant0 −3+x1+x2⩾0,即 x 1 + x 2 ⩾ 3 x_{1}+x_{2}\geqslant3 x1+x2⩾3时,模型将预测 y = 1 y=1 y=1 。 我们可以绘制直线 x 1 + x 2 = 3 x_{1}+x_{2}=3 x1+x2=3,这条线便是我们模型的决策边界,它能将预测为1的区域和预测为0的区域分隔开。
图2 线性决策边界图3为非线性决策边界的例子,其中参数 θ \theta θ为向量[-1 0 0 1 1],则当 − 1 + x 1 2 + x 2 2 ⩾ 0 -1+x_{1}^{2}+x_{2}^{2}\geqslant0 −1+x12+x22⩾0,即 x 1 2 + x 2 2 ⩾ 1 x_{1}^{2}+x_{2}^{2}\geqslant1 x12+x22⩾1时,模型将预测 y = 1 y=1 y=1 。 我们可以绘制圆心在原点且半径为1的圆形 x 1 2 + x 2 2 = 1 x_{1}^{2}+x_{2}^{2}=1 x12+x22=1,它能将预测为1的区域和预测为0的区域分隔开。
图3 非线性决策边界决策边界是假设函数的一个属性,我们可以用非常复杂的模型来适应非常复杂形状的决策边界。
定义Logistic回归的代价函数为 J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J(\theta )=\frac{1}{m}\sum_{i=1}^{m}Cost(h_{\theta }(x^{(i)}),y^{(i)}) J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))
其中 C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) , i f y = 1 − l o g ( 1 − h θ ( x ) ) , i f y = 0 Cost(h_{\theta }(x),y)=\left\{\begin{matrix} -log(h_{\theta}(x)),\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}if\ _{}\ _{}y=1\\ -log(1-h_{\theta}(x)),\ _{}\ _{}\ _{}\ _{}if\ _{}\ _{}y=0 \end{matrix}\right. Cost(hθ(x),y)={−log(hθ(x)), if y=1−log(1−hθ(x)), if y=0
h θ ( x ) h_{\theta }(x) hθ(x)与 C o s t ( h θ ( x ) , y ) Cost(h_{\theta }(x),y) Cost(hθ(x),y)之间的关系如图4所示:
图4 h θ ( x ) h_{\theta }(x) hθ(x)与 C o s t ( h θ ( x ) , y ) Cost(h_{\theta }(x),y) Cost(hθ(x),y)之间的关系C o s t ( h θ ( x ) , y ) Cost(h_{\theta }(x),y) Cost(hθ(x),y)函数的特点是:当实际的 y = 0 y=0 y=0且预测的 h θ ( x ) h_{\theta }(x) hθ(x)也为0时代价为0,当 y = 0 y=0 y=0但 h θ ( x ) h_{\theta }(x) hθ(x)不为0时误差随着 h θ ( x ) h_{\theta }(x) hθ(x)的变大而变大,如图4中a)所示;当实际的 y = 1 y=1 y=1且预测的 h θ ( x ) h_{\theta }(x) hθ(x)也为1时误差为 0,当 y = 1 y=1 y=1但 h θ ( x ) h_{\theta }(x) hθ(x)不为1时误差随着 h θ ( x ) h_{\theta }(x) hθ(x)变小而变大,如图4中b)所示。 C o s t ( h θ ( x ) , y ) Cost(h_{\theta }(x),y) Cost(hθ(x),y)函数也可以写成如下的式子: C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost(h_{\theta }(x),y)=-y\times log(h_{\theta}(x))-(1-y)\times log(1-h_{\theta}(x)) Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x))
那么 Logisitic回归的代价函数为 J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) = − 1 m ∑ i = 1 m [ y ( i ) × l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) × l o g ( 1 − h θ ( x ( i ) ) ) ] J(\theta )=\frac{1}{m}\sum_{i=1}^{m}Cost(h_{\theta }(x^{(i)}),y^{(i)})=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}\times log(h_{\theta}(x^{(i)}))+(1-y^{(i)})\times log(1-h_{\theta}(x^{(i)}))] J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))=−m1i=1∑m[y(i)×log(hθ(x(i)))+(1−y(i))×log(1−hθ(x(i)))]
为了拟合出参数,我们需要最小化代价函数,找到尽量让 J ( θ ) J(\theta) J(θ)取得最小值的参数 θ \theta θ,所用的方法是梯度下降法。 梯度下降法的实现: R e p e a t { θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) } ( S i m u l t a n e o u s l y u p d a t e a l l θ j ) Repeat \left \{ \theta _{j}:=\theta _{j}-\alpha \frac{1}{m}\sum_{i=1}^{m}(h_{\theta }(x^{(i)})-y^{(i)} )x^{(i)}_{j}\right \}\ _{}\ _{}(Simultaneously\ _{}\ _{}update\ _{}\ _{}all\ _{}\ _{}\theta _{j}) Repeat{θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)} (Simultaneously update all θj)
一些更高级的优化算法有:共轭梯度法、BFGS 和L-BFGS 等。
优点:一个是通常不需要手动选择学习率,它们有一个智能内循环(线性搜索算法),可以自动尝试不同的学习速率 α \alpha α并自动选择一个好的学习速率,它们甚至可以为每次迭代选择不同的学习速率,那么我们就不需要自己选择。还有一个是它们经常快于梯度下降算法。缺点:过于复杂。如何使用 Logisitic回归来解决多类别分类的问题。 对于一个多类分类问题,我们的数据集看起来可能会像图5中b)所示,而图5中a)是我们之前讨论的二元分类问题的数据集。
图5 二元分类和多类别分类的数据集我们用3种不同的符号来代表3个类别,如图6所示,可以使用"一对多"方法来进行分类。
图6 用3种不同的符号表示多类别分类数据集中的类别现在我们有一个图6所示的训练集,共有3个类别,我们用三角形表示 y = 1 y=1 y=1 ,方框表示 y = 2 y=2 y=2,叉表示 y = 3 y=3 y=3。我们下面要做的就是使用一个训练集,将其分成3个二元分类问题。 我们先从用三角形代表的类别1开始,实际上我们可以创建一个新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,我们创建一个新的训练集,如图7所示,我们要拟合出一个合适的分类器。
图7 创建一个新的"伪"训练集( y = 1 y=1 y=1为正类)为了能实现这样的转变,我们将多个类别中的一个类标记为正类( y = 1 y=1 y=1),然后将其他所有类都标记为负类,这个模型记作 h θ ( 1 ) ( x ) h_{\theta }^{(1)}(x) hθ(1)(x)。接着,类似地第我们选择另一个类标记为正类( y = 2 y=2 y=2),再将其它类都标记为负类,将这个模型记作 h θ ( 2 ) ( x ) h_{\theta }^{(2)}(x) hθ(2)(x) ,依此类推。 最后我们得到一系列的模型简记为: h θ ( i ) ( x ) = p ( y = i ∣ x ; θ ) h_{\theta }^{(i)}(x)=p(y=i|x;\theta ) hθ(i)(x)=p(y=i∣x;θ) ,其中 i = 1 , 2 , . . . , k i=1,2,...,k i=1,2,...,k。 最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择可能性最高的输出变量。 在分类时,我们要做的就是训练这个逻辑回归分类器 h θ ( i ) ( x ) h_{\theta }^{(i)}(x) hθ(i)(x), 其中 i i i对应每一个可能的 y = i y=i y=i。最后为了做出预测,我们给出输入一个新的 x x x值,用这个值做预测。我们要做的就是在我们三个分类器里面输入 x x x,然后我们选择一个让 h θ ( i ) ( x ) h_{\theta }^{(i)}(x) hθ(i)(x)最大的 i i i,即 max i h θ ( i ) ( x ) \max_{i}h_{\theta }^{(i)}(x) imaxhθ(i)(x)