正则化与逻辑回归

针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:梯度下降法,更高级的优化算法需要你自己设计代价函数$J(\theta)$。

给代价函数增加一个正则化的表达式,得到代价函数:

牛刀小试

def sigmoid(x, derivative=False):
    sigm = 1. / (1. + np.exp(-x))
    if derivative:
        return sigm * (1. - sigm)
    return sigm

# 代码实现
import numpy as np
def costReg(theta, X, y, learningRate):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    # todo 实现代价函数第一部分的计算
    first = np.multiply(-y, np.log(sigmoid(X * theta.T))) 
    # todo 实现代价函数第二部分的计算
    second = np.multiply((1 - y), np.log(1 - sigmoid(X * theta.T))) 
    # todo 实现代价函数正则化的计算
    reg = (learningRate / 2 * len(X)) * np.sum(np.power(theta[:,1:theta.shape[1]], 2)) 
    return np.sum(first - second) / (len(X)) + reg

注:看上去同线性回归一样,但是由于假设$h_\theta(x)=g(\theta^TX)$,所以与线性回归不同。

注意:

  1. 虽然正则化的逻辑回归中的梯度下降和正则化的线性回归中的表达式看起来一样,但 由于两者的$h_\theta(x)$不同所以还是有很大差别。
  2. $\theta_0$不参与其中的任何一个正则化。