吴恩达机器学习----逻辑回归

吴恩达机器学习教程学习笔记 (4/16)

吴恩达教授(Andrew Ng)的机器学习可以说是一门非常重视ML理论基础的课程,做做一些简单的笔记加上个人的理解。本笔记根据吴恩达的课程顺序,以每章内容作为节点进行记录。(共18章,其中第3章“线性代数回顾”与第5章“Octava教程”的笔记就不总结了)

第六章 逻辑回归(Logistic Regression)

1、分类问题及函数表示

在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。
分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们也谈到了肿瘤分类问题的例子,区别一个肿瘤是恶性的还是良性的。
从二元的分类问题讨论:
如果我们要用线性回归算法来解决一个分类问题,对于分类,y取值为0或者1,但如果你使用的是线性回归,那么假设函数的输出值可能远大于1,或者远小于0,即使所有训练样本的标签y都等于0或1。尽管我们知道标签应该取值0或者1,但是如果算法得到的值远大于1或者远小于0的话,就会感觉很奇怪。
吴恩达机器学习----逻辑回归_第1张图片
所以我们在接下来的要研究的算法就叫做逻辑回归算法,这个算法的性质是:它的输出值永远在0到1之间。逻辑回归算法是分类算法,我们将它作为分类算法使用。逻辑回归算法实际上是一种分类算法,它适用于标签 y 取值离散的情况,如:1 0 0 1。我们所希望的分类器的输出值在0和1之间,因此,我们希望想出一个满足某个性质的假设函数,这个性质是它的预测值要在0和1之间。
例子
一开始提到的乳腺癌分类问题,我们可以用线性回归的方法求出适合数据的一条直线:
吴恩达机器学习----逻辑回归_第2张图片
根据线性回归模型我们只能预测连续的值,然而对于分类问题,我们需要输出0或1,我们可以预测:
当hθ(x)≥0.5时,预测 y=1。
当hθ(x)<0.5时,预测 y=0 。
对于上图所示的数据,这样的一个线性模型似乎能很好地完成分类任务。假使我们又观测到一个非常大尺寸的恶性肿瘤,将其作为实例加入到我们的训练集中来,这将使得我们获得一条新的直线。
吴恩达机器学习----逻辑回归_第3张图片
这时,再使用0.5作为阀值来预测肿瘤是良性还是恶性便不合适了。可以看出,线性回归模型,因为其预测的值可以超越[0,1]的范围,并不适合解决这样的问题。
逻辑回归模型表示:
h θ ( x ) = g ( θ T X ) h_θ (x)=g(θ^TX) hθ(x)=g(θTX)其中 X 代表代表特征向量,g代表逻辑函数(logistic function)是一个常用的逻辑函数为S形函数(Sigmoid function),公式为: g ( z ) = 1 / ( 1 + e ( − z ) ) g(z)=1/(1+e^{(-z)} ) g(z)=1/(1+e(z))
Python代码实现Sigmoid函数:

import numpy as np
def sigmoid(z):
    return 1 / (1 + np.exp(-z))

函数图像为:
吴恩达机器学习----逻辑回归_第4张图片
hθ(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity)。例如,如果对于给定的x,通过已经确定的参数计算得出hθ(x)=0.7,则表示有70%的几率y为正向类,相应地y为负向类的几率为1-0.7=0.3。
∵ 0 ≤ h θ ( x ) ≤ 1 ∵ 0≤h_θ(x)≤1 0hθ(x)1 又 ∵ h θ = g ( θ T x ) , g ( z ) = 1 / ( 1 + e ( − z ) ) 又∵h_θ = g(θ^Tx),g(z) = 1/(1 + e^{(-z)}) hθ=g(θTx)g(z)=1/(1+e(z)) ∴ h θ ( x ) = 1 / ( 1 + e ( − θ T x ) ) ∴h_θ(x) =1/(1 + e^{(-θ^Tx)}) hθ(x)=1/(1+e(θTx))
那么逻辑回归的假设函数在计算什么?
在逻辑回归中,我们预测:
当 h θ ( x ) ≥ 0.5 时 , 预 测 y = 1 。 当h_θ (x)≥0.5时,预测 y=1。 hθ(x)0.5y=1 当 h θ ( x ) < 0.5 时 , 预 测 y = 0 。 当h_θ (x)<0.5时,预测 y=0 。 hθ(x)<0.5y=0
根据上面绘制出的 Sigmoid 函数图像,我们知道当
z = 0 时 g ( z ) = 0.5 z=0 时 g(z)=0.5 z=0g(z)=0.5 z > 0 时 g ( z ) > 0.5 z>0 时 g(z)>0.5 z>0g(z)>0.5 z < 0 时 g ( z ) < 0.5 z<0 时 g(z)<0.5 z<0g(z)<0.5 则 , θ T x ≥ 0 时 , 预 测 y = 1 则,θ^T x≥0 时,预测 y=1 θTx0y=1 θ T x < 0 时 , 预 测 y = 0 θ^T x<0 时,预测 y=0 θTx<0y=0

2、代价函数

对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题来了,当将hθ(x)代入到这样定义的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction)。
吴恩达机器学习----逻辑回归_第5张图片
这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。
所以,重新定义的逻辑回归代价函数如下:
J ( θ ) = 1 / m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) , 其 中 J(θ)=1/m ∑_{i=1}^m Cost(h_θ (x^{(i)}) ,y^{(i)}) ,其中 J(θ)=1/mi=1mCost(hθ(x(i)),y(i)),在这里插入图片描述
hθ(x)与 Cost(hθ(x),y)之间的关系如下图所示:
吴恩达机器学习----逻辑回归_第6张图片
这样构建的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函数 简化如下:
C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost(h_θ (x),y)=-y×log(h_θ (x))-(1-y)×log(1-h_θ (x)) Cost(hθ(x),y)=y×log(hθ(x))(1y)×log(1hθ(x))
代入代价函数得到:
J ( θ ) = 1 / m ∑ i = 1 m [ − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(θ)=1/m ∑_{i=1}^m[-y^{(i)} log(h_θ (x^{(i)} ))-(1-y^{(i)} )log(1-h_θ (x^{(i)} ))] J(θ)=1/mi=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))] 即 : J ( θ ) = − 1 / m ∑ i = 1 m [ y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] 即: J(θ)=-1/m ∑_{i=1}^m[y^{(i)} log(h_θ (x^{(i)} ))+(1-y^{(i)} )log(1-h_θ (x^{(i)} ))] J(θ)=1/mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]
Python代码实现代价函数:

import numpy as np
from sigmoid inport *
def cost_function(X, y, theta):
   cost = 0
   h = sigmoid(X.dot(theta))
   first = -y * np.log(h)
   second = (1-y) * np.log(1-h)
   cost = np.sum(first - second) / (len(x))
   return cost

感谢黄海广博士团队的翻译和笔记
END

你可能感兴趣的:(吴恩达机器学习笔记,人工智能,吴恩达,机器学习,逻辑回归)