2016-04-28 39 views
1

我正在尝试重新计算字典学习的重建错误。sklearn字典学习中的错误计算

当根据这里的公式重新计算这个错误,我得到比sklearn产出不同的结果。

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.DictionaryLearning.html

从我能在sklearn的代码理解,它可能是与transform_algorithm的选择,但我不明白究竟是什么。

这里是一个代码段说明了这个问题。

https://gist.github.com/nicofarr/d277fb0c350849e0c3333767b8a1fb2b

当设置阿尔法为0,我的错误计算是正确的,所以我认为我计算残差的正确方法。所以问题出在错误的第二项,涉及到alpha。

在此先感谢

Nicofarr

+0

关于要点的例子很少(一个观察值作为输入),但足以显示问题。增加观测次数后,差异似乎会变大。 – nicofarr

回答

0

尼科,根据您的代码计算使用相同的公式错误作为目标函数你减少寻找最佳稀疏的契合,即“残差” +”阿尔法·惩罚”。惩罚被添加来强制解决方案中的稀疏性,但不应该用来计算错误。你正在寻找的错误是由残差给出的。你有没有检查过你的代码和sklearn中的最佳参数(u's和v's)是否相同?

+0

谢谢尤里。实际上,sklearn给出的错误包括惩罚;请参阅此处:https://github.com/scikit-learn/scikit-learn/blob/51a765a/sklearn/decomposition/dict_learning.py#L527。我从他们上次迭代获取错误。 – nicofarr

+0

这可能很愚蠢,但它们似乎在其代码中按1/n_components缩放alpha。如果你在代码中用alpha/n_comp替换alpha,它会匹配吗? – Yury