javascript implementation of logistic regression/c4.5 decision tree

Overview

LearningJS: A Javascript Implementation of Logistic Regression and C4.5 Decision Tree Algorithms

Author: Yandong Liu. Email: yandongl @ cs.cmu.edu

Update

I've made some update on the data loading logic so now it reads in csv-format file. Previous version is still accessible but it's no longer supported.

Introduction

Javascript implementation of several machine learning algorithms including Decision Tree and Logistic Regression this far. More to come.

Online Demo

Here's a online demo with visualization and a few datasets.

Data format

Input files need to be in CSV-format with 1st line being feature names. One of the features has to be called 'label'. E.g.

outlook, temp, humidity, wind, label
text, real, text, text, feature_type
'Sunny',80,'High', 'Weak', 'No'
'Sunny',82,'High', 'Strong', 'No'
'Overcast',73,'High', 'Weak', 'Yes' 

There's also an optional 2nd line for feature types and the 'label' column for 2nd line has to be called 'feature_type'. This is useful if feature types are mixed. For Logistic Regression, all features should be real numbers. E.g.

label,a,b,c,d,e,f,g,h,i,j,k,l,m
1,1,0.72694,1.4742,0.32396,0.98535,1,0.83592,0.0046566,0.0039465,0.04779,0.12795,0.016108,0.0052323
2,2,0.74173,1.5257,0.36116,0.98152,0.99825,0.79867,0.0052423,0.0050016,0.02416,0.090476,0.0081195,0.002708
3,3,0.76722,1.5725,0.38998,0.97755,1,0.80812,0.0074573,0.010121,0.011897,0.057445,0.0032891,0.00092068
1,4,0.73797,1.4597,0.35376,0.97566,1,0.81697,0.0068768,0.0086068,0.01595,0.065491,0.0042707,0.0011544

Usage

Data loading: data_util.js provides three methods:

  • loadTextFile: the csv-format file will be loaded from disk and columns are parsed as strings unless 2nd line specifies feature types.
  • loadRealFile: the csv-format file will be loaded from disk and columns are parsed as real numbers.
  • loadString: a big string will be chopped into lines and columns are parsed as strings unless 2nd line specifies feature types.

In the loading callback function you will obtain a data object D on which you can apply the learning methods. Note that only Decision Tree supports both real and categorical features. Logistic Regression works on real features only.

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
<script type="text/javascript" src="data_util.js"></script>
<script type="text/javascript" src="learningjs.js"></script>
loadString(content, function(D) {
  var tree = new learningjs.tree();
  tree.train(D, function(model, err){
    if(err) {
      console.log(err);
    } else {
      model.calcAccuracy(D.data, D.targets, function(acc, correct, total){
        console.log( 'training: got '+correct +' correct out of '+total+' examples. accuracy:'+(acc*100.0).toFixed(2)+'%');
      });
    }
  });
}); 

Use in Nodejs

Similarly you need to import the lib and do the same:

var learningjs = require('learningjs.js');
var data_util = require('data_util.js');
var tree = new learningjs.tree();
data_util.loadRealFile(fn_csv, function(D) {

  //normalize data
  data_util.normalize(D.data, D.nfeatures); 

  //logistic regression. following params are optional
  D.optimizer = 'sgd'; //default choice. other choice is 'gd'
  D.learning_rate = 0.005;
  D.l2_weight = 0.0;
  D.iterations = 1000; //increase number of iterations for better performance

  new learningjs.logistic().train(D, function(model, err){
    if(err) {
      console.log(err);
    } else {
      model.calcAccuracy(D.data, D.targets, function(acc, correct, total){
        console.log('training: got '+correct +' correct out of '+total+' examples. accuracy:'+(acc*100.0).toFixed(2)+'%');
      });
      data_util.loadRealFile(fn_test, function(T) {
        model.calcAccuracy(T.data, T.targets, function(acc, correct, total){
          console.log('    test: got '+correct +' correct out of '+total+' examples. accuracy:'+(acc*100.0).toFixed(2)+'%');
        });
      });
    }
  });
}); 

License

MIT

You might also like...

Visualize the Directed Acyclic Graph that Git creates to connect Commit, Tree and Blob objects internally.

Visualize the Directed Acyclic Graph that Git creates to connect Commit, Tree and Blob objects internally.

Git Graph Visualize the Directed Acyclic Graph that Git creates to connect Commit, Tree and Blob objects. Hosted at HarshKapadia2.github.io/git-graph.

Aug 21, 2022

Library for calculating where to draw tree nodes, while avoiding overlap.

Tree Grapher Library for calculating where to draw tree nodes, while avoiding overlap. Installation 1) npm install tree-grapher --save-exact The --sav

Feb 7, 2022

Linter for Nix using tree-sitter ๐ŸŒณ + โ„๏ธ

Linter for Nix using tree-sitter ๐ŸŒณ + โ„๏ธ This is a simple linter for Nix that uses tree-sitter. I plan on extending it with more detections in the fut

Dec 20, 2022

Lazy evaluation list with high tree-shaking affinity and easy customization.

Lazy evaluation list with high tree-shaking affinity and easy customization.

Lazy evaluation list with high tree-shaking affinity and easy customization. Features ๐ŸŽ Lazy Evaluation: The collections are only enumerated to the m

Dec 28, 2022

Mirror from https://github.com/BochilGaming/games-wabot/tree/multi-device

Games-Wabot Join Group Diskusi NO BOT Deploy to Heroku Heroku Buildpack BuildPack LINK FFMPEG here IMAGEMAGICK here FOR TERMUX USER Type mentioned bel

Dec 20, 2022

The open-source design system of Tree.ly

๐ŸŒณ Boemly Boemly is the open source component library maintained by Tree.ly based on ChakraUI. ๐Ÿƒโ€โ™€๏ธ Getting started Install Boemly: npm i boemly --sa

Oct 7, 2022

NextJS VScode extension to visualize component tree.

NextJS VScode extension to visualize component tree.

Nexus A component tree extension for NextJS Report Bugs ยท Request Features Table of Contents About The Project Built With Installation Getting Started

Nov 24, 2022

A simple C++ function parser/tagger based on tree-sitter

What the func?! - A simple C++ function parser/tagger This project implements a simple C++ function parser, what-the-func, based on the tree-sitter C+

May 21, 2022

Inspired by https://github.com/woochanleee/project-tree-generator

Project tree workflow Introduction Project tree workflow is automatically changes the project directory structure in your README.md or any text file.

Jan 2, 2023
Fancytree - JavaScript tree view / tree grid plugin with support for keyboard, inline editing, filtering, checkboxes, drag'n'drop, and lazy loading

Fancytree Fancytree (sequel of DynaTree 1.x) is a JavaScript tree view / tree grid plugin with support for keyboard, inline editing, filtering, checkb

Martin Wendt 2.6k Jan 9, 2023
Reinforcement learning using Markov Decision Processes. For JS, written in C++.

Pavlov.js About Pavlov.js uses Markov Decision Processes to implement reinforcement learning. It is written in C++ and compiled to JavaScript. For mor

Nathan Epstein 503 Dec 14, 2022
Open-source continuous regression testing that you can self-host.

Touca Touca helps you see the side-effects of your changes, as you write code. Touca SDKs let you describe the behavior and performance of your softwa

Touca 135 Dec 30, 2022
A refined tool for exploring open-source projects on GitHub with a file tree, rich Markdown and image previews, multi-pane multi-tab layouts and first-class support for Ink syntax highlighting.

Ink codebase browser, "Kin" ?? The Ink codebase browser is a tool to explore open-source code on GitHub, especially my side projects written in the In

Linus Lee 20 Oct 30, 2022
JqTree - Tree widget for jQuery

jqTree JqTree is a tree widget. Read more in the documentation. Features Create a tree from JSON data Drag and drop Works on ie9+, firefox, chrome and

Marco Braak 1k Dec 22, 2022
Little app for live coding effects for Matt Parker's xmas tree thing

Xmas Tree Lights App Little app for live coding and exporting effects for Matt Parker's Xmas tree experiment (2021 edition). You can check this out on

Pim Schreurs 8 Dec 12, 2022
Bootstrap an NFT minting site with Merkle tree whitelists.

??๏ธ nft-merkle-whitelist-scaffold Bootstrap an NFT minting site with merkle tree whitelists. Go to nft-merkle-whitelist.vercel.app to see the latest d

jaclyn 87 Dec 24, 2022
Frontend, contracts, and merkle tree generator for use in quickly scaffolding ERC20 token airdrops.

Merkle Airdrop Starter Quickly bootstrap an ERC20 token airdrop to a Merkle tree of recipients. Steps: Generate Merkle tree of recipients by following

Anish Agnihotri 675 Dec 22, 2022
This package is an open source extension for MikroORM, which enables Nested Set Tree for your needs

MikroORM nested set This package is an open source extension for MikroORM, which enables Nested Set Tree for your needs Disclaimer For now, this packa

Kamil Fronczak 5 Dec 15, 2022
(๐Ÿ”—, ๐ŸŒฒ) Web3 Link Tree is a free & open-source alternative to Linktree built with React.js, Next.js, Tailwind and Web3-React

Getting Started Read the detailed guide here Customize Add your name, wallet address, social media links and more in config.ts Images Save images to t

Naut 35 Sep 20, 2022