在MATLAB高效的多类加权多数投票实施(Efficient multiclass weighted

2019-07-21 23:37发布

几天我想知道如何有效地实现在Matlab测量专家的加权多数表决。 下面是我想要的一个例子。 假设我们有3名专家权重向量

w=[7 2 6]

假设他们在选择A / B / C / d投票n倍,因此我们例如得到下面的n×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

现在,这个使用遍历的行数n执行或多或少直截了当。 现在我正在寻找解决方案,这并不需要这种潜在的冗长循环,而是使用矢量运算。 我有一些想法,但遇到了一些问题,他们每个人,所以现在不会提到这些。 如果有人以前曾经有过类似的情况,请分享你的解决方案。

谢谢。

Answer 1:

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


文章来源: Efficient multiclass weighted majority voting implementation in MATLAB
标签: matlab voting