NLP学习_吴恩达机器学习_5
关于第五章
第五章的内容主要是针对 Octave 的操作方法,视频中使用的是 Octave ,我使用的是 Matlab ,视频中教授的代码在Matlab也适用。相比较之下,在交互方面显然是 Matlab 做的比较好,界面很友好。视频中不推荐 Matlab 是因为它是收费的,但是就中国现在的情况,高校基本都会对在校大学生提供 Matlab ;就算不是高校大学生,也有各种各样的渠道获得,在此不多赘述。
另:向量化的思想个人觉得很重要,还是值得一听的。
逻辑回归(Logistic Regression)
在分类问题中我们要预测的变量y是离散的值,而非连续。我们将会学习一种名为**逻辑回归(Logistic Regression)**的算法。
单类别分类
单类别分类,也就是二元的分类问题,y(因变量)的值要么是0(负向类 negative class),要么是1(正向类 positive class)。
再次我们依然用一个例子解释问题。乳腺肿瘤大小和良性、恶性的分类问题。
为什么不用线性回归?
假如我们依然使用线性回归的方法去解决这个分类问题,显然我们可以得到一条直线,如上图红色线条,我们可以以0.5为分界线,小于0.5的全部认为是良性,反之则为恶性。
但假设我们在右侧再加上一个样例,显然,恶性和良性的分界线依然是没有改变的,多出来的样例没有提供新的信息。但是再次使用线性回归,得到蓝色线条,可以看到,概率等于0.5的点明显改变了。
除此之外,线性回归拟合出来的函数是线性函数,可能会输出远大于1、远小于0的结果,会让人感到很奇怪。
显然,线性回归并不适用于分类问题。
假说函数
下面我们来介绍的逻辑回归 Logistic Regression的一大特点就是,输出的值永远在0和1之间。
逻辑回归的假设是 hθ(x) = h(θTX)。
其中,X是特征向量,g是逻辑函数,常用的逻辑函数是S型函数,公式为:
图像大概是这样。
hθ(x)的作用是,对于给定的输入变量,根据选择的参数计算出变量 = 1的概率。即hθ(x) = P(y = 1| x ; θ)。
判定边界(decision boundary)
下面介绍判定边界的定义,以便更好地的理解逻辑回归。
假如我们有一个模型。
并且已经确定了,θ = [-3 1 1](具体的计算方法接下来再说,我们先根据这个理解一下判定边界的意义)。
于是我们得到了一条直线(判定边界),如下图。
如果我们的数据集是这样的。
显然我们构造了一个曲线作为判定边界。
我们可以用复杂的模型来适应复杂的判断边界。
代价函数
对于线性函数,我们采用模型误差的平方和来作为误差函数,但如果我们在逻辑回归中使用的话,就会得到一个非凹函数 non-convexfunction。
这个函数有很多局部最小值,显然,当我们对这个函数使用梯度下降的时候,会影响我们寻找全局最小值。
所以我们重新定义代价函数:
简单的化简之后,可以把两个式子化为一个式子:
下面我们要做的就是梯度下降。
此处的偏导式求解之后是:
推导过程:
从结果上来看,这里得到的梯度下降算法和线性回归的算法一样(化简到最后竟然形式是一样的,数学好神奇!),但是需要注意的是,hθ的内涵改变了,所以两者并不相同。
小技巧
在实现梯度下降的时候,我们可以使用for循环来解决,但在理想条件下,更提倡使用向量化的思想来实现。
另外,特征放缩也适用于逻辑回归。如果特征范围差距很大的话,使用特征放缩,梯度下降收敛更快。
多类别分类
这里有一个例子,一个病人因为流鼻涕来到你的诊所看病,他可能没有生病,用y = 1来代表这个类别;可能是感冒,用y = 2来代表这个类别;可能是流感,用y = 3来代表这个类别。(要是按照现在的情况的话应该还要加上一个新冠吧……)
当我们面对二元的分类问题时,我们的数据可能是这样的:
但是多类别分类时,应该是这样的:
下面来介绍解决这一类问题的方法,这个方法也被称为一对余方法。
我们有三个类别,下面我们要做的就是把它分为3个二元分类问题。
我们先从三角形开始,把三角形定为正类,其余全为负类,创建一个新的训练集。
在按照我们刚刚学的二元分类问题来解决,对于正方型和叉号也一样。最后我们得到一系列模型。
其中i = 1,2,3……(逻辑回归分类器)
现在我们要做的就是分别在这三个分类器中输入x,选择一个让hθ(i)最大的i。也就是找到概率最大的那一种情况。