logistic回归是一个学习算法,用在监督学习问题中,输出y标签是0或1时,这是一个二元分类问题。
已知输入的特征向量x可能是一张图,你希望能识别出这是不是猫图,你需要一个算法,可以给出一个预测值,我们说预测值 y ^ \hat{y} y^,就是你对y的预测,更正式地说,你希望 y ^ \hat{y} y^是一个概率,当输入特征x满足条件时,y就是1 ( y ^ = P ( y = 1 ∣ x ) ) (\hat{y}=P(y=1|x)) (y^=P(y=1∣x))。所以换句话说,如果x是图片,正如上一节中看到的,你希望 y ^ \hat{y} y^能告诉你这是一张猫图的概率。所以x,正如上一节中说过的,是一个 n x n_x nx维向量。
已知logistic回归的参数是w,也是一个 n x n_x nx维向量,而b就是一个实数,所以已知输入x和参数w和b,我们如何计算输出预测 y ^ \hat{y} y^?
其实可以这样算,但是不靠谱,就是
y
^
=
w
T
x
+
b
\hat{y}=w^Tx+b
y^=wTx+b,输入x的线性函数。事实上,如果你做线性回归,就是这么算的,,但这不是一个非常好的二元分类算法,因为你希望
y
^
\hat{y}
y^是
y
=
1
y=1
y=1的概率,所以
y
^
\hat{y}
y^应该介于0和1之间。但实际上这很难实现,因为
w
T
x
+
b
w^Tx+b
wTx+b可能比1大得多,或者甚至是负值,这样的概率是没意义的,你希望概率介于0和1之间。所以在Logistic回归中,我们的输出变成
y
^
=
s
i
g
m
o
i
d
(
w
T
x
+
b
)
\hat{y}=sigmoid(w^Tx+b)
y^=sigmoid(wTx+b),这就是sigmoid函数的图像。
横轴是z,那么sigmoid(z)就是这样的,从0到1的光滑函数,该函数与垂直轴相较于0.5处,这就是sigmoid(z)的图形,我们用z来表示
w
T
x
+
b
w^Tx+b
wTx+b,这就是sigmoid函数的公式,
y
^
=
s
i
g
m
o
i
d
(
z
)
\hat{y}=sigmoid(z)
y^=sigmoid(z),其中z是实数,
σ
=
1
1
+
e
−
z
\sigma = \frac{1}{1+e^{-z}}
σ=1+e−z1。
要注意一些事情,如果z非常大,那么 e − z e^{-z} e−z就很接近0,那么 σ ≈ 1 1 + 某 个 很 接 近 0 的 量 \sigma \approx \frac{1}{1+某个很接近0的量} σ≈1+某个很接近0的量1,所以这接近1,事实上,如果看sigmoid这个图,当z很大时,sigmoid(z)就很接近1。相反,如果z很小,或者是非常大的负数,那么 e − z e^{-z} e−z就会变成很大的数字,所以sigmoid函数就会接近0。所以当你实现logistic函数时,你要做的是学习参数w和b。
在继续之前,我们再讲讲符号约定,,当我们对神经网络编程时,我们通常会把参数w和参数b分开,这里b对应一个拦截器,在其他一些课程中你们可能看过不同的表示。在一些符号约定中,你定义一个额外的特征向量,
x
0
=
1
x_0=1
x0=1,那么新的x向量就是一个
n
x
+
1
n_x+1
nx+1维向量,然后将
y
^
=
σ
(
θ
T
x
)
\hat{y}=\sigma (\theta^Tx)
y^=σ(θTx)。在这另一种符号约定中,你有一个向量参数
θ
\theta
θ,其中
θ
0
\theta_0
θ0扮演的是b的角色,这是一个实数,而
θ
1
\theta_1
θ1到
θ
n
\theta_n
θn的作用和w一样。
事实上,当你实现你的神经网络时,将b和w看做独立的参数可能更好,所以在这门课中,我们不会用这种符号约定。