岭回归与多项式回归的最大区别就是损失函数上的区别。岭回归的代价函数如下:
为了方便计算导数,通常也会写成以下形式:
上述式子中w为长度为n的向量,不包括偏置项的系数 θ0,θ是长度为n+1的向量,包括偏置项系数θ0;m为样本数,n为特征数。
岭回归的代价函数仍然是凸函数,因此可以利用梯度等于0的方式求得全局最优解:
上述方程与一般线性回归方程相比多了一项λI,其中I表示单位矩阵,加入XTX是一个奇异矩阵(不满秩),添加这一项之后可以保证该项可逆,由于单位矩阵上的对角元素均为1,其余元素都为0,看起来像是一条山岭,因此而得名。
还可以使用随机梯度下降算法来求解:
参数更新就可以如下表示:
首先还是定义一个基类,各种线性回归都需要继承该基类:
classRegression(object):"""Base regression model. Models the relationship between a scalar dependent variable y and the independent
variables X.
Parameters:
-----------
n_iterations: float
The number of training iterations the algorithm will tune the weights for.
learning_rate: float
The step length that will be used when updating the weights."""
def __init__(self, n_iterations, learning_rate):
self.n_iterations=n_iterations
self.learning_rate=learning_ratedefinitialize_weights(self, n_features):"""Initialize weights randomly [-1/N, 1/N]"""limit= 1 /math.sqrt(n_features)
self.w= np.random.uniform(-limit, limit, (n_features, ))deffit(self, X, y):#Insert constant o