gpt4 book ai didi

matlab - 确定 MATLAB fitglm() 模型拟合是否收敛

转载 作者:行者123 更新时间:2023-12-04 15:54:27 25 4
gpt4 key购买 nike

有许多 MATLAB 函数可以执行某种统计模型拟合,例如 fitglm()。由于各种原因,这些模型拟合可能无法收敛;这个问题不是关于什么会导致此类故障或如何防止它们。

我的问题是:除了查看控制台输出之外,是否有其他方法可以确定对 fitglm() 的给定调用是否收敛?执行此操作的明显方法似乎是通过输出参数的某些属性,但是 Linear Model class 的属性列表好像没有这个基本信息。

一个最小的例子(灵感来自 this question ):

x = [7 0;0 0;8 0;9 0;7 1;8 0;7 0;4 0;7 0;2 0];
y = [0 0 1 1 1 0 0 1 0 0]';
m = fitglm(x,y,'distr','binomial');

Warning: Iteration limit reached.

输出 m 告诉我们达到了迭代限制(如果有的话)是什么?

最佳答案

我还没有在 GeneralizedLinearModel class object 中找到任何此类信息从 fitglm 返回.但是,技术上避免查看控制台输出的一个选项是使用 lastwarn 捕获有关最后警告的信息。或 warning :

>> [lastMsg, lastID] = lastwarn

lastMsg =

Iteration limit reached.

lastID =

stats:glmfit:IterationLimit


>> w = warning('query', 'last')

w =

struct with fields:

identifier: 'stats:glmfit:IterationLimit'
state: 'on'

请注意,即使 warnings have been suppressed 这仍然有效(即仍然生成和存储警告,但不显示)。

您可以使用它的一种方法是首先将最后一个警告设置为虚拟消息(使用 lastwarn),然后适合您的模型,然后再次获取最后一个警告并将其与您的虚拟消息进行比较.如果不同,则在拟合模型时会抛出新的警告:

lastwarn('Nothing to see here', 'this:is:not:a:warning');
m = fitglm(x, y, 'distr', 'binomial');
[lastMsg, lastID] = lastwarn;
warningWasThrown = ~strcmp(lastID, 'this:is:not:a:warning');

另外,你可以有一个 switch检查警告标识符 lastID 的值并相应地采取不同操作的语句,例如尝试使用一组备用参数拟合模型。

关于matlab - 确定 MATLAB fitglm() 模型拟合是否收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52357922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com