我想应用glmfit()函数,用了两次这个函数,第一个正常运行,但是第二个显示Iteration limit reached.
MATLAB的版本很旧,是14年的版本
第一个正常运行的代码
[~,idx]=sort(rand(n_F,1));
Sample_F=double(F(idx(1:3000),:));
[~,idx]=sort(rand(n_F_no,1));
Sample_F_no=double(F_no(idx(1:3000),:));
Sample_F_total=[Sample_F;Sample_F_no];
x=Sample_F_total(:,1:3);
y=Sample_F_total(:,4);
log_F=glmfit(x,y,'binomial','link','logit');
第二个报错的代码
[~,idx]=sort(rand(n_P,1));
Sample_P=double(P(idx(1:1000),:));
[~,idx]=sort(rand(n_P_no,1));
Sample_P_no=double(P_no(idx(1:1000),:));
Sample_P_total=[Sample_P;Sample_P_no];
x1=Sample_P_total(:,1:3);
y1=Sample_P_total(:,4);
log_P=glmfit(x1,y1,'binomial','link','logit');
尝试过修改小数据量,但依然报错
尝试过添加clc;clear,这样虽然没有错误了,但是之前设置的各种参数都不见了
望采纳
在 glmfit 函数中的错误 "迭代限制已达到" 可能是由多种原因引起的。一个可能的原因是您使用的数据不是线性可分离的,这会导致算法陷入无限循环。另一个可能的原因是算法陷入局部最小值,如果初始系数没有设置为良好的起始值,就会发生这种情况。
可以试试以下方法:
确保使用的数据是线性可分离的。这意味着在您的数据中,正负样例应该有明显的分隔,并且算法应该能够找到一条分离两个类的线性边界。如果数据不是线性可分离的,您可能需要使用不同类型的模型,例如非线性模型或不同的分类算法。
检查初始系数。glmfit 函数使用迭代优化算法来找到模型的最优系数。初始系数用作优化过程的起点,如果它们没有设置为良好的起始值,算法可能会陷入局部最小值。可以尝试使用 'start' 参数手动设置初始系数。
增加最大迭代次数。
log_P = glmfit(x1, y1, 'binomial', 'link', 'logit', 'MaxIter', 1000);