在 Matlab 中使用 L2 正则化实现逻辑回归
Posted
技术标签:
【中文标题】在 Matlab 中使用 L2 正则化实现逻辑回归【英文标题】:Implementing logistic regression with L2 regularization in Matlab 【发布时间】:2012-03-11 06:44:01 【问题描述】:Matlab 已经使用 mnrfit 内置了逻辑回归,但是我需要使用 L2 正则化来实现逻辑回归。我完全不知道如何进行。我找到了一些很好的论文和网站参考资料,里面有一堆方程,但不知道如何实现优化所需的梯度下降算法。
Matlab 中是否有一个容易获得的示例代码。我找到了一些库和包,但它们都是较大包的一部分,并且调用了很多复杂的函数,光是跟踪就会迷路。
【问题讨论】:
您可能最好使用一些预制优化器而不是实现自己的优化器。 LBFGS 和共轭梯度是最广泛使用的精确优化 LR 模型的算法,而不是普通梯度下降。参见例如this toolbox. 如果您正确标记您的问题(即使用 matlab 标签),您可以让其他人更容易找到此问题并提高您获得答案的机会。 这个问题实际上可能会在统计堆栈交换上得到更好的答案。 【参考方案1】:这是一段带注释的代码,用于逻辑回归的普通梯度下降。要引入正则化,您需要更新成本和梯度方程。在这段代码中,theta 是参数,X 是类预测器,y 是类标签,alpha 是学习率
我希望这会有所帮助:)
function [theta,J_store] = logistic_gradientDescent(theta, X, y,alpha,numIterations)
% Initialize some useful values
m = length(y); % number of training examples
n = size(X,2); %number of features
J_store = 0;
%J_store = zeros(numIterations,1);
for iter=1:numIterations
%predicts the class labels using the current weights (theta)
Z = X*theta;
h = sigmoid(Z);
%This is the normal cost function equation
J = (1/m).*sum(-y.*log(h) - (1-y).*log(1-h));
%J_store(iter) = J;
%This is the equation to obtain the given the current weights, without regularisation
grad = [(1/m) .* sum(repmat((h - y),1,n).*X)]';
theta = theta - alpha.*grad;
end
end
【讨论】:
以上是关于在 Matlab 中使用 L2 正则化实现逻辑回归的主要内容,如果未能解决你的问题,请参考以下文章