Matlab对mnrfit不正确吗?

时间:2016-03-07 16:37:04

标签: matlab machine-learning

似乎Matlab给出了多项逻辑回归的错误结果。

在使用Fisher的Iris数据集 [link]的示例文档中,它们给出了模型的系数,可以在同一数据集本身上使用它来获得建模的概率。

load fisheriris
sp = categorical(species);
[B,dev,stats] = mnrfit(meas,sp);
PHAT=mnrval(B,meas);

但是,预期值聚合没有一个匹配人口聚合,这是MaxEnt分类的要求(参见幻灯片35 [here],或Eq 14 [here],或Agresti"分类数据分析"第298页等)

例如

>> sum(PHAT)
>>   49.9828   49.8715   50.1456

都应该等于50(人口值),同样适用于其他聚合

如果参数

B=[36.9450   42.6378
   12.2641    2.4653
   14.4401    6.6809
  -30.5885   -9.4294
  -39.3232  -18.2862]
使用

代替所有聚合的足够统计数据匹配。

此外,Matlab用可能性解决它似乎很奇怪,这可能会产生错误,

  

警告:最大似然估计没有收敛。迭代   超出限制。您可能需要合并类别以增加观察值   计数

通过MLE考虑证明,唯一的要求是预期值匹配,不需要评估。

如果不给出真正的类,我们可以给出一个仅包含聚合信息的选项,这将是一个很好的功能。

1 个答案:

答案 0 :(得分:1)

在Mathworks网站中提交了技术错误评论。他们的回答是:

  

您好[----],

     

我正在撰写您的技术支持案例#01820504   关于' mnrfit'。

     

非常感谢您的耐心并报告此问题。出现了   是出乎意料的行为。它似乎与现有有关   我们在记录中发现的问题," mnrfit"不正确   在某些情况下的最大可能性估计自从" mnrfit"   函数没有找到最大似然估计   系数,我们计算了实际的MLE。当我们使用这些   估计,在这种情况下,我们得到了所有50年代的预期结果。

     

问题是,对于我们示例中的这个特定数据集,   课程可以完美分开。这意味着后勤   函数,为了得到精确的零或一个概率,需要   有无限的系数。 " mnrfit"功能执行   系数越来越大的迭代过程,但它停止了   在结果有你发现的问题的地方。我们   当然同意" mnrfit"可以做得更好。我们的   开发团队正在努力。

     

在这个阶段,我无法建议除了以外的解决方法   写一个自定义实现作为我的同事,我尝试过。对于   现在,我将关闭此请求,因为我已将其转发给   我们的记录。但是,如果您有任何其他相关问题   这种情况,请不要犹豫与我联系。

     

此致
  [----]
   MathWorks技术支持部门