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
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
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
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
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"
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
Bug reports and pull requests are welcome on GitHub at https://github.com/kortirso/elixir_learn_kit.
The package is available as open source under the terms of the MIT License.
Use this package at your own peril and risk.
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/learn_kit.