PCA 可以用来组合多个排名吗?
Could PCA be used to combine multiple rankings?
我有 n(在我的例子中只有 9 个)相同项目的不同排名。现在,我正在尝试使用 PCA(主成分分析)找到一个组合,以提高我排名的准确性。该方法应该是无监督的,也就是说我想生成新的排名基础。
我的想法是尝试 9 个不同排名的所有可能子集(不重复),并对每个排名 运行 PCA。在那里,我将得出 501 个不同的新排名(在 n=9 的情况下)。使用不同的子集,我获得了更好的结果。
当我说更好的结果时,我的意思是我有真实的排名,当我完成组合时,我比较所有排名的结果(组合和原来的 9)。
这个方法有意义吗?
你的问题涉及投票理论的一个子集,关于如何解决这个问题有很多可能性。有些技术比其他技术更灵活。例如,一些技术可以适应可变大小的有序排名(假设一个排名只包含 5 个有序项目,而其他排名包含 9 个有序项目),而其他技术则不能。一些技术可以为不同的审阅者分配可变的权重。 Netflix 拥有非常复杂的专有算法,他们使用这些算法将多个用户的电影排名合并为总体排名。话虽这么说,我会说你的组合 PCA 方法并没有让我觉得计算效率高或非常相关。如果您仅从 9 个排名的子集中获取信息,则可能会丢弃有用的(尽管可能很微妙)信息。
- Schulze method:有点复杂,但被广泛认为是从一组排名中挑选单一获胜者的最佳方法之一。可以迭代应用或以其他方式修改以获得有序的获奖者列表。
- Borda count:几种变体,所有变体都非常简单直观,通常会产生合理的结果。
也许 Borda 计数的最大问题是它没有充分处理可能具有非常相似的平均排名的两个项目的不同标准差。如果我们将自己限制在所有有序排名大小相同且权重相同的问题子集中,我可以推荐一种直观的方法,并在各种情况下产生非常好的结果:聚合 Z 分数最小化 。其工作方式如下:
- 对于每个排名项目,计算其排名的平均值 μ 和标准差 σ(假设服从高斯分布) .
- 接下来计算 |z-score| "distance" 每个项目到每个可能排名位置的矩阵。 Z-score = (提议的排名位置 - μ) / σ
- 然后详尽地计算哪一组排名位置给出了最低的总(总)z 分数距离。
实际上,排名问题被转换为分类问题,我们试图将每个排名位置分类为每个项目的最佳拟合样本分布。约束是只能为每个高斯项目分布分配一个排名位置。通过在全球范围内最小化聚合 z 分数距离,我们正在为 "true" 排名找到统计上最可能的配置。
如果您不想进行编程以穷尽计算步骤 3 的组合和,我将在此处演示一种启发式方法,它通常会产生良好的结果(但不能保证是最佳解决方案) .
考虑一下我们在这里有 6 个项目 (A-F) 的 4 个独立排名。假设每个排名中列出的第一项在排名位置 #1:
1. A,C,F,E,B,D
2. D,B,C,E,F,A
3. F,A,B,C,D,E
4. E,A,C,B,D,F
接下来计算每个项目排名位置的均值和标准差:
A: (#1, #6, #2, #2); μ = 2.75, σ = 2.217
B: μ = 3.5, σ = 1.291
C: μ = 3.0, σ = 0.816
D: μ = 4.25, σ = 2.217
E: μ = 3.75, σ = 2.062
F: μ = 3.75, σ = 2.217
我们可以从相对较窄的均值分布(2.75 到 4.25)中看出,所有项目都在争夺大致相同的平均中间位置。在这种情况下,Borda 计数可能往往表现不佳,因为当平均值都非常接近时,标准偏差变得格外重要。所以接下来,我们创建从每个项目到每个可能排名位置的 z 分数距离矩阵:
A: 0.7892, 0.3382, 0.1127, 0.5637, 1.0147, 1.4657
B: 1.9365, 1.1619, 0.3873, 0.3873, 1.1619, 1.9365
C: 2.4495, 1.2247, 0.0000, 1.2247, 2.4495, 3.6742
D: 1.4657, 1.0147, 0.5637, 0.1127, 0.3382, 0.7892
E: 1.3339, 0.8489, 0.3638, 0.1213, 0.6063, 1.0914
F: 1.2402, 0.7892, 0.3382, 0.1127, 0.5637, 1.0147
这可能很明显,但如果您有任何 σ = 0 的项目,您可以立即将该项目分配到其独有的排名位置。现在,如果您不想用尽可能低的聚合 z 分数分配来穷尽地解决此矩阵的排名组合,您可以使用此启发式方法。对每一列求和,然后从该列中减去最小值以获得我们可以调用的值 "savings":
sum: 9.2151, 5.3777, 1.7658, 2.5225, 6.1344, 9.9718
min: 0.7892, 0.3382, 0.0000, 0.1127, 0.3382, 0.7892
savings: 8.4259, 5.0395, 1.7658, 2.4098, 5.7962, 9.1826
取具有最大 "savings" 值的列并将具有最小值的项目分配到该位置。在我们这里的示例中,这意味着我们会将项目 "D" 分配到第 6 个位置。执行此操作后,重新计算总和、最小值和储蓄值,但首先删除 "D" 项的行并删除第 6 列(因为它们已被分配)。然后将新的最大 "savings" 值分配给该列中具有最小值的项目。继续,直到分配所有排名。在此示例中,最终(启发式)排名如下:A, E, C, B, F, D
(聚合 z 分数:3.3783)。我没有检查我的工作,但看起来 A, F, C, B, E, D
(aggregate z-score: 3.3612) 的详尽解决方案可能比启发式解决方案好 0.5%。
值得注意的是,我们只是简单地对均值进行排序的天真的解决方案 A, C, B, E, F, D
(aggregate z-score: 3.8754) 基本上不太可能(统计上)成为最好的排名。
我有 n(在我的例子中只有 9 个)相同项目的不同排名。现在,我正在尝试使用 PCA(主成分分析)找到一个组合,以提高我排名的准确性。该方法应该是无监督的,也就是说我想生成新的排名基础。
我的想法是尝试 9 个不同排名的所有可能子集(不重复),并对每个排名 运行 PCA。在那里,我将得出 501 个不同的新排名(在 n=9 的情况下)。使用不同的子集,我获得了更好的结果。
当我说更好的结果时,我的意思是我有真实的排名,当我完成组合时,我比较所有排名的结果(组合和原来的 9)。
这个方法有意义吗?
你的问题涉及投票理论的一个子集,关于如何解决这个问题有很多可能性。有些技术比其他技术更灵活。例如,一些技术可以适应可变大小的有序排名(假设一个排名只包含 5 个有序项目,而其他排名包含 9 个有序项目),而其他技术则不能。一些技术可以为不同的审阅者分配可变的权重。 Netflix 拥有非常复杂的专有算法,他们使用这些算法将多个用户的电影排名合并为总体排名。话虽这么说,我会说你的组合 PCA 方法并没有让我觉得计算效率高或非常相关。如果您仅从 9 个排名的子集中获取信息,则可能会丢弃有用的(尽管可能很微妙)信息。
- Schulze method:有点复杂,但被广泛认为是从一组排名中挑选单一获胜者的最佳方法之一。可以迭代应用或以其他方式修改以获得有序的获奖者列表。
- Borda count:几种变体,所有变体都非常简单直观,通常会产生合理的结果。
也许 Borda 计数的最大问题是它没有充分处理可能具有非常相似的平均排名的两个项目的不同标准差。如果我们将自己限制在所有有序排名大小相同且权重相同的问题子集中,我可以推荐一种直观的方法,并在各种情况下产生非常好的结果:聚合 Z 分数最小化 。其工作方式如下:
- 对于每个排名项目,计算其排名的平均值 μ 和标准差 σ(假设服从高斯分布) .
- 接下来计算 |z-score| "distance" 每个项目到每个可能排名位置的矩阵。 Z-score = (提议的排名位置 - μ) / σ
- 然后详尽地计算哪一组排名位置给出了最低的总(总)z 分数距离。
实际上,排名问题被转换为分类问题,我们试图将每个排名位置分类为每个项目的最佳拟合样本分布。约束是只能为每个高斯项目分布分配一个排名位置。通过在全球范围内最小化聚合 z 分数距离,我们正在为 "true" 排名找到统计上最可能的配置。
如果您不想进行编程以穷尽计算步骤 3 的组合和,我将在此处演示一种启发式方法,它通常会产生良好的结果(但不能保证是最佳解决方案) .
考虑一下我们在这里有 6 个项目 (A-F) 的 4 个独立排名。假设每个排名中列出的第一项在排名位置 #1:
1. A,C,F,E,B,D
2. D,B,C,E,F,A
3. F,A,B,C,D,E
4. E,A,C,B,D,F
接下来计算每个项目排名位置的均值和标准差:
A: (#1, #6, #2, #2); μ = 2.75, σ = 2.217
B: μ = 3.5, σ = 1.291
C: μ = 3.0, σ = 0.816
D: μ = 4.25, σ = 2.217
E: μ = 3.75, σ = 2.062
F: μ = 3.75, σ = 2.217
我们可以从相对较窄的均值分布(2.75 到 4.25)中看出,所有项目都在争夺大致相同的平均中间位置。在这种情况下,Borda 计数可能往往表现不佳,因为当平均值都非常接近时,标准偏差变得格外重要。所以接下来,我们创建从每个项目到每个可能排名位置的 z 分数距离矩阵:
A: 0.7892, 0.3382, 0.1127, 0.5637, 1.0147, 1.4657
B: 1.9365, 1.1619, 0.3873, 0.3873, 1.1619, 1.9365
C: 2.4495, 1.2247, 0.0000, 1.2247, 2.4495, 3.6742
D: 1.4657, 1.0147, 0.5637, 0.1127, 0.3382, 0.7892
E: 1.3339, 0.8489, 0.3638, 0.1213, 0.6063, 1.0914
F: 1.2402, 0.7892, 0.3382, 0.1127, 0.5637, 1.0147
这可能很明显,但如果您有任何 σ = 0 的项目,您可以立即将该项目分配到其独有的排名位置。现在,如果您不想用尽可能低的聚合 z 分数分配来穷尽地解决此矩阵的排名组合,您可以使用此启发式方法。对每一列求和,然后从该列中减去最小值以获得我们可以调用的值 "savings":
sum: 9.2151, 5.3777, 1.7658, 2.5225, 6.1344, 9.9718
min: 0.7892, 0.3382, 0.0000, 0.1127, 0.3382, 0.7892
savings: 8.4259, 5.0395, 1.7658, 2.4098, 5.7962, 9.1826
取具有最大 "savings" 值的列并将具有最小值的项目分配到该位置。在我们这里的示例中,这意味着我们会将项目 "D" 分配到第 6 个位置。执行此操作后,重新计算总和、最小值和储蓄值,但首先删除 "D" 项的行并删除第 6 列(因为它们已被分配)。然后将新的最大 "savings" 值分配给该列中具有最小值的项目。继续,直到分配所有排名。在此示例中,最终(启发式)排名如下:A, E, C, B, F, D
(聚合 z 分数:3.3783)。我没有检查我的工作,但看起来 A, F, C, B, E, D
(aggregate z-score: 3.3612) 的详尽解决方案可能比启发式解决方案好 0.5%。
值得注意的是,我们只是简单地对均值进行排序的天真的解决方案 A, C, B, E, F, D
(aggregate z-score: 3.8754) 基本上不太可能(统计上)成为最好的排名。