1.Classification and Representation
为了解决分类问题,一个方法就是用线性回归将所有大于0.5的预测视做1,小于0.5的预测视做0.但这种做法通常不能很好工作。
分类问题和回归问题很相像,除了一点,分类问题的输出值是离散的,例如:0或1。
我们首先讨论二元分类问题:y的取值只有0或者1.
忽略掉y的取值,我们仍然可以构想分类问题类似回归问题,用线性回归来通过x预测y。而 大于1或者小于0的情况,对于我们来说没有什么意义。我们可以将 做一些改变,让它的取值范围是[0,1],这里我们引入逻辑函数(Logistic Function)又称作S型函数(Sigmoid Function)
The following image shows us what the sigmoid function looks like:
这里显示的函数g(z)将任意实数映射到(0,1)区间,这使得它对于将任意值函数转换为更适合分类的函数非常有用。
此时 表示输出为1的概率,而预测为0的概率是1-预测为1的概率。用数学形式这样表达:
为了得到离散的0或1分类,我们可以将假设函数的输出表示如下:
对逻辑函数来说,当它的输入大于或等于零时,它的输出大于或等于0.5
我们对函数g的输入是,这意味着当>0,那么 g( ) >= 0.5
换言之:
2.Cost Function
我们不能使用与线性回归相同的成本函数,因为Logistic函数会导致输出波形,导致许多局部优化。换句话说,它不是一个凸函数。代替的是,我们的logistic回归成本函数:
当 y = 1 的时候,我们得到以下的图像(横轴是h,纵轴是cost function):
同样的,当 y = 0 的时候,我们的到以下图像:
然后我们可以得出以下几个结论
注意,以这种方式编写成本函数保证了J(θ)是凸逻辑回归。
3.Simplified Cost Function and Gradient Descent
我们把成本函数的两个函数合并成一个:
因为逻辑回归的特性,y 的取值只有0和1,当 y 分别取值为0或1时,用上式算出来的结果和分段函数是一样的。
我们可以写出来J(θ)表示如下:
向量化表示:
通常形式的梯度下降算法表示如下:
我们可以用微积分算出它的表现形式如下:
把它向量化表示:
4.Advanced Optimization
有时候,梯度下降并不是我们用来收敛J(θ)的唯一选择,有一些成熟的算法比如:"Conjugate gradient", "BFGS", and "L-BFGS",你都可以在库里找到,并且直接使用。
通过一个给定的输入值θ,我们需要提供一个函数来评估以下两个函数:
我们编写代码如下:
function [jVal, gradient] = costFunction(theta)
jVal = [...code to compute J(theta)...];
gradient = [...code to compute derivative of J(theta)...];
end
然后,我们可以使用octave的“fminunc()”优化算法和“optimset()”函数,用“optimset()”函数创建一个对象,其中包含要发送给“fminunc()”的选项(这里设置梯度目标参数为打开(on),这意味着你现在确实要给这个算法提供一个梯度,还设置最大迭代次数,比方这里设置为100)。
options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
我们给函数“fminunc()”我们的成本函数,我们的值的初始向量,以及我们预先创建的“options”对象。
5.Multiclass Classification: One-vs-all
现在,当我们有两个以上的类别时,我们将讨论数据的分类。我们将扩展定义,使y ={0,1…n},而不是y ={0,1,…n}。
因为y ={0,1,…n},我们将问题分成n+1(由于索引从0开始,所以为+1)个二元分类问题;在每一个例子中,我们都预测了y是某个类的成员的概率。
我们基本上选择了一个类,然后将所有其他类合并到一个单独的第二个类中。我们反复这样做,对每个案例应用二元逻辑回归,然后使用返回最大值的假设作为我们的预测。
下面的图片展示了如何分类3类:
6.The Problem of Overfitting
对于问题的预测,我们通常会遇到过度拟合,欠拟合,和合适的拟合。例如下图:
为了解决过度拟合的问题,我们有以下2个办法:
1.减少特征值的数量:
手动选择要保留哪些特征值。
使用模型选择算法(本课程稍后会学习)。
2.正则化
保持的所有特性,但是减少参数 的大小 。
当我们有很多稍微有用的特性时,正则化会工作得很好。
6.1 正则化:
我们可以将cost function 修改为以下形式:
λ为正则化参数。它决定了参数膨胀的代价。
利用上述带有额外求和的代价函数,我们可以得到平滑h函数的输出,以减少过度拟合。但如果选择太大,可能会使函数过于平滑,导致拟合不足。
我们可以将正则化应用于线性回归和逻辑回归。
6.2 正则化线性回归
6.2.1梯度下降法
我们将修改我们的梯度下降函数,但是我们要先把 分离出来,因为通常情况下我们并不想要惩罚它,(虽然惩不惩罚它对最后的结果影响很小很小),修改后的梯度下降函数如下:
这一项:执行我们的正规化。通过一些操作,我们的更新规则也可以表示为:
6.2.2 正规方程法
现在让我们使用非迭代法方程的另一种方法来进行正则化。
在正则化中,除了在括号中添加另一项外,方程与原方程相同:
L是一个矩阵,左上角是0,对角线上是1,其他地方都是0。它应该有维度(n+1)×(n+1)
同时加上了正规化操作,可以保证 这个矩阵绝对是可逆的。
6.3正则化逻辑回归
我们可以用与线性回归相似的方法对逻辑回归进行正则化从而可以避免过度拟合。下图显示了用粉色线表示的正则化函数比用蓝色线表示的非正则化函数更不容易超拟合:
我们的逻辑回归成本函数是:
我们可以把这个方程正则化,在最后加上一项::
正则化的梯度下降算法: