看起来Matlab在多项式逻辑回归中给出的结果似乎是不正确的。
在其使用Fisher’s Iris数据集的示例文档中 [链接],他们给出了模型的系数,这些系数可以用于同一数据集本身以获得建模的概率。
load fisheririssp = categorical(species);[B,dev,stats] = mnrfit(meas,sp);PHAT=mnrval(B,meas);
然而,预期值的总和与总体总和不匹配,这是最大熵分类器的一个要求(参见 [此处] 的第35页幻灯片,或 [此处] 的第14个方程,或Agresti的《Categorical Data Analysis》第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使用似然度来解决这个问题似乎有些奇怪,这可能会产生错误,
警告:最大似然估计未收敛。迭代次数超限。您可能需要合并类别以增加观察计数
而根据最大似然估计的考虑,唯一要求是预期值匹配,并不需要进行似然度评估。
如果不是给出真实类别,而可以提供一个仅包含聚合信息的选项,这将是一个不错的功能。
回答:
在Mathworks网站上提交了一个技术错误审查。他们的回复如下:
您好 [—-],
我写信是关于您关于’mnrfit’的技术支持案例#01820504的参考。
非常感谢您的耐心和报告此问题。这似乎是意外的行为。这似乎与我们记录中已存在的一个问题有关,即在某些情况下,“mnrfit”不能给出正确的最大似然估计。由于“mnrfit”函数未能找到系数的最大似然估计,我们计算了实际的MLEs。当我们使用这些估计时,我们在这个案例中得到了所有50的期望结果。
问题在于,对于我们示例中的这个特定数据集,类别可以完美分离。这意味着,为了获得精确的零或一的概率,逻辑函数需要具有无限的系数。“mnrfit”函数执行了一个迭代过程,系数变得越来越大,但它在某个点停止,结果出现了您发现的问题。我们当然同意“mnrfit”可以做得更好。我们的开发团队正在处理这个问题。
在现阶段,我无法建议除编写自定义实现之外的解决方法,就像我和我的同事尝试过的那样。现在,我将关闭此请求,因为我已经将其转发到我们的记录中。然而,如果您有关于此案例的任何其他问题,请随时与我联系。
此致,
[—-]
MathWorks技术支持部门