使用线性回归时,必须将L2正则化添加到成本函数中?
我不是在计算成本时添加l2或考虑到它。这是错的吗?
下面的代码段应该足够了:
def gradient(self, X, Y, alpha, minibatch_size):
predictions = None
for batch in self.iterate_minibatches(X, Y, minibatch_size, shuffle=True):
x, y = batch
predictions = x.dot(self.theta)
for it in range(self.theta.size):
temp = x[:, it]
temp.shape = (y.size, 1)
errors_x1 = (predictions - y) * temp
self.theta[it] = self.theta[it] - alpha * (1.0 / y.size) * errors_x1.sum() + self.lambda_l2 * self.theta[it] * self.theta[it].T
print self.cost(X, Y, self.theta)
def cost(self, X, Y, theta, store=True):
predictions = X.dot(theta)
from sklearn.metrics import mean_squared_error
cost = mean_squared_error(Y, predictions, sample_weight=None, multioutput='uniform_average')
if store is True:
self.cost_history.append(cost)
return cost
答案 0 :(得分:1)
没有必要将L2(或L1)正则化添加到线性回归(LR)实现中。
然而,在没有正则化项的情况下,将L2正则化项添加到我们的成本函数中具有优于LR的优势。最重要的是,正则化术语可帮助您减少模型过度拟合并改进模型的泛化。具有L2正则化的LR通常被称为“岭回归”。
除了岭回归之外,具有L1正则化的LR被称为 Lasso回归。如果使用Lasso回归构建回归模型,则模型将是稀疏模型。因此,Lasso也可用于特征选择。
祝你好运!