rusty-machine 0.5.4

A machine learning library.
Documentation
# Change Log

This document will be used to keep track of changes made between release versions. I'll do my best to note any breaking changes!

## 0.5.4

### New Contributors

- [sinhrks]https://github.com/sinhrks

### Breaking Changes

- None

### Features

- Add a new `datasets` module behind a `datasets` feature flag.
- Add new classification scores: `precision`, `recall`, and `f1`.
- Add a new `Transformer::fit` function to allow prefitting of a
`Transformer` before use.

### Bug Fixes

- None

### Minor Changes

- `LinRegressor` now uses `solve` instead of `inverse` for improved
accuracy and stability.

## 0.5.3

### Breaking Changes

- None

### Features

- Adding a new `confusion_matrix` module.

### Bug Fixes

- None

### Minor Changes

- Updated rulinalg dependency to `0.3.7`.

## 0.5.2

### New Contributors

- [scholtzan]https://github.com/scholtzan

### Breaking Changes

- None

### Features

- None

### Bug Fixes

- Regularization constant for GMM is now only added to diagonal.

### Minor Changes

- Added some better `Result` handling to GMM.

## 0.5.1

This version includes no changes but is a bump due to a
[crates bug](https://github.com/rust-lang/crates.io/issues/448#issuecomment-251037439).

See the notes for 0.5.0 below.

## 0.5.0

This is another fairly large release. Thank you to everyone who contributed!

### New Contributors

- [NivenT]https://github.com/NivenT
- [theotherphil]https://github.com/theotherphil
- [andrewcsmith]https://github.com/andrewcsmith

### Breaking Changes

- The `SupModel` and `UnSupModel` traits now return
`Result`s for the `train` and `predict` functions.
- Updated to [rulinalg]https://github.com/AtheMathmo/rulinalg v0.3 ([see
rulinalg changelog for
details](https://github.com/AtheMathmo/rulinalg/blob/master/CHANGELOG.md#030)).

### Features

- Adding RMSProp gradient descent algorithm. #121
- Adding cross validation. #125
- Adding a new `Shuffler` transformer. #135

### Bug Fixes

- None

### Minor Changes

- Adding benchmarks
- Initiate GMM with sample covariance of data (instead of identity matrix).

## 0.4.4

### Breaking Changes

- None

### Features

- Adding new `Transformer` trait for data preprocessing.
- Adding a `MinMax` transformer.
- Adding a `Standardizer` transformer.

### Minor Changes

- None

## 0.4.3

### New Contributors

- [tafia]https://github.com/tafia who is responsible for all changes in this release.

### Breaking Changes

- None

### Features

- None

### Minor Changes

- Made neural nets more efficient by reducing clones
and some restructuring.
- Removing unneeded copying in favour of slicing for performance.
- Using `iter_rows` in favour of manually row iterating by chunks.

## 0.4.2

### Breaking Changes

- None

### Features

- None

### Minor Changes

- Fixed a significant bug in the K-Means algorithm. Centroids
were not updating correctly during M-step.

## 0.4.1

### Breaking Changes

- None

### Features

- Added experimental implementation of DBSCAN clustering.

### Minor Changes

- Added new example for K-Means clustering in repo.

## 0.4.0

This is the biggest release so far. Primarily because the `linalg`
module has been pulled out into its own crate: [rulinalg](https://github.com/AtheMathmo/rulinalg).

In addition to this there have been a number of improvements to the `linalg`
and `learning` moduled in this release.

### Breaking Changes

- The `linalg` module pulled out and replaced by reexports of [rulinalg]https://github.com/AtheMathmo/rulinalg.
All structs are now imported at the `linalg` level, i.e. `linalg::matrix::Matrix` -> `linalg::Matrix`.
- Decomposition methods now return `Result` instead of panicking on fail.
- K-Means now has a trait for `Initializer` - which allows generic initialization algorithms.

### Features

- New error handling in both the `linalg` (now rulinalg) and `learning` modules.
- Bug fixed in eigendecomposition: it can now be used!
- K-means can now take a generic initialization algorithm.

### Minor Changes

- Optimization and code cleanup in the decomposition methods.
- Some optimization in the K-Means model.

## 0.3.3

### New Contributors

- [ic]https://github.com/ic (Added examples to repo!)

### Breaking Changes

- Parameter methods now return `Option<&Type>` instead of `&Option<Type>`.

### Features

- `MatrixSlice` and `MatrixSliceMut` now have `IntoIterator` methods.

### Minor Changes

- Adding examples to the repository.

## 0.3.2

### New Contributors

- [DarkDrek]https://github.com/DarkDrek (Who is responsible for almost all changes in this release. Thank you!)

### Breaking Changes

- `Matrix`: `mean` and `variance` methods now take `Axes` enum instead of `usize` flag for dimension.

### Features

- Assignment operators (`+=`, `-=`, etc.) now implemented for `Vector`.

### Minor Changes

- Some optimizations to `variance` computation for `Matrix`.
- Some code cleanup - thanks to [clippy]https://github.com/Manishearth/rust-clippy. 

## 0.3.1

### Breaking Changes

- None

### Features

- New helper methods to access GMM distribution parameters.
- New GMM constructor to choose different prior mixture weights.

### Minor Changes

- Fixed a bug where GMM covariances were incorrectly computed when using diagonal constraint.

## 0.3.0

### New Contributors

- [rrichardson]https://github.com/rrichardson

### Breaking Changes

- All fields on `GradDesc` and `StochasticGD` are now private.
- Matrix slices now have the same lifetime as their target data.

### Features

- Adding new slice utility methods : `from_raw_parts` for `MatrixSlice`s and `as_slice` methods for `Matrix`.
- Adding framework for regularization. Implementing regularization for nnets.
- Adding early stopping to gradient descent algorithms.
- Adding `AdaGrad` gradient descent algorithm.
- Implementing `Into` and `From` for `Matrix`, `Vector`, and `MatrixSlice`s.

### Minor Changes

- Bug fixing naive bayes : no longer attempts to update empty class.
- Removing unneeded trait bounds on `Matrix`/`Vector` implementations.

## 0.2.8

### Breaking Changes

- The `new` constructors for `Matrix` and `Vector` now take an `Into<Vec>` generic type. May break some type inference.

### Features

- Added row iterators for each matrix struct.
- Implemented OpAssign overloading for `Matrix` and `MatrixSliceMut`.

### Minor Changes

- Moved unit tests into respective modules.
- Modified slice iterators to make the `offset` usage safe(er).
- Removed some compiler warnings from the tests.

## 0.2.7

### Breaking Changes

- None

### Features

- `Matrix` and `Vector` now implement [PartialEq]https://doc.rust-lang.org/core/cmp/trait.PartialEq.html.

### Minor Changes

- Fixed a bug where eigendecomposition for 2x2 matrices was incorrect.

## 0.2.6

### Breaking Changes

- None

### Features

- None

### Minor Changes

- Fixing a bug with matrix slice multiplication.
- Removing unneeded NumCast import.

## 0.2.5

### Breaking Changes

- None

### Features

- Adding Naive Bayes classifiers.
- Adding a prelude for common imports.
- Adding MatrixSlice and MatrixSliceMut for efficient matrix views.

### Minor Changes

- Using [matrixmultiply]https://github.com/bluss/matrixmultiply to get huge performance gains! Thanks [bluss]https://github.com/bluss/.
- Code refactor to split up the matrix module.


## 0.2.4

### New Contributors

- [vishalsodani]https://github.com/vishalsodani (fixing some typos)
- [danlrobertson]https://github.com/danlrobertson (added the `KMeansClassifierBuilder`)

### Breaking Changes

- None

### Features

- `KMeansClassifier` now has a builder!

### Minor Changes

- We're now using travis for CI.
- Deriving Debug, Clone, Copy for Gaussian and Exponential distributions.


## 0.2.3

### Breaking Changes

- `mut_data` method now returns a mutable slice `&mut [T]` instead of a `Vec<T>`.

### Features

- More vectorization and optimization of linear algebra.

### Minor Changes

- Copy and Clone now implemented where applicable.
- Added test coverage.

## 0.2.2

### New Contributors

- [zackmdavis]https://github.com/zackmdavis (contributed all features for this version, thank you!)

### Breaking Changes

- None

### Features

- Can now debug print matrices and vectors.
- Can now pretty print matrices to given precision.

### Minor Changes

- Fixed the dependency versions used in Cargo.toml.
- Updated the library documentation with complete list of ML tools.

## 0.2.1

### Breaking Changes

- None

### Features

- Addition of Gaussian Mixture Models.
- Allow basic arithmetic to combine kernels.

### Minor Changes

- Added some missing documentation.
- Some code formatting.
- Minor improvements thanks to clippy.

## 0.2.0

### Breaking Changes

- Neural network instantiation `new` method now requires a training algorithm to be specified.

### Features

- Adding more kernels (for full list see API documentation).
- Generalized Linear Model.
- Updated model structures to allow more freedom in training algorithms.

### Minor Changes

- Some more documentation.
- Some minor code formatting.

---
## 0.1.8

### Breaking Changes

- None

### Features

- Add Support Vector Machines.

### Minor Changes

- Minor code cleanup.
- Some micro optimization.

---

## 0.1.7

### Breaking Changes

- None

### Features

- Added the stats module behind the optional feature flag `stats`.
- `stats` currently includes support for the Exponential and Gaussian distributions.

### Minor Changes

- Some rustfmt code cleanup.

---

## 0.1.6

### Breaking Changes

- Removed the `new` constructor for the `LinRegressor`. This has been replaced by the `default` function from the `Default` trait.

### Features

- Added a `select` method for cloning a block from a matrix.
- Implemented QR decomposition, and eigenvalue decomposition.
- Implemented eigendecomp (though only works definitely for real-symmetric matrices).

### Minor Changes

- Optimizations to matrix multiplication