【问题标题】:Algorithm to complete a corrupted matrix of data完成损坏的数据矩阵的算法
【发布时间】:2011-07-26 08:01:11
【问题描述】:

我有以下问题:

我提取了一组数据,但其中部分数据不可用或丢失;对于不同的项目,我确定了 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 的 param2。

我的想法:

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

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 站点,请随时迁移它。

【问题讨论】:

    标签: algorithm linear-algebra


    【解决方案1】:

    This article 的 Simon Funk 描述了他在 Netflix 奖品挑战赛中使用了像你这样的方法;也许这就是您在提到它时所想到的。与您的方法不同,它处理丢失的数据。本质是用一个大致等效的优化问题代替直接使用矩阵方法来确定数据矩阵的奇异值分解,该优化问题更自然地解决了缺失数据。

    【讨论】:

    • 感谢您的回答。我要仔细看看我想如果我了解您如何几乎可以解决我需要做的事情就足够了。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      param2 = 0 + 1/2 * param1
      

      这正是你想要的。

      如果您不确定参数之间的关系是线性的,您可以随时尝试其他类型的回归(ANN、SVM 等)。

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

      【讨论】:

      • 你是对的,对于这样的问题,机器学习可能是一个好方法。我会试试weka。谢谢
      猜你喜欢
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2020-07-19
      • 1970-01-01
      相关资源
      最近更新 更多