我有以下问题:
我提取了一组数据,但部分数据不可用或缺失;对于不同的项目,我确定了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站点,请随意迁移它。
答案 0 :(得分:2)
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并开始播放。对于数字预测,请查看“分类”选项卡。