gpt4 book ai didi

MATLAB fminunc() 未完成大型数据集。适用于较小的

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:13 24 4
gpt4 key购买 nike

我正在 MATLAB 中执行逻辑回归,对文本数据进行 L2 正则化。我的程序适用于小型数据集。对于更大的集合,它会无限运行。

我看到了可能重复的问题 ( matlab fminunc not quitting (running indefinitely) )。在那个问题中,初始 theta 的成本是 NaN 并且控制台中打印了一个错误。对于我的实现,我得到了一个真正有值(value)的成本,即使将详细参数传递给 fminunc() 也没有错误。因此,我相信这个问题可能不会重复。

我需要帮助将其扩展到更大的集合。我目前正在处理的训练数据的大小大约是 10k*12k(10k 个文本文件累计包含 12k 个单词)。因此,我有 m=10k 个训练示例和 n=12k 个特征。

我的成本函数定义如下:

function [J gradient] = costFunction(X, y, lambda, theta)

[m n] = size(X);
g = inline('1.0 ./ (1.0 + exp(-z))');
h = g(X*theta);
J =(1/m)*sum(-y.*log(h) - (1-y).*log(1-h))+ (lambda/(2*m))*norm(theta(2:end))^2;

gradient(1) = (1/m)*sum((h-y) .* X(:,1));

for i = 2:n
gradient(i) = (1/m)*sum((h-y) .* X(:,i)) - (lambda/m)*theta(i);
end
end

我正在使用 MATLAB 的 fminunc() 函数执行优化。我传递给 fminunc() 的参数是:

options = optimset('LargeScale', 'on', 'GradObj', 'on', 'MaxIter', MAX_ITR);
theta0 = zeros(n, 1);

[optTheta, functionVal, exitFlag] = fminunc(@(t) costFunction(X, y, lambda, t), theta0, options);

我在具有这些规范的机器上运行这段代码:

Macbook Pro i7 2.8GHz / 8GB RAM / MATLAB R2011b

成本函数似乎表现正确。对于初始 theta,我得到可接受的 J 值和梯度。

K>> theta0 = zeros(n, 1);
K>> [j g] = costFunction(X, y, lambda, theta0);
K>> j

j =

0.6931

K>> max(g)

ans =

0.4082

K>> min(g)

ans =

-2.7021e-05

该程序运行时间非常长。我开始分析保持 MAX_ITR = 1 for fminunc()。对于单次迭代,程序甚至在几个小时后仍未完成执行。我的问题是:

  1. 我在数学上做错了什么吗?

  2. 我应该使用任何其他优化器而不是 fminunc() 吗?在 LargeScale=on 的情况下,fminunc() 使用信赖域算法。

  3. 这个问题是集群规模的,不应该在单机上运行吗?

任何其他一般提示将不胜感激。谢谢!


这有助于解决问题:我能够通过在 fminunc() 中将 LargeScale 标志设置为“关闭”来使其正常工作。据我所知,LargeScale = 'on' 使用信任域算法,而将其保持为 'off' 使用准牛顿法。使用准牛顿方法并传递梯度对于这个特定问题的处理速度要快得多,并给出了非常好的结果。


最佳答案

我能够通过在 fminunc() 中将 LargeScale 标志设置为“关闭”来实现此功能。据我所知,LargeScale = 'on' 使用信任域算法,而将其保持为 'off' 使用准牛顿法。使用准牛顿方法并传递梯度对于这个特定问题的处理速度要快得多,并给出了非常好的结果。

关于MATLAB fminunc() 未完成大型数据集。适用于较小的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16696459/

24 4 0
文章推荐: C# 使用 Except 比较列表
文章推荐: python - 如何将继承的类函数赋予线程?
文章推荐: c# - 区分多个 webclient 结果
文章推荐: html - 每 3 个
  • 添加一个分隔符(
  • Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com