npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

boosting

v0.2.0

Published

a generic boosting algorithm, useful for A.I. applications to improve performance of a crowd of algorithms

Downloads

6

Readme

NPM version Downloads Auto Test Status license Gitter chat

The Boosting package is a general boosting algorithm which make a group of classifiers act as one improved classifier.

What is a classifier? A classifier is something (a function in this case) that determines if a thing is one kind of thing or another kind. For example, suppose you have a few different functions that can scan images and detect if a persons face is in the image. Either there is a face or there isn't. Those functions are classifiers. Independently they may not do all that well. Boosting organizes and scales them so that together your functions do a better job than any one of them by themselves. If there is a classifier that isn't important, redundant, or that is confusing the issue Boosting can detect that and exclude it.

Much like Genetic Algorithm, Nearest Neighbour, and Neural Nets, Boosting requires a training set.

To use Boosting you'll need some classifiers (that you write yourself or created from Neural Nets, Nearest Neighbours, or etc) and some data (such as voter turn out or hockey stats).

Section Links : Construction , Execution , Configuration , Example , FAQ , Related , and References

Construction

require('boosting')

The Boosting Constructor is created like so:

var BoostingConstructor = require('boosting')
var config = { /* config options */ }
var boosting = BoostingConstructor( config )

Or as a one liner with default config:

var boosting = require('boosting')( )

That's it. Of course there are more configuration options, but they are all optional.

boosting.addClassifier( classifierFunction , handyName )

Returns boosting

Add your classifier functions using the addClassifier function. Your classifierFunction takes training and actual data you supply. Your classifier returns a boolean. You can also give it a handy name, but that is optional. Use it like so:

var myClassifier = function(data) { 
	/* do something and return something truthy or falsy */
}
# add it
boosting.addClassifier( myClassifier )

# or add it with a nice name, useful for debugging
boosting.addClassifier( myClassifier , "win function")

Why add a name? No real reason other than debugging and self-documentation.

boosting.addData( data , boolean )

Returns boosting

Add training data using the addData function. The data is whatever your classifier functions take as an argument and the boolean value can be any javascript truthy or falsy value.

boosting.addData( "cupcake" , false )

Because it returns the boosting object you can chain the calls like so:

boosting.addData( "cupcake" , false ).addData( "bacon" , true )

You can do that with the addClassifier also, or mix it up and do one then the other.

Execution

boosting.optimize( )

Returns boosting

Review ALL the known points of data against ALL the classifiers and organize them according to the Boost algorithm. If you provided a LOT of known points and classifiers then be prepared for this to take a really really long time. For a few hundred or thousand combinations it should be lightening fast.

Call boosting optimize like so:

boosting.optimize( )

Wow, that was easy. Okay, maybe you want to enforce an alphaThreshold. If you do, then pass it as a parameter. Don't know what an alphaThreshold is? No problem. Don't set it.

boosting.optimize( alphaThreshold )

Why would you enforce an alphaThreshold? Well, maybe you don't want useless classifiers to be included in the optimization. Of course that means you'll have to find out what alphaThreshold means. Or not and try 0.1.

Optimize moves some, none, or all of the classifiers out of its unused classifiers bin and into the Good Classifier bin. If you run .optimize again, Boosting will check the unused classifiers (and any recently added classifiers) and see if they should be moved over to the other bin.

boosting.classify( data )

Returns boolean

Test some data. This is where it all comes together. You've configured your boosting function, added your data and classifiers, and optimized it. Now you have some data that you want classified. Do it like so:

var result = boosting.classify( data )

Configuration

Config object

Here is the full configuration object and the constructor.

var config = {
	known 		: [],  // a list of known objects
	classifiers : [],  // a list of classifier objects
}
var BoostingConstructor = require('boosting')
var boosting = BoostingConstructor( config )

Quick links to more information about the known , and classifiers.

You really don't need to use the config. Instead you can use the add functions. All configuration options are optional.

boosting.config()

Returns config

Want to retrieve or inspect the configurate? No problem, do it like so:

var theConfig = boosting.config()

This is the specification of the configuration arrays you pass to boosting

Known List

known = [
	{ data : data1 , value : true },
	{ data : data2 , value : false },
	{ data : data3 , value : true },
	....
]

Classifiers List

classifiers = [
	{ exec : classifierFunction1 , name : "name1" },
	{ exec : classifierFunction2 , name : "name2" },
	...	
]

Example

If you have installed this as a npm dependency first change directory to node_modules/boosting/.

Template

This is a simple boilerplate ready for you to add your code. Run it like so:

node example/template.js

Minimal

An absolute minimalist example of some classification. Run it like so:

node example/minimalist.js

FAQ

Can I use Boosting on Boosting? Yes you can! Will it do anything extra? Maybe. If you have a few classifiers and a boosting of some other classifiers then you could use boosting again to combine the whole lot. Enjoy.

What about over-fitting? Yes, over fitting is a problem with Neural Nets, Genetic Algorithms, and the like. Boosting seems to not suffer from that problem. Can you take a neural net that has been trained to overfit a problem and wrap it in Boosting to magically fix it? No. But if you had a few more neural nets and possibly a nearest neighbour and binomial classification all wrapped in boosting then, yes, over-fitting will be less of a problem.

Related AI Projects

This is part of a set of related projects.

References