matlab - MATLAB 中高效的多类加权多数表决实现

标签 matlab voting

这几天我一直在想如何在 matlab 中有效地实现 m 位专家的加权多数投票。这是我想要的示例。假设我们有 3 个权重向量的专家

w=[7 2 6]

假设他们对选项 A/B/C/D 进行了 n 次投票,因此我们例如得到以下 n x m 投票矩阵,其中列是每个专家的投票。

A B B
C A A
D B A
A A C

现在我想为每一行找到加权多数票。我们通过将投票给每个选项的专家的权重相加并选择最大权重来计算它。例如,在第一行中,选项 A 的累积权重为 7(专家 1 的投票),B 的累积权重为 8(专家 2 和 3 的投票),因此最终投票为 B。所以我们得到以下是累积权重矩阵和最终投票:

A B C D
- - - -
7 8 0 0 -> B
8 0 7 0 -> A
6 2 0 7 -> D
9 0 6 0 -> A

现在,使用 for 循环遍历 n 行的实现或多或少是简单的。我现在正在寻找解决方案,它不需要这个可能很长的循环,而是使用向量算法。我有过一些想法,但每一个都遇到了一些问题,所以现在不提了。如果有人以前遇到过类似情况,请分享您的解决方案。

谢谢。

最佳答案

w=[7 2 6];

votes = ['A' 'B' 'B'
         'C' 'A' 'A'
         'D' 'B' 'A'
         'A' 'A' 'C'];

options = ['A', 'B', 'C', 'D']';
%'//Make a cube of the options that is number of options by m by n
OPTIONS = repmat(options, [1, size(w, 2), size(votes, 1)]);

%//Compare the votes (streched to make surface) against a uniforma surface of each option
B = bsxfun(@eq, permute(votes, [3 2 1]) ,OPTIONS);

%//Find a weighted sum
W = squeeze(sum(bsxfun(@times, repmat(w, size(options, 1), 1), B), 2))'

%'//Find the options with the highest weighted sum
[xx, i] = max(W, [], 2);
options(i)

结果:

B
A
D
A

关于matlab - MATLAB 中高效的多类加权多数表决实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15498368/

相关文章:

mysql - Rails 调查样式应用程序 - 显示选项的所有答案

ruby-on-rails - 如何将行为设置为不需要用户登录的投票?

matlab - OpenCV 和 Latent SVM 检测器

r - 类似于 R 在 Matlab 中的 rep 的功能

matlab - 如何更改给定箱线图图形的 'PlotStyle' 属性?

php - 评论投票数据库结构的最佳实践

matlab - 为什么当 lambda 为负时岭回归可以最小化测试成本

c - Matlab 编译器链接错误(64 位与 32 位)

ruby-on-rails - 在 Rails 应用程序中实现投票的最佳方式?

xmpp - "Voting"XMPP协议(protocol)机制