分类问题
##线性回归算法在分类问题中地表现(以判断肿瘤是恶性还是良性为例)
- 当用线性回归算法预测时,训练样本如下图,使用线性回归算法来预测似乎结果比较合理。
- 但是改变训练样本如下图,再使用线性回归算法来预测可以得到另外一条直线,而根据已有得训练样本可知这是非常差劲的线性回归算法。
由上总结出线性回归算法并不能很好地应用在分类问题上。
逻辑回归
- 在分类问题中,要预测的变量 y 是离散的值。目前最流行、使用最广泛的一种学习算法是一种叫做逻辑回归 (Logistic Regression) 的算法。其特点在于算法的输出或者说预测值,一直介于 0 和 1 之间,并不会大于 1 。
- 逻辑回归算法是分类算法,不要因为这个算法的名字中出现了“回归”使你感到困惑,逻辑回归算法实际上是一种分类算法。
- 从二元的分类问题开始讨论,我们将因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),则因变量 y ∈ 0,1,其中 0 表示负向类,1 表示正向类。
假设陈述
逻辑回归模型
- 假设函数: h θ ( x ) , W a n t 0 ≤ h θ ( x ) ≤ 1 h_\theta(x) ,Want \ \ 0 \leq h_\theta(x) \leq 1 hθ(x),Want 0≤hθ(x)≤1
- 逻辑回归模型公式推导:
{ h θ ( x ) = g ( θ T x ) g ( z ) = 1 1 + e − z ⟶ h θ ( x ) = 1 1 + e − θ T x \left\{ \begin{array}{rcl} h_\theta(x) = g(\theta^Tx)\\ g(z) = \frac{1}{1+e^{-z}}\\ \end{array} \right. \longrightarrow h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}} {hθ(x)=g(θTx)g(z)=1+e−z1⟶hθ(x)=1+e−θTx1- 其中:
g
(
z
)
=
1
1
+
e
−
z
g(z) = \frac{1}{1+e^{-z}}
g(z)=1+e−z1 称为 Sigmod 函数,也叫作 Logistic 函数。
- 其中:
g
(
z
)
=
1
1
+
e
−
z
g(z) = \frac{1}{1+e^{-z}}
g(z)=1+e−z1 称为 Sigmod 函数,也叫作 Logistic 函数。
对假设函数输出的理解
- h θ ( x ) h_\theta(x) hθ(x) 的作用是:在给定参数 θ 、输入变量 x 的条件下 y = 1 的概率,即: h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta(x) = P(y=1|x;\theta) hθ(x)=P(y=1∣x;θ)。
- 例如,如果对于给定的 x,通过已经确定的参数计算得出 h θ ( x ) = 0.7 h_\theta(x) = 0.7 hθ(x)=0.7,则表示有 70% 的几率为正向类,相应地为负向类的几率为 1 - 0.7 = 0.3。
决策界限(Decision Boundary)
- 决策边界(decision boundary)的概念能更好地帮助我们理解 logistic 回归的假设函数在计算什么。
- 在逻辑回归中,我们预测:
- 当 h θ ( x ) ≥ 0.5 h_\theta(x) \geq 0.5 hθ(x)≥0.5 时,预测 y = 1 y = 1 y=1 。
- 当 h θ ( x ) < 0.5 h_\theta(x) < 0.5 hθ(x)<0.5 时,预测 y = 0 y = 0 y=0 。
- 根据上面绘制出的 S 形函数图像,我们知道当:
- h θ ( x ) ≥ 0.5 → z ≥ 0 → θ T x ≥ 0 h_\theta(x) \geq 0.5 \ \rightarrow \ z \geq 0 \ \rightarrow \ \theta^Tx \geq 0 hθ(x)≥0.5 → z≥0 → θTx≥0
- h θ ( x ) < 0.5 → z < 0 → θ T x < 0 h_\theta(x) < 0.5 \ \rightarrow \ z < 0 \ \rightarrow \ \theta^Tx < 0 hθ(x)<0.5 → z<0 → θTx<0
- 所以定义 θ T x = 0 \theta^Tx=0 θTx=0 为决策界限。但是注意决策边界不是训练集的属性,而是假设本身及其参数的属性,训练集的作用就是得到参数 θ 去拟合已有训练集。
直观地解决策界限的例子
(1) 线性决策界限
- 其中选择
θ
0
=
−
3
,
θ
1
=
1
,
θ
2
=
1
\theta_0 = -3,\theta_1 = 1,\theta_2 = 1
θ0=−3,θ1=1,θ2=1。
- 预测 y=1 则有
−
3
+
x
1
+
x
2
≥
0
−3 + x_1 + x_2 \geq 0
−3+x1+x2≥0 得到下图所示直线;
(2) 非线性决策界限
- 预测 y=1 则有
−
3
+
x
1
+
x
2
≥
0
−3 + x_1 + x_2 \geq 0
−3+x1+x2≥0 得到下图所示直线;
- 其中选择
θ
0
=
−
1
,
θ
1
=
0
,
θ
2
=
0
,
θ
3
=
1
,
θ
4
=
1
\theta_0 = -1,\theta_1 = 0,\theta_2 = 0,\theta_3 = 1,\theta_4 = 1
θ0=−1,θ1=0,θ2=0,θ3=1,θ4=1。
- 预测 y=1 则有
−
1
+
x
1
2
+
x
2
2
≥
0
−1+x_1^2+x_2^2 \geq 0
−1+x12+x22≥0 得到下图所示单位圆;
- 预测 y=1 则有
−
1
+
x
1
2
+
x
2
2
≥
0
−1+x_1^2+x_2^2 \geq 0
−1+x12+x22≥0 得到下图所示单位圆;
代价函数
- 定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的逻辑回归模型的拟合问题。
- 对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,如果我们将 h θ ( x ) = 1 1 + e − θ T x h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}} hθ(x)=1+e−θTx1代入到这样定义了的代价函数中时,它会变成参数 θ 的非凸函数。
- 这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。
- 线性回归的代价函数为:
J
(
θ
)
=
1
m
∑
i
=
1
m
1
2
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta) = \frac{1}{m}\sum_{i=1}^{m}{\frac{1}{2}(h_\theta({x^{(i)}}) - y^{(i)})^2}
J(θ)=m1i=1∑m21(hθ(x(i))−y(i))2我们另外找一个不同的代价函数,它是凸函数,使得我们可以使用很好的算法。重新定义逻辑回归的代价函数为:
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{array}{rcl} -log(h_\theta(x)) \ \ \ \ if\ \ y\ =\ 1\\ -log(1-h_\theta(x)) \ \ \ \ if\ \ y\ =\ 0\\ \end{array} \right. Cost(hθ(x),y)={−log(hθ(x)) if y = 1−log(1−hθ(x)) if y = 0
- 这样构建的
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost(h_\theta(x),y)
Cost(hθ(x),y) 函数的特点是:
- y = 1 的情况下:
C o s t = 0 i f y = 1 , h θ ( x ) = 1 h θ ( x ) → 0 , C o s t → + ∞ , P ( y = 1 ∣ x ; θ ) = 0 , b u t y = 1 Cost=0\ \ \ \ if\ y=1, h_\theta(x) = 1\\ h_\theta(x)\rightarrow0,Cost\rightarrow+\infty,P(y=1|x;\theta)=0,but\ y=1 Cost=0 if y=1,hθ(x)=1hθ(x)→0,Cost→+∞,P(y=1∣x;θ)=0,but y=1 - y = 0 的情况下:
C o s t = 0 i f y = 0 , h θ ( x ) = 0 h θ ( x ) → 1 , C o s t → + ∞ , P ( y = 1 ∣ x ; θ ) = 1 , b u t y = 0 Cost=0\ \ \ \ if\ y=0, h_\theta(x) = 0\\ h_\theta(x)\rightarrow1,Cost\rightarrow+\infty,P(y=1|x;\theta)=1,but\ y=0 Cost=0 if y=0,hθ(x)=0hθ(x)→1,Cost→+∞,P(y=1∣x;θ)=1,but y=0
- y = 1 的情况下:
简化代价函数与梯度下降
- 合并简化
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))代入代价函数得到:
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}^mCost(h_\theta(x^{(i)}),y^{(i)})\\ =-\frac{1}{m}\sum_{i=1}^m\lceil y^{(i)}log{(h_\theta(x^{(i)}))}+(1-y^{(i)})log(1-h_\theta(x^{(i)}))\rceil 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( θ ) 取得最小值的参数 θ,即用梯度下降的方法最小化:
W a n t m i n θ J ( θ ) Want\ \ \ \underset {\theta}{min}J(\theta) Want θminJ(θ):
R e p e a t { θ j : = θ j − α ∂ ∂ θ j J ( θ ) } Repeat\{ \\ \theta_j:=\theta_j- \alpha \frac{\partial}{\partial\theta_j}J(\theta)\\ \} Repeat{θj:=θj−α∂θj∂J(θ)}
求导后得到:
R e p e a t { θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) } Repeat\{ \\ \theta_j:=\theta_j- \alpha \frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}\\ \} Repeat{θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)}- 虽然得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,但是这里的j假设函数 h θ ( x ) h_\theta(x) hθ(x) 与线性回归中不同,所以实际上是不一样的。另外,在运行梯度下降算法之前,进行特征缩放依旧是非常必要的。
高级优化
- 高级优化算法:
- 共轭梯度算法
- 局部优化算法 BFGS
- 有限内存局部优化算法 L-BFGS
- 优点:无需手动选择学习率 α;收敛速度比梯度下降更快
- 缺点:算法更加复杂
- 在Matlab中调用高级算法的实例
- 梯度下降算法:如上图想将关于 θ 的函数 J(θ)最小化的话,即
θ
1
=
5
\theta_1=5
θ1=5 和
θ
2
=
5
\theta_2=5
θ2=5 使得代价函数最小。
- 调用高级的优化函数:无约束最小化函数 fminunc;
- 得到结果,theta 的最优值是 theta(1) 为 5,theta(2) 也为5;exitFlag 为 1 说明它已经是收敛了的。
- 梯度下降算法:如上图想将关于 θ 的函数 J(θ)最小化的话,即
θ
1
=
5
\theta_1=5
θ1=5 和
θ
2
=
5
\theta_2=5
θ2=5 使得代价函数最小。
- 逻辑回归算法的 Matlab 函数编写模板
多元分类:一对多
使用逻辑回归来解决类别分类问题。
- 多元分类的例子
- 邮件分类:工作邮件、朋友邮件、家庭邮件、兴趣邮件
- 病情分类:未感冒、着凉、流感
- 天气分类:晴天、多云、雨天、雪天
- 对上述所有的例子,y 可以取一些离散值,比如从 1 到 3 ,从 1 到 4 等等。
- 如下图左边为单类别样本;右图为多类别样本。
- 一对多类别分类原理(一对余方法)
现在我们有一个训练集,好比上图表示的有 3 个类别,我们用三角形表示 y = 1,方框表示 y = 2,叉叉表示 y = 3。我们要做的就是,将这个训练集转化为三个独立的二元分类问题。- 创建一个新的"伪"训练集,把类别 2 和类别 3 归类为同一样本,设为负类,把类别 1 设定为正类,进行分类拟合出一个合适的分类器
h
θ
(
1
)
(
x
)
h_\theta^{(1)}(x)
hθ(1)(x);
- 再创建一个新的"伪"训练集,把类别 1 和类别 3 归类为同一样本,设为负类,把类别 2 设为正类,进行分类拟合出一个合适的分类器
h
θ
(
2
)
(
x
)
h_\theta^{(2)}(x)
hθ(2)(x);
- 再创建一个新的"伪"训练集,把类别 1 和类别 2 归类为同一样本,设为负类,把类别 3 设为正类,进行分类拟合出一个合适的分类器
h
θ
(
3
)
(
x
)
h_\theta^{(3)}(x)
hθ(3)(x)。
- 我们训练了一个逻辑回归分类器(拟合分类器) h θ ( i ) ( x ) h_\theta^{(i)}(x) hθ(i)(x) 来预测给定 x 和 θ 时,i 类别 y = i 的概率。模型简记为: h θ ( i ) ( x ) = P ( y = i ∣ x ; θ ) ( i = 1 , 2 , 3 ) h_\theta^{(i)}(x)=P(y=i|x;\theta)\ \ \ \ \ (i=1,2,3) hθ(i)(x)=P(y=i∣x;θ) (i=1,2,3)
- 最后,为了做出预测,我们给出输入一个新的 x 值,用这个做预测。我们要做的就是在我们三个分类器里面输入 x,让我们选择一个让 h θ ( i ) ( x ) h_\theta^{(i)}(x) hθ(i)(x) 最大的 i,即 m a x i h θ ( i ) ( x ) \underset {i}{max}\ h_\theta^{(i)}(x) imax hθ(i)(x)。
- 创建一个新的"伪"训练集,把类别 2 和类别 3 归类为同一样本,设为负类,把类别 1 设定为正类,进行分类拟合出一个合适的分类器
h
θ
(
1
)
(
x
)
h_\theta^{(1)}(x)
hθ(1)(x);
- 基本的挑选分类器的方法,选择出哪一个分类器是可信度最高效果最好的,那么就可认为得到一个正确的分类,无论 i 值是多少,我们都有最高的概率值,我们预测 y 就是那个值。这就是多类别分类问题,以及一对多的方法,通过这个小方法,你现在也可以将逻辑回归分类器用在多类分类的问题上。