All Projects → miguelmota → C4.5

miguelmota / C4.5

Licence: MIT license
C4.5 decision tree generation algorithm in JavaScript.

Programming Languages

javascript
184084 projects - #8 most used programming language

C4.5

Note: This is a fork of learningjs.

C4.5 decision tree generation algorithm in JavaScript.

NPM

Install

npm install c4.5

Usage

data.csv

id,attr1,attr2,attr3,class
1,A,70,True,CLASS1
2,A,90,True,CLASS2
3,A,85,False,CLASS2
4,A,95,False,CLASS2
5,A,70,False,CLASS1
6,B,90,True,CLASS1
7,B,78,False,CLASS1
8,B,65,True,CLASS1
9,B,75,False,CLASS1
10,C,80,True,CLASS2
11,C,70,True,CLASS2
12,C,80,False,CLASS1
13,C,80,False,CLASS1
14,C,96,False,CLASS1
var fs = require('fs');
var csv = require('csv');
var C45 = require('c4.5');

fs.readFile('data.csv', function(err, data) {
  if (err) {
    console.error(err);
    return false;
  }

  csv.parse(data, function(err, data) {
    if (err) {
      console.error(err);
      return false;
    }

    var headers = data[0];
    var features = headers.slice(1,-1); // ["attr1", "attr2", "attr3"]
    var featureTypes = ['category','number','category'];
    var trainingData = data.slice(1).map(function(d) {
      return d.slice(1);
    });
    var target = headers[headers.length-1]; // "class"
    var c45 = C45();

    c45.train({
        data: trainingData,
        target: target,
        features: features,
        featureTypes: featureTypes
    }, function(error, model) {
      if (error) {
        console.error(error);
        return false;
      }

      var testData = [
        ['B',71,'False'],
        ['C',70,'True'],
      ];

      console.log(model.classify(testData[0]) === 'CLASS1'); // true
      console.log(model.classify(testData[1]) === 'CLASS2'); // true
    });
  });
});

Saving

var c45 = C45();
c45.train({...})
fs.writeFileSync('state.json', c45.toJSON())

Restoring

var c45 = C45();
var state = require('state.json')
c45.restore(state)
var model = c45.getModel()
console.log(model.classify(testData[0])) // 'CLASS1'

Test

npm test

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].