用于完成损坏的数据矩阵的算法

时间:2011-07-26 08:01:11

标签: algorithm linear-algebra

我有以下问题:

我提取了一组数据,但部分数据不可用或缺失;对于不同的项目,我确定了10个参数:

       param1   param2    ...  param10
Item 1   1220     N/A            1000
Item 2   1300     200     ...    1000
..        ...      ...

item N    N/A      1000   ...     200

N ~ 1500 and half of the values are complete

项目创建中存在隐含逻辑,因此我想用尽可能最佳的期望值填写这些值。

示例

让我们假设您有2个参数和3个项目。

       param1  param2
item1    400    200
item2    200    100
item3    100     N/A

通过线性插值,您可以轻松获得item3 = 50的参数2。

我的想法:

由于我有10个参数和1500个值,我想在750个完成的项目PCA上做covariance matrix(找到数据集的主要方向)。

PCA将引导我到我的项目的一个主方向(最大特征值)和子组项目的子方向(较小的特征值)。

我想在主方向上投影缺少参数的矢量,例如。获得缺失参数的近似值。

从我的第一个例子开始:

       param1  param2
item1    400    200
item2    200    100
item3    100     X ?

完整矩阵:

param1  param2
item1    400    200
item2    200    100

协方差矩阵:

   1    0.5
   0.5  1 

特征向量和特征值:

V1和l1:

1
1   associatedd to 1.5

V2和l2:

1
-1  associated to 0.5

结果:

如果我在V1上投影,我只会获得X1=100

如果我按l1.V1 + l2.V2投标,我会X1=50。这是因为前两项之间存在完美的相关性。


所以我的问题:

到目前为止,这是唯一的理论,我还没有应用它,但在我开始之前,我想知道我是否会带着这个去。

我可以做得更好吗? (我真的相信是的。) 如果所有项目都缺少一个参数,我该怎么办?我从哪里获得方向?

是否有已知良好的算法来填写损坏的矩阵,或者你能帮助我完成我的想法(向我推荐好的读数或方法)吗?

我认为Netflix使用这种算法自动填写电影评分矩阵(例如Netflix 1M美元问题)。

如果您认为这属于另一个stackexchange站点,请随意迁移它。

3 个答案:

答案 0 :(得分:2)

Simon Funk的

This article描述了他对Netflix奖项挑战的使用方法。也许这就是你提到它时的想法。与您的方法不同,它处理丢失的数据。本质上是取代矩阵方法的直接使用来确定数据矩阵的奇异值分解,其中大致等效的优化问题更自然地解释了缺失数据。

答案 1 :(得分:2)

尝试NIPALS算法。这是“化学计量学”领域的标准方法。它是专为丢失数据而设计的PCA方法。然后,您可以根据数据模型反投影您的分数并加载(t * p')以填补空白。这种方法的优点在于您不会通过估算来偏置数据,只需使用您拥有的数据即可。尝试通过Herman或Svante Wold搜索论文,或者在R和Matlab中实现。显然,丢失的数据越多,结果越不可靠,但随机丢失,您可能会丢失大量的数据。

传说是赫尔曼发明了算法来对美国的赛马进行排名 - 这是一个大规模的数据缺失问题(如果你想到它,并非所有马匹都会遇到)!

答案 2 :(得分:1)

为什么不使用机器学习中的数字预测?在您的第一个示例中,params是属性,而items是实例。有了它,你可以在几分钟内尝试线性回归神经网络或其他任何东西。训练结束后,您将获得第一个示例的下一个等式(此处的param2标记为类):

param2 = 0 + 1/2 * param1

这正是你想要的。

如果你不确定params之间的关系是否是线性的,你总是可以尝试其他类型的回归(ANN,SVM,任何东西)。

要快速启动,请使用Weka。将您的数据转换为CSV,将其加载到Weka并开始播放。对于数字预测,请查看“分类”选项卡。