对多数表决算法的探究
在做大创的时候接触到多数表决算法,想象中应该是很可靠的算法,但是在测试的时候发现并不可靠,于是做一个试验来探究一下多数表决算法的可靠性。
先生成一个只含有0和1的列表,长度为10,重复50次得到一个新的列表,遍历新列表并不断生成随机数,根据随机数的值来改变对应的值。首先将阈值设为0.2,重复测试1000次,结果为
count_True:1000 count_False:0
可以看到测试1000次的情况下都是前后不变,可以认为在数据受影响程度为20%以下时多数表决算法是可靠的。将阈值改为0.3,测试1000次,结果为
count_True:979 count_False:21
,正确率为98%,可以认为这种情况下算法可靠。继续测试,将阈值改为0.4,测试1000次,结果为
count_True:454 count_False:546
可以看到结果不可靠。
接着更改初始列表的长度,将长度改为20,阈值改为0.2,继续测试1000次,结果为
count_True:1000 count_False:0
结果可靠。
将阈值改为0.3,结果为
count_True:970 count_False:30
仍然可靠。将阈值改为0.4,结果为
count_True:201 count_False:799
虽然结果同样是不可靠,但是与列表长度为10时的实验结果出现了不同,这次错误概率达到了80%,而列表长度为10时错误概率只有55%。
- 接续探究,首先设置阈值为0.500,这里为了精确表示用到了decimal格式,没有采用float格式。
列表长度为10,从0.500开始,每个值测试1000次,当不满足正确率高于80%时,就将阈值减去0.001,再测试1000次,测试结果为
The Best Threshold:0.361
可以看到列表长度为10的时候。能接受的最高的阈值为36.1%。
- 接下来测试列表长度为20的时候,能接受的最高阈值是多少。
结果是
The Best Threshold:0.343
可以看到能接受的最高阈值为34.3%,低于列表长度为10的时候。即列表长度增长,增大了出错了概率。
下面是测试代码:
1 | import random |
- 本文标题:对多数表决算法的探究
- 本文作者:Kale
- 创建时间:2019-12-13 17:32:17
- 本文链接:https://kalew515.com/2019/12/13/对多数表决算法的探究/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!