吴恩达 【机器学习】第七章 逻辑回归Logistic Regression
7.1 分类Classification
- 预测离散的变量
- 举例证明线性回归不能很好地处理分类问题
- 逻辑回归(Logistic Regression)是解决分类(Classification)问题的一种算法
7.2 假设函数
- 逻辑回归,该模型的输出变量范围始终在0和1之间。
- 逻辑回归模型的假设是:
hθ(x)=g(θTx)
g(z)=1+e−z1
- 其中:
-
X 代表特征向量
-
g 代表逻辑函数(logistic function)是一个常用的逻辑函数,这里用Sigmoid函数(Sigmoid function),公式为: g(z)=1+e−z1。
python代码实现:
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
该函数的图像为:

-
对模型的理解:
hθ(x)=g(θTx)
g(z)=1+e−z1。
-
hθ(x)的作用是:对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity)即hθ(x)=P(y=1∣x;θ) 。
例如,如果对于给定的x,通过已经确定的参数计算得出hθ(x)=0.7,则表示有70%的几率y为正向类,相应地y为负向类的几率为1-0.7=0.3。
7.3 决策界限Decision Boundary
- 决策边界是由参数θ决定的,而不是由训练集决定的
- 训练集是用来拟合(fit)参数θ的
- 举例:

- 我们可以用非常复杂的模型来适应非常复杂形状的判定边界。
7.4 代价函数
- 如果用线性回归里用的差平方作为cost函数,再加上非线性的sigmiod函数,会使得最终函数非凸(non-convex),有很多局部最小值,梯度下降很难找到全局最优解
- 线性回归的代价函数为:
J(θ)=m1i=1∑m21(hθ(x(i))−y(i))2 。
- 我们重新定义逻辑回归的代价函数为:
J(θ)=m1i=1∑mCost(hθ(x(i)),y(i)),
- 其中hθ(x)与 Cost(hθ(x),y)之间的关系如下图所示:
- 这样构建的Cost(hθ(x),y)函数的特点是:
- 当实际的 y=1 且hθ(x)也为 1 时误差为 0,
当 y=1 但hθ(x)不为1时误差随着hθ(x)变小而变大;
- 当实际的 y=0 且hθ(x)也为 0 时代价为 0,
当y=0 但hθ(x)不为 0时误差随着 hθ(x)的变大而变大。
- 将构建的 Cost(hθ(x),y)简化如下:
Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x))
- 代入代价函数得到:
J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]
即:J(θ)=−m1i=1∑m[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))
7.5 简化代价函数和梯度下降
7.6 高级优化
用来使代价函数最小化的高级算法
- 梯度下降
- 共轭梯度法 (Conjugate Gradient)
- BFGS (变尺度法)
- L-BFGS (限制变尺度法)
7.7 多类别分类问题:一对多
- 举例
- 对比
- 做法:"一对余"方法
- 我们将多个类中的一个类标记为正向类(y=1),然后将其他所有类都标记为负向类,这个模型记作hθ(1)(x)。
- 接着,类似地第我们选择另一个类标记为正向类(y=2),再将其它类都标记为负向类,将这个模型记作 hθ(2)(x),依此类推。
- 然后,我们得到一系列的模型简记为: hθ(i)(x)=p(y=i∣x;θ)其中:i=(1,2,3....k)
- 最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。即:imaxhθ(i)(x)