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

Ric*_*bby 6 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
Run Code Online (Sandbox Code Playgroud)

在项目的创建中有一个隐含的逻辑,所以我想用尽可能最好的期望值填写这些值.

示例:

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

       param1  param2
item1    400    200
item2    200    100
item3    100     N/A
Run Code Online (Sandbox Code Playgroud)

使用线性插值,您可以轻松获得param2 item3 = 50.

我的想法:

由于我有10个参数和1500个值,我想到在完成的750个项目的协方差矩阵上进行PCA(找到数据集的主要方向).

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

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

从我的第一个例子:

       param1  param2
item1    400    200
item2    200    100
item3    100     X ?
Run Code Online (Sandbox Code Playgroud)

完整矩阵:

param1  param2
item1    400    200
item2    200    100
Run Code Online (Sandbox Code Playgroud)

协方差矩阵:

   1    0.5
   0.5  1 
Run Code Online (Sandbox Code Playgroud)

特征向量和特征值:

V1和l1:

1
1   associatedd to 1.5
Run Code Online (Sandbox Code Playgroud)

V2和l2:

1
-1  associated to 0.5
Run Code Online (Sandbox Code Playgroud)

结果:

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

如果我投射l1.V1 + l2.V2我得到X1=50.这是因为前两项之间存在完美的相关性.


所以我的问题:

到目前为止它只是理论,我还没有应用它,但在我开始之前,我想知道我是否会去这个地方.

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

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

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

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

ffr*_*end 1

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

param2 = 0 + 1/2 * param1
Run Code Online (Sandbox Code Playgroud)

这正是你想要的。

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

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