everything is fully multi-class compatible!
This makes our code consistent with sklearn behaviour.

In particular, predict_prob(samples) now returns array of shape
[nsamples x nclasses]
so be sure to slice on your favourite class
everything is fully multi-class compatible!
This makes our code consistent with sklearn behaviour.

In particular, predict_proba(samples) now returns array of shape
[nsamples x nclasses]
so be sure to slice on your favourite class
finished testing the multiclass combinedAI

everything seems to work!

Note: tree and forest now use predict_proba instead of predict as their input features
*added the 'adaboost' ensemble method.

this is a 'strategy' on the prediction matrix (the ensemble)
which iteratively adds the "best" classifier which will help
fix predictions previously missed.

*when 'fit'ting the combinedAI, randomly split the data into
different subsets so each classifiers sees a different subset of data

*added more notes and documentation
fixed typo in the 'adaboost' class
*added more notes

*fixed an error where the target class '0' was being mapped to '-1', but
was not mapped back to '0'
*added more notes/hints

*fine-tuned the adaboost.predict_proba
implemented the 'platt' method, but results were poor.
instead, predict_proba accepts list_of_predict or list_of_predict_proba
and outputs the weighted sum of the predictions
*make sure adaboost.predict_proba is being fed predict_proba inputs
(not predict inputs)
trying to get mixin classifier for tree.DecisionTreeClassifier and RandomForest

but 'fit' keeps failing with warnings:
RuntimeError: scikit learn estimators should always specify their parameters in the signature of their init (no varargs).
*changes to class adaboost... improving predict_proba
*fixed adaboost isinstance usage

*ran grid search for AIonAI options, and set the results
to the best values. This means logisticregression AIonAI
is actually penatly='l1' not 'l2'... hence the rename
*added an exception to combinedAI to ensure
'strategy' is recognized

Note: last commit message was incomplete:
*fixed adaboost isinstance usage

*ran grid search for AIonAI options, and set the results
to the best values. This means logisticregression AIonAI
is actually penatly='l1' not 'l2'...

*hence the rename of strategy='l2' to strategy='l1'
*some more improvements to adaboost algorithm

*coded-in AIonAI best grid-searched parameters for svm, tree, nn and lr

*code-tidying
*functionality changes to pfdviewer.py
 -improved ability to find AIview generated files
*pfdviewer : added the ability to load a temporary classifier to see its performance.
            "click the 'show tmp.AI' button"
*added/enhanced the tmpAI option in the pfdviewer.
this allows one to load up a pickled classifier and display
its' performance.
classifier.py:
*fix up adaboost.predict_proba: H(x) = sign( \sum_i w[i]*h_i(x) ), i=list_of_AIs
we adjust predict_proba to go from 0<P<1, instead of
-\sum_i abs(w[i]) < P < \sum_i abs(w[i])

pfdviewer.py:
change P0 to [s], not [ms]
some gui improvements
* fixes to adaboost.predict_prob
  * lowered threshold for error
  *
changes to pfdviewer:
 +make some windows bigger
 +apply the adaboost weights to the tmpAI probabilities (if using adaboost)
Merge branch 'development' of github.com:zhuww/ubc_AI into development

Conflicts:
	classifier.py