针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化损失函数?(?),接下来学习了更高级的优化算法,这些高级优化算法需要你自己设计代价函数?(?)。
如果你使用上面的高次多项式去拟合我们的数据,逻辑回归也会出现过拟合的情况。这时候你会得到一个预测函数,从它的边界来看,十分的复杂而且扭曲,对于这个训练集来说,确实不是一个很好的函数。通常情况下,如果你的逻辑回归有很多特征,这些大量的特征最终会导致过拟合现象的发生。
逻辑回归的损失函数,为了使用正则化,我们需要进行一些修改,我们需要做
的就是在后面加上这样一项,
这一项的作用就是惩罚θ1,θ2……θn,防止它们过大,这样做的效果就是,即使当你的拟合阶数很高,且参数很多,只要添加了这个正则化项,保持参数较小,你仍然可以得到这样一条像边界的曲线(最上图粉红线),显然,这条边界能够更加合理的划分正样本和负样本。因此,使用正则项的话,即使你有很多的特征,正则化都可以帮你避免过拟合现象。
Python
代码
:
import numpy as np
def
costReg(theta, X, y, learningRate):
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)))
reg=(learningRate/(2*len(X))*np.sum(np.power(theta[:,1:theta.shape[1]],2))
return np.sum(first - second) / (len(X)) + reg
我们究竟该如何实现它呢?对于最初的梯度下降算法,我们通过下面这个式子,反复更新θj的值 为了修改这个函数,使之成为正则化的损失函数,我接下来需要做的和对线性回归所做的处理很类似,只需要将第二个式子修改成这样 我们可以看出它非常像我们之前线性回归的式子,但当然,他们不是同一个算法,因为现在的假设模型是这样定义的 在方括号的里的这一项是什么呢?他是新定义的损失函数?(?)对θj的偏导数,这里的?(?)是我们刚刚定义的正则化的损失函数。这就是正则化逻辑回归函数的梯度下降算法。 注意: 1. 虽然正则化的逻辑回归中的梯度下降和正则化的线性回归中的表达式看起来一样,但由于两者的 ℎ?(?) 不同所以还是有很大差别。 2. ?0 不参与其中的任何一个正则化。 目前大家对机器学习算法可能还只是略懂,但是一旦你精通了线性回归、高级优化算法和正则化技术,坦率地说,你对机器学习的理解可能已经比许多工程师深入了。现在,你已经有了丰富的机器学习知识,目测比那些硅谷工程师还厉害,或者用机器学习算法来做产品。 接下来的课程中,我们将学习一个非常强大的非线性分类器,无论是线性回归问题,还是逻辑回归问题,都可以构造多项式来解决。你将逐渐发现还有更强大的非线性分类器,可以用来解决多项式回归问题。我们接下来将学会,比现在解决问题的方法强大 N 倍的学习算法。