在 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 正则化实现逻辑回归的主要内容,如果未能解决你的问题,请参考以下文章

使用正则化 (L1 / L2) Lasso 和 Ridge 的逻辑回归模型

matlab中的正则化逻辑回归代码

如何使用 scikit-learn 执行非正则化逻辑回归?

7逻辑回归实践

7逻辑回归实践

正则化项L1和L2的直观理解及L1不可导处理