机器学习入门(4)——逻辑回归(Logistic Regression)
- 分类问题(Classification)
- 假设陈述(Hypothesis Representation)
- 决策界限(Decision Boundary)
- 代价函数(Cost Function)
- 简化代价函数与梯度下降(Simplified Cost Function and Gradient Descent)
- 多元分类:一对多(Multiclass Classification_ One-vs-all)
分类问题(Classification)
在分类问题中,要预测的变量 y是离散的值。逻辑回归 (Logistic Regression) 的算法是目前最流行使用最广泛的一种学习算法,它算法的性质是:输出值永远在0到 1 之间。
逻辑回归算法实际上是一种分类算法,它适用于标签 y取值离散的情况。
假设陈述(Hypothesis Representation)
我们引入一个新的模型,逻辑回归,该模型的输出变量范围始终在0和1之间。 逻辑回归模型的假设是:h_{\theta}(x)=g\left(\theta^{T} X\right)。其中:X代表特征向量,g代表逻辑函数(logistic function),是一个常用的逻辑函数为S形函数(Sigmoid function),公式为:g(z)=\frac{1}{1+e^{-z}}。
该函数的图像为:

python代码实现:
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
python
对模型的理解:
h_{\theta}(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity)即h_{\theta}(x)=P(y=1 \mid x ; \theta)。例如,若对于给定的x,通过已经确定的参数计算得出h_{\theta}(x)=0.7,则表示有70%的几率y为正向类,相应地y为负向类的几率为1-0.7=0.3。
决策界限(Decision Boundary)


代价函数(Cost Function)
对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将h_{\theta}(x)=\frac{1}{1+e^{-\theta^{T} x}}代入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction)。
这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。

将构建的Cost \left(h_{\theta}(x), y\right) 简化如下:Cost \left(h_{\theta}(x), y\right)=-y \times \log \left(h_{\theta}(x)\right)-(1-y) \times \log \left(1-h_{\theta}(x)\right) 代入代价函数得到: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]
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))
python

在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:
Repeat { \theta_{j}:=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta) (simultaneously update all ) }
求导后得到:
Repeat { \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)} (simultaneously update all ) }
在梯度下降算法之前,进行特征缩放依旧是非常必要的。
简化代价函数与梯度下降(Simplified Cost Function and Gradient Descent)
最小化代价函数的方法,是使用梯度下降法(gradient descent)。这是我们的代价函数: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]
梯度下降算法:
\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)},来同时更新所有\theta的值。

因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。
监控线性回归的梯度下降法以确保其收敛的方法,也可以用在逻辑回归中,来监测梯度下降,以确保它正常收敛。
线性回归中的特征缩放,也适用于逻辑回归。若特征范围差距很大的话,应用特征缩放的方法,可让逻辑回归中梯度下降收敛更快。
多元分类:一对多(Multiclass Classification_ One-vs-all)


多类别分类问题的基本的挑选分类器的方法,选择出哪一个分类器是可信度最高效果最好的,那么就可认为得到一个正确的分类,无论i值是多少,我们都有最高的概率值,我们预测y就是那个值。
