Skip to content

kortirso/elixir_learn_kit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LearnKit

Elixir package for machine learning

Available preprocessing methods:

  • Normalization

Available algorithms for prediction:

  • Linear Regression
  • Polynomial Regression

Available algorithms for classification:

  • K-Nearest Neighbours
  • Gaussian Naive Bayes

Installation

If available in Hex, the package can be installed by adding learn_kit to your list of dependencies in mix.exs:

def deps do
  [
    {:learn_kit, "~> 0.1.6"}
  ]
end

Normalization

Normalize data set with minimax normalization

  alias LearnKit.Preprocessing
  Preprocessing.normalize([[1, 2], [3, 4], [5, 6]])

Or normalize data set with selected type

  Preprocessing.normalize([[1, 2], [3, 4], [5, 6]], [type: "z_normalization"])

options - array of options

Additionally you can prepare coefficients for normalization

  Preprocessing.coefficients([[1, 2], [3, 4], [5, 6]], "minimax")
type - method of normalization, one of the [minimax|z_normalization], required

And then normalize 1 feature with predefined coefficients

  Preprocessing.normalize_feature([1, 2], [{1, 5}, {2, 6}], "minimax")
type - method of normalization, one of the [minimax|z_normalization], required

Linear Regression

Initialize predictor with data:

  alias LearnKit.Regression.Linear
  predictor = Linear.new([1, 2, 3, 4], [3, 6, 10, 15])

Fit data set with least squares method:

  predictor = predictor |> Linear.fit

Fit data set with gradient descent method:

  predictor = predictor |> Linear.fit([method: "gradient descent"])

Predict using the linear model:

  predictor |> Linear.predict([4, 8, 13])
samples - array of variables, required

Returns the coefficient of determination R^2 of the prediction:

  predictor |> Linear.score

K-Nearest Neighbours classification

Initialize classifier with data set consists from labels and features:

  alias LearnKit.Knn
  classifier =
    Knn.new
    |> Knn.add_train_data({:a1, [-1, -1]})
    |> Knn.add_train_data({:a1, [-2, -1]})
    |> Knn.add_train_data({:a2, [1, 1]})

Predict label for new feature:

  Knn.classify(classifier, [feature: [-1, -2], k: 3, weight: "distance", normalization: "minimax"])
feature - new feature for prediction, required
k - number of nearest neighbors, optional, default - 3
algorithm - algorithm for calculation of distances, one of the [brute], optional, default - "brute"
weight - method of weighted neighbors, one of the [uniform|distance], optional, default - "uniform"
normalization - method of normalization, one of the [none|minimax|z_normalization], optional, default - "none"

Gaussian Naive Bayes classification

Initialize classifier with data set consists from labels and features:

  alias LearnKit.NaiveBayes.Gaussian
  classifier =
    Gaussian.new
    |> Gaussian.add_train_data({:a1, [-1, -1]})
    |> Gaussian.add_train_data({:a1, [-2, -1]})
    |> Gaussian.add_train_data({:a2, [1, 1]})

Normalize data set:

  classifier = classifier |> Gaussian.normalize_train_data("minimax")
type - method of normalization, one of the [none|minimax|z_normalization], optional, default - "none"

Fit data set:

  classifier = classifier |> Gaussian.fit

Return probability estimates for the feature:

  classifier |> Gaussian.predict_proba([1, 2])
feature - new feature for prediction, required

Return exact prediction for the feature:

  classifier |> Gaussian.predict([1, 2])
feature - new feature for prediction, required

Returns the mean accuracy on the given test data and labels:

  classifier |> Gaussian.score

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/kortirso/elixir_learn_kit.

License

The package is available as open source under the terms of the MIT License.

Disclaimer

Use this package at your own peril and risk.

Documentation

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/learn_kit.