分类问题(Classification)
在分类问题中,要预测的变量 y是离散的值。逻辑回归 (Logistic Regression) 的算法是目前最流行使用最广泛的一种学习算法,它算法的性质是:输出值永远在0到 1 之间。
逻辑回归算法实际上是一种分类算法,它适用于标签 y取值离散的情况。
假设陈述(Hypothesis Representation)
我们引入一个新的模型,逻辑回归,该模型的输出变量范围始终在0和1之间。 逻辑回归模型的假设是:
h
θ
(
x
)
=
g
(
θ
T
X
)
h_{\theta}(x)=g\left(\theta^{T} X\right)
hθ(x)=g(θTX)。其中:X代表特征向量,g代表逻辑函数(logistic function),是一个常用的逻辑函数为S形函数(Sigmoid function),公式为:
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1。
该函数的图像为:
python代码实现:
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
对模型的理解:
h
θ
(
x
)
h_{\theta}(x)
hθ(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity)即
h
θ
(
x
)
=
P
(
y
=
1
∣
x
;
θ
)
h_{\theta}(x)=P(y=1 \mid x ; \theta)
hθ(x)=P(y=1∣x;θ)。例如,若对于给定的x,通过已经确定的参数计算得出
h
θ
(
x
)
h_{\theta}(x)
hθ(x)=0.7,则表示有70%的几率y为正向类,相应地y为负向类的几率为1-0.7=0.3。
决策界限(Decision Boundary)
代价函数(Cost Function)
对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
h_{\theta}(x)=\frac{1}{1+e^{-\theta^{T} x}}
hθ(x)=1+e−θTx1代入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction)。
这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。
将构建的Cost
(
h
θ
(
x
)
,
y
)
\left(h_{\theta}(x), y\right)
(hθ(x),y) 简化如下:Cost
(
h
θ
(
x
)
,
y
)
=
−
y
×
log
(
h
θ
(
x
)
)
−
(
1
−
y
)
×
log
(
1
−
h
θ
(
x
)
)
\left(h_{\theta}(x), y\right)=-y \times \log \left(h_{\theta}(x)\right)-(1-y) \times \log \left(1-h_{\theta}(x)\right)
(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x)) 代入代价函数得到:
J
(
θ
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]
J(θ)=−m1∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
Python代码实现:
import numpy as np
def cost(theta, X, y):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(X* theta.T)))
second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T)))
return np.sum(first - second) / (len(X))
在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:
Repeat {
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
\theta_{j}:=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta)
θj:=θj−α∂θj∂J(θ) (simultaneously update all ) }
求导后得到:
Repeat {
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_{j}:=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}
θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i) (simultaneously update all ) }
在运行梯度下降算法之前,进行特征缩放依旧是非常必要的。
简化代价函数与梯度下降(Simplified Cost Function and Gradient Descent)
最小化代价函数的方法,是使用梯度下降法(gradient descent)。这是我们的代价函数:
J
(
θ
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]
J(θ)=−m1∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
梯度下降算法:
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_{j}:=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}
θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i),来同时更新所有
θ
\theta
θ的值。
因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。
监控线性回归的梯度下降法以确保其收敛的方法,也可以用在逻辑回归中,来监测梯度下降,以确保它正常收敛。
线性回归中的特征缩放,也适用于逻辑回归。若特征范围差距很大的话,应用特征缩放的方法,可让逻辑回归中梯度下降收敛更快。
多元分类:一对多(Multiclass Classification_ One-vs-all)
![](https://img-blog.csdnimg.cn/20200714002532152.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N0cml2ZXF1ZWVu,size_16,color_FFFFFF,t_70)
多类别分类问题的基本的挑选分类器的方法,选择出哪一个分类器是可信度最高效果最好的,那么就可认为得到一个正确的分类,无论i值是多少,我们都有最高的概率值,我们预测y就是那个值。