【Machine Learning, Coursera】机器学习Week3 Logistic Regression
Logistic Regression
Logistic regression is a method for classifying data into discrete outcomes.
逻辑回归将数据归类为离散的结果并输出
Example: Predict whether a tumor is malignant or not.
Training set
x=Tumor size
y=Malignant tumor or benign tumor()
1. Classification
逻辑回归虽然名为“回归”,但它解决的其实是分类问题。以下面的三个场景为例,它们均属于二分类问题,习惯上把我们关注的某一现象的存在归为y=1(如垃圾邮件、恶性肿瘤细胞),反之则为y=0.
此外,还有多分类问题,详见本节第六部分。
我们可以尝试用线性回归的方法解决根据肿瘤大小判断是否为恶性肿瘤这一分类问题。显然,一个直观的想法是,以为阈值,当时,认为肿瘤是恶性肿瘤的几率更大,预测y=1,反之,为良性肿瘤,预测y=0。
可以看到,在只有左侧八个观测点的原始回归中,我们可以近似得到如图所示的一条回归线,以为界,可对训练样本中的肿瘤细胞进行正确的归类。这似乎说明线性回归法是可行的。
但是,当新增一个观测点时,线性回归结果就不甚乐观了。新观测点会吸引回归线向自己靠近,由此增大了时的x值。在新的回归下,左侧两个恶性肿瘤观测点会被错误地归类为良性肿瘤。
此外,在二分类的归类问题中,y只有0或1两个离散的取值,而线性回归得到的“概率”取值范围大,可能大于1,也可能小于0,这不符合我们对概率(介于0~1之间)的认知。
因此,线性回归并不是一个解决归类问题的好办法。我们需要构造一个新的模型来解决分类问题。
2. Sigmoid Function
Sigmoid Function:
Sigmoid函数又称S型函数或逻辑函数,其取值范围在(0,1)之间,是一种理想的分类问题假设函数表达形式。将z替换成x和θ的函数(不一定为线性形式,需根据具体的问题来确定),即可得到假设函数
对于上述肿瘤分类问题,当输出结果时,可以解释为
对于一个肿瘤大小为x的患者,该肿瘤为恶性肿瘤的可能性为0.7
的含义为给定x和θ时y=1的概率,
3. Decision Boundary
在第二部分提到,用于替换z的函数需要根据具体的问题来确定。如对于左图的分类问题,替换成线性函数是合适的;而对于右图中的问题,替换成圆的一般方程的形式更合适。
替换z的函数在参数θ确定后,以特征x为轴作图(n=2 or 3)可得到一条决策边界(Decision Boundary),这一概念能更好地帮助我们理解逻辑回归的假设函数。
以左图为例,.
对于该二分类问题,我们有
由Sigmoid图像可以知道,这其实等价于
即为该分类问题的决策边界,在边界右上方的区域y=1,边界左下方的区域y=0。逻辑回归其实就是要找到最佳的参数θ,使得决策边界能尽可能地将不同类别的样本区分开来。
4. Cost Function
回顾线性回归的代价函数
可以看到,线性回归的代价函数有明显的实际意义(表示平方损失),如果逻辑回归也采用这种形式的代价函数,我们不仅无法直观地解释其含义,还会面临存在多个局部最优解的问题,因为逻辑回归的是非线性的,这样构造的很可能为非凸函数(non-convex)。
因此,我们希望构造一个可解释的凸函数,作为逻辑回归的代价函数:
在逻辑回归中,Cost函数的表达式为
它等价于
作图可以帮助我们更直观地理解Cost函数。我们的直觉是,当分类完全正确时,Cost应该为0,而当分类错误非常离谱,如而实际上y=1,或者而实际上y=0时,应当用一个很大的Cost来惩罚算法。
将简化的Cost表达式带入J(θ),有
5. Parameter Learning
5.1 Gradient Descent
Want :
Repeat until convergence {
对逻辑回归的代价函数求微分
即
可以发现,虽然对的定义不同,逻辑回归的梯度下降在形式上和线性回归完全相同。
5.2 Optimization Algorithm
除了梯度下降法外,还有其他高级优化算法可用于优化参数,如:
-Conjugate gradient
-BFGS
-L-BFGS
这些高级优化算法有许多优点:
1、无需手动选择学习率α。这些算法内含一个智能循环,称为线性搜索(line search),它可自动尝试不同的学习率α并选择一个合适的值。
2、比梯度下降法收敛速度更快。
虽然这些算法细节非常复杂,我们可以通过调用已有的软件库或函数直接使用它们,而不用自己编写代码去实现。
在MATLAB中的应用举例:
对于左边的优化问题,我们先自定义函数costFunction,该函数传入2x1向量theta,返回计算的代价函数值和梯度值,梯度值为一个2x1的向量。接下来,调用高级优化函数fminunc,它表示无约束最小化函数,可用于任意函数求最小值。Matlab中对fminunc函数的解释为
fminunc finds a local minimum of a function of several variables.
fminunc函数形式为
它传入三个参数:fun表示目标函数,它接收变量并返回一个标量;x0为自变量初始值,在matlab中它可以是标量、向量或者矩阵;options用于改变默认的优化参数,可用optimset(‘PARAM1’, VALUE1, ‘PARAM2’, VALUE2,…)来指定, 图中GradObj表示目标函数是否返回梯度值,MaxIter表示最大迭代次数。
返回三个结果:x为自变量的解;fVal为目标函数值;exitFlag为退出标志,它大于0时表示收敛、等于0时表示迭代次数超过、小于0时表示函数不收敛。
6. Multi-class classification: One-vs-all
多分类问题的场合,y有多个类别,需要用多个数值来表示,如y∈{0,1,2,3}或y∈{1,2,3,4}。
一对多(One-vs-all)是一种解决多分类问题的思想,它将一个K分类问题转换为K个二分类问题。
下图中有三个类别,记为y∈{1,2,3}。首先将三角形代表的类别1定义为正类,类型2和3定义为负类,分别用1和0来表示,这样我们就可以用二分类的方法拟合出一个分类器,称为。同样地,我们可以得到分类器和。的含义是给定x和θ时,y为第i类的概率。
给定一个新的x,我们分别将其输入三个训练好的分类器中,选择使最大的作为模型的预测类别。