gpt4 book ai didi

weka - Weka.classifiers.meta.vote 中的多数投票算法

转载 作者:行者123 更新时间:2023-12-04 16:54:32 30 4
gpt4 key购买 nike

Weka中使用的多数投票算法是什么?我试图找出它的代码,但无法理解它。

最佳答案

在 Weka 中,您可以选择多个分类器用于 Weka.classifiers.meta.vote .如果您选择 Majority VotingcombinationRule (仅适用于 nominal 类),然后这些分类器中的每一个都将预测测试样本的名义类标签。然后将选择预测最多的标签作为 vote 的输出分类器。

例如。您选择要使用的以下分类器:trees.J48 , bayes.NaiveBayesfunctions.LibSVM预测天气,可以标注为bad , normalgood .给定一个新的测试样本,这些是他们的预测:

J48        - bad
NaiveBayes - good
LibSVM - good

每个可能标签的投票结果如下:
bad    - 1
normal - 0
good - 2

So Weka的 vote分类器将选择 good作为测试样本的标签,因为它在所有三个分类器中得票最多。

--编辑--

函数 distributionForInstanceMajorityVotingsource code Weka 的 Vote类(class)向您展示了多数投票是如何实现的。我在下面添加了功能。下面是它的作用的描述:

代码的工作原理和我上面解释的差不多。测试实例的所有名义类都加载到 votes .每个分类器对实例进行分类,具有最高概率的标签获得投票。如果多个标签具有相同的概率,则所有这些标签都会收到投票。一旦所有分类器都投了票,投票最多的标签将被选为测试实例的标签。如果多个标签的票数相同,则将随机选择其中一个标签。

protected double[] distributionForInstanceMajorityVoting(Instance instance) throws Exception {

double[] probs = new double[instance.classAttribute().numValues()];
double[] votes = new double[probs.length];

for (int i = 0; i < m_Classifiers.length; i++) {
probs = getClassifier(i).distributionForInstance(instance);
int maxIndex = 0;
for(int j = 0; j<probs.length; j++) {
if(probs[j] > probs[maxIndex])
maxIndex = j;
}

// Consider the cases when multiple classes happen to have the same probability
for (int j=0; j<probs.length; j++) {
if (probs[j] == probs[maxIndex])
votes[j]++;
}
}

for (int i = 0; i < m_preBuiltClassifiers.size(); i++) {
probs = m_preBuiltClassifiers.get(i).distributionForInstance(instance);
int maxIndex = 0;

for(int j = 0; j<probs.length; j++) {
if(probs[j] > probs[maxIndex])
maxIndex = j;
}

// Consider the cases when multiple classes happen to have the same probability
for (int j=0; j<probs.length; j++) {
if (probs[j] == probs[maxIndex])
votes[j]++;
}
}

int tmpMajorityIndex = 0;
for (int k = 1; k < votes.length; k++) {
if (votes[k] > votes[tmpMajorityIndex])
tmpMajorityIndex = k;
}

// Consider the cases when multiple classes receive the same amount of votes
Vector<Integer> majorityIndexes = new Vector<Integer>();
for (int k = 0; k < votes.length; k++) {
if (votes[k] == votes[tmpMajorityIndex])
majorityIndexes.add(k);
}

// Resolve the ties according to a uniform random distribution
int majorityIndex = majorityIndexes.get(m_Random.nextInt(majorityIndexes.size()));

//set probs to 0
probs = new double[probs.length];

probs[majorityIndex] = 1; //the class that have been voted the most receives 1

return probs;
}

关于weka - Weka.classifiers.meta.vote 中的多数投票算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11626417/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com