Changelog
=========

All notable changes to this project will be documented in this file.

The format is based on `Keep a Changelog <http://keepachangelog.com/>`_
and this project adheres to `Semantic Versioning <http://semver.org/>`_

2.1.1rc1 - 2019-02-15
------------------

Added
~~~~~~~
- Relief feature selection.
- RankedSVM for multilabel classification.
- Multilabel workflow. All binary classifiers can now also be used
  for multilabel classification true a sklearn OneVsRestClassifier
  object.
- Multilabel performance metrics. Automatically used in plot_SVM
  when using multilabel workflow.
- Full oversampling of underrepresented classes.
- log_uniform and exp_uniform distributions
- Volume now also computed when only providing a Nifti
- Single class Relief feature selection.
- MultiSVR ensembling.
- Start on F1_average metric.


Changed
~~~~~~~
- Reduced memory usage by not passing fitted objects, but just the
 (hyper)parameters.
- All metrics used in evaluation are now combined in a metrics
  script in the classification folder.
- Cleaned crossval function for readability.
- SVM hyperparameters are adjusted.
- GroupSel now has a separate Hyperparameter for all texture groups.
- Plot_barchart also compatible with above hyperparameter change.
- Ranked images are now named with their rank, making it easier to read the
  output.

Fixed
~~~~~
- Catch error when validation set is too small.
- Logging of cross validation now works properly by removing previous
  log filehandles.
- Ordering of methods in the SearchCV preprocess function now
  corresponds with fitandscore.
- Bugs for multiclass predict in SearchCV and in plot_SVM
- Backend used in matplotlib is now agg, hence usage on platforms
  not supporting tkinter is now supported.
- Raise an error when multiple label matches for a single feature file are found.
- Plot_SVM: Y_score needs to be computed with predict_proba, not the decision_function.
- SearchCV, Ensemble, Predict: Average was taken over binary scores. The
  average is now taken over the posteriors.
- Plotting posteriors in ranked_images now correctly prints the posterior. Was
  previously converted to integer.
- Samples get a unique ID in the crossvalidation, so we always now which sample was used.
- Bug in usage of PCA that caused it to never be used, plus a attribute name error.


2.1.0 - 2018-08-09
------------------


Added
~~~~~

- PREDICT Exceptions in general.
- A PREDICT ValueError catch when fitting the classifiers has failed and thus
  output is missing.
- Feature imputation added in fitandscore. Made additions in scripts parsing
  these fields
  towards fitandscore.
- Logistic regression classifier.
- Ensemble performance computing in plot_SVM.
- Feature selection based on variance taking the mean of the features into
  account.
- Added PCA as feature selection method.
- Added plot_feature_groups function. Note that it's not used yet by default in
  the trainclassifier analysis
- Some more docstrings and cleaned some functions.
- Save the cv_iter object in the SearchCV so you can re-use the
  training/validation splits.
- Ensembling based on Caruana et al. 2004 in the SearchCV object.
- plot_SVM function also outputs percentage of crossval iterations in which
  patient got classified correctly.
- Temporary save setting for crossval function is now in general config.
- Fastr execution plugin type is now also an argument for the SearchCV object.


Changed
~~~~~~~

- LoG features are now computed per 2-D slice, as is done with most other
  features as well.
- SVM parameters slack is now dependent on features.
- Removed normalization in calcfeatures: now in separate node in WORC.
- Moved load_data function from trainclassifier to file_io for broader use.
- Removed preprocessing. It is now part of the WORC Python package and thus a
  step separated from the feature calculation.
- Updated ttest tool to comply with new way of inputting feature files.
- SVM Polynomial kernel now spans [1, 5] instead of [2, 5]
- Cross validation splitting is now based on patient IDs, hence all samples
  from all patients are either in the training or the testing set.
- Removed the general config.ini file and parser. These were used to determine
  the settings for the Joblib Parallel function. These are now in the general
  config. These had to be passed to both SMOTE and the Gabor feature computation.


Fixed
~~~~~

- The load_data function in trainclassifier didn't work properly for multiple
  modalities.
- LoG filter needs a minimum of 4 voxels in each direction. These are therefore
  now extracted on the full image instead of o nly the ROI slices. Plus there
  is a catch if the full image also does not meet these criteria.
- SMOTE was not working properly in the nocrossval function in the classification/crossval.py script.
- Added ravel of labels to nocrossval function, as it was missing.
- Conversion to numpy uint8 for vessel features, as skimage cannot filter certain float images.
- construct_classifier gives an error for SVM's if a kernel type is not recognized.
- Param grids in construct_crossval were using loc and scale incorrectly.
- NaN in phase images are replaced by zeros to prevent errors.
- In vessel features, when segmentation is small, there is not inner or outer edge.
  PREDICT gave an error, now those features are just zeros.
- In shape_features, first check if (0x18, 0x50) is present in metadata before
  computing volume.
- No more unnecessary use of lists in CalcFeatures and get_features for the image data.
- Convert all integer inputs in compute_CI to floats, as divisions were
  previously uncorrectly rounded when providing integers.
- plot_ROC function now works properly.
- Everything in the confidence interval function is now cast to floats,
  as divisions with integers and floats are rounded to integers which gave
  wrong values for the CI.
- Confidence interval now has a catch when only a single iteration is provided.
- Lot of error catches now have PREDICT errors.


2.0.0 - 2018-02-13
------------------

Added
~~~~~

- Vessel, Laplacian of Gaussian (LoG), phase, GLCM multislice and NGTDM
  features.
- Groupwise feature selection for these features.
- Function to perform statistical tests among features from classes.
- Selectfrommodel feature selection.
- SGDR, RFR, ElasticNet, and LASSO estimators.
- Option to supply fixed splits to cross validation.
- Option to perform no cross validation, but just a fixed train and test split.
- SMOTE?
- After each cross validation, a temporary save of the results of that
  iteration can optionally be made.
- A lot of explanations/helps to functions.
- Plotting function for regression functions.
- Function to apply student t-test to features.

Changed
~~~~~~~

- Parameters of all features computations are now parsed from the configuration
  ini file instead of solely being in the functions.
- Joblib and Fastr SearchCV objects now in single file. Created a general
  SearchCV object.


Fixed
~~~~~

- SVM kernel degree can now also become linear.
- Feature group selection was not working.
- Regression now uses a non-stratified split for cross validation, a stratified
  split is not possible and thus gave errors.
- There was a bug that the coliage features where always computed, which
  is now fixed.

1.0.0 - 2017-07-27
------------------

Release
