JSFiddle - React, Tailwind, and code Playground
JavaScript
/*
var DecisionTree = Class.create();
DecisionTree.prototype = {
initialize: function() {
},
entropy: function (rows) {
var log2 = function(x){ return log(x)/log(2)};
var results = uniquecounts(rows)
ent = 0.0
for r in results.keys():
var p = (results[r].valueOf()/rows.length.valueOf()).valueOf();
Ent = ent - p*log2(p);
return ent;
},
uniquecounts: function (rows) {
Var results = {}
For (var row in rows) {
Var r = row[row.length -1]
If (!(r in results)){
results[r] += 1;
}
}
return results;
},
buildTree: function(rows, scoref = entropy) {
If (rows.length == 0) { return decisionnode(); }
Var currentScore = scoref(rows);
best_gain = 0.0
best_criteria = nil
best_sets = nil
column_count = rows[0].length - 1;
For (Var col in range(0, column_count)):
column_values = {};
For row in rows {
column_values[row[col]] = 1;
}
For value in column_values.keys(){
Var binarySets =divideset(rows, col, value);
Var p = ((binarySets[0].length).valueOf() / rows.length.valueOf()).valueOf();
var gain = (current_sore - p * score(binarySets[0])-(1-p) * scoref(binarySets[1]))).valueOf();
If (gain > best_gain && binarySets[0].length > 0 && binarySets[1].length > 0) {
best_gain = gain;
best_criteria = [col, value];
best_sets = [binarySets[0], binarySets[1]];
}
}
If best_gain > 0 {
trueBranch = buildTree(best_sets[0]);
...