Ich baue einen Entscheidungsbaum Klassifikator und ich fand diese Methode zur Berechnung der Informationsgewinn. Das mag eine dumme Frage sein, aber ich frage mich, ob die Aufteilung in diese Methode für numerische oder kategorische Attribute ist? Ich bin verwirrt, weil ich dachte, dass ein Schwellenwert (Median) für die Ziffern Splits verwendet wurde, aber diese Methode verwendet String-Werte.Numeral oder Categorical Split?
Jede Hilfe wird geschätzt. Hier
ist der Code:
public static double getInfoGain(int f, ArrayList<String[]> dataSubset) {
double entropyBefore = getEntropy(dataSubset); //Entropy before split
if(entropyBefore != 0){ // Calculate information gain if entropy is not 0
String threshold = thresholdMap.get(f); // Get threshold value of the feature
ArrayList<String[]> leftData = new ArrayList<String[]>();
ArrayList<String[]> rightData = new ArrayList<String[]>();
for(String[] d : dataSubset) {
if(d[f].equals(threshold)) {
leftData.add(d); // If feature value of data == threshold, add it to leftData
} else {
rightData.add(d); // If feature value of data != threshold, add it to leftData
}
}
if(leftData.size() > 0 && rightData.size() > 0) {
double leftProb = (double)leftData.size()/dataSubset.size();
double rightProb = (double)rightData.size()/dataSubset.size();
double entropyLeft = getEntropy(leftData); //Entropy after split - left
double entropyRight = getEntropy(rightData); //Entropy after split - right
double gain = entropyBefore - (leftProb * entropyLeft) - (rightProb * entropyRight);
return gain;
} else { // If entropy = 0 on either subsets of data, return 0
return 0;
}
} else { // If entropy = 0 before split, return 1
return -1;
}
}
Es ist möglich, dass sie die Strings als quantisierte Versionen der Werte verwenden, oder dies ist eine Art von Fehler. Wo ist der Rest dieses Codes? Können wir es im Kontext sehen? –
https://github.com/vedrejothin/ID3-DecisionTree/blob/master/DecisonTree.java hier ist der vollständige Code – EPebassen93