我有一个大型稀疏矩阵,代表数百万实体的属性。例如,一个记录,代表一个实体,可能具有属性“有(毛)”, “有(尾巴)”, “发出声音(喵)”,以及“是(猫)”。
然而,这些数据是不完整的。例如,另一个实体可能具备典型的“是(猫)”实体的所有属性,但可能缺少“是(猫)”属性。在这种情况下,我想确定这个实体应该具有“是(猫)”属性的概率。
所以我试图解决的问题是确定每个实体应该包含哪些缺失的属性。给定一个任意记录,我想找出最可能缺失但应该包含的前N个属性。我不确定这种类型的问题的正式名称,所以在研究当前解决方案时不知道该搜索什么。对于这种类型的问题,有没有可扩展的解决方案?
我的第一个想法是简单地计算每个缺失属性的条件概率(例如,P(是(猫)|有(毛) 且 有(尾巴) 且 … )),但这似乎是一个非常慢的方法。此外,据我所知,传统的条件概率计算,我想象我会遇到一些问题,我的实体包含一些不常见且与其他是(猫)实体不共有的属性,导致条件概率为零。
我的第二个想法是为每个属性训练一个最大熵分类器,然后根据实体的当前属性进行评估。我认为概率计算会更加灵活,但这仍然存在可扩展性问题,因为我必须为可能数百万的属性训练单独的分类器。此外,如果我想找出最可能包含的前N个属性,我仍然需要评估所有分类器,这可能会花费很长时间。
有没有更好的解决方案?
回答:
这听起来像是一个典型的推荐问题。对于每个属性使用“电影评分”这个词,对于每一行使用“人”这个词。对于每个人,你想找到他们可能会喜欢但尚未评分的电影。
你应该看看Netflix挑战赛中一些更成功的方法。数据集相当大,因此效率是高度优先的。一个好的起点可能是论文《推荐系统的矩阵分解技术》。