Документация Engee

Модели

Модели Python

В scikit-learn имеется порядка 100—​200 моделей (чаще называемых средствами оценки), разделенных на три категории.

Все эти средства оценки будут работать с ScikitLearn.jl. Их можно импортировать с помощью @sk_import. Например, вот как импорт и подбор sklearn.linear_regression.LogisticRegression

julia> using ScikitLearn, Random

julia> Random.seed!(11); #обеспечивают воспроизводимость.

julia> X = rand(20,3); y = rand([true, false], 20);

julia> @sk_import linear_model: LogisticRegression
PyObject <class 'sklearn.linear_model._logistic.LogisticRegression'>

julia> using ScikitLearn.CrossValidation: train_test_split

julia> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42);

julia> log_reg = fit!(LogisticRegression(penalty="l2"), X_train, y_train);

julia> predict(log_reg, X_test)
5-element Array{Bool,1}:
 0
 0
 0
 0
 0

Напоминание. ?LogisticRegression содержит много информации о параметрах модели.

Установка и импорт моделей Python

Для импорта моделей Python требуется Python 3.x с numpy и библиотека scikit-learn. Проще всего это можно сделать с помощью пакета Conda.jl, который уже установлен в вашей системе. При вызове @sk_import linear_model: LinearRegression все компоненты должны будут установлены автоматически. Кроме того, scikit-learn можно установить вручную с помощью Conda.add("scikit-learn"). Если у вас возникли другие проблемы, изучите раздел о PyCall.jl или разместите проблему.

Модели Julia

Модели Julia размещены в других пакетах, и их нужно устанавливать отдельно с помощью Pkg.add или Pkg.checkout (чтобы получить последнюю версию — иногда это необходимо). Все они реализуют общий API и предоставляют информацию о гиперпараметрах в своих ?docstrings.

К сожалению, некоторые пакеты экспортируют функцию fit!, которая конфликтует с функцией fit! ScikitLearn. Это можно исправить, добавив следующую строку:

using ScikitLearn: fit!, predict

Встроенные модели ScikitLearn

  • ScikitLearn.Models.LinearRegression() реализует линейную регрессию с помощью \\\, оптимизированную для скорости. Дополнительные сведения о параметрах подбора см. в описании ?LinearRegression.

GaussianMixtures.jl

julia> using GaussianMixtures: GMM #Сначала обязательно установите пакет.

julia> gmm = fit!(GMM(n_components=3, kind=:diag), X_train);
[ Info: Initializing GMM, 3 Gaussians diag covariance 3 dimensions using 15 data points
  Iters               objv        objv-change | affected
-------------------------------------------------------------
      0       1.462249e+00
      1       1.041033e+00      -4.212161e-01 |        2
      2       9.589243e-01      -8.210827e-02 |        2
      3       9.397430e-01      -1.918135e-02 |        0
      4       9.397430e-01       0.000000e+00 |        0
K-means converged with 4 iterations (objv = 0.9397430000827904)
┌ Info: K-means with 15 data points using 4 iterations
└ 1.3 data points per parameter

julia> predict_proba(gmm, X_test)
5×3 Array{Float64,2}:
 1.37946e-7   5.58899e-9   1.0
 0.986895     1.98749e-10  0.0131053
 0.998037     1.00296e-15  0.00196321
 2.66238e-11  0.041746     0.958254
 0.999984     4.05443e-6   1.16204e-5

Документация на странице о GaussianMixtures.jl. Пример: оценка плотности

GaussianProcesses.jl

julia> using GaussianProcesses: GPE, MeanZero, SE #Сначала обязательно установите пакет.

julia> gp = fit!(GPE(; mean=MeanZero(), kernel=SE(0.0, 0.0), logNoise=-1e8), X_train, Float64.(y_train))
GP Exact object:
  Dim = 3
  Number of observations = 15
  Mean function:
    Type: MeanZero, Params: Float64[]
  Kernel:
    Type: GaussianProcesses.SEIso{Float64}, Params: [0.0, 0.0]
  Input observations =
[0.376913304113047 0.5630896022795546 … 0.31598998347835017 0.5828199336036355; 0.50060556533132 0.4124482236437548 … 0.6750380496244157 0.6147514739028759; 0.5142063690337368 0.4774433498612982 … 0.9823652195180261 0.21010382988916376]
  Output observations = [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0]
  Variance of observation noise = 0.0
  Marginal Log-Likelihood = -749.473

julia> predict(gp, X_test)
5-element Array{Float64,1}:
  2.1522493172861914
  1.298965158588743
  0.8142639915894847
 -0.7287701449385509
  0.749523596826748

Документация на странице о GaussianProcesses.jl и в docstring о ?GPE. Пример: Гауссовские процессы

Гауссовские процессы имеют множество гиперпараметров, список которых приведен в описании get_params(GP). Их можно настраивать.

DecisionTree.jl

  • DecisionTreeClassifier

  • DecisionTreeRegressor

  • RandomForestClassifier

  • RandomForestRegressor

  • AdaBoostStumpClassifier

Документация на странице о DecisionTree.jl. Примеры: записные книжки Сравнение классификаторов, Регрессия дерева принятия решений.

LowRankModels.jl

  • SkGLRM: обобщенная низкоранговая модель

  • PCA: анализ главных компонентов

  • QPCA: квадратичный регуляризованный анализ главных компонентов

  • RPCA: надежный анализ главных компонентов

  • NNMF: неотрицательное матричное разложение

  • KMeans: алгоритм k-средних

Все эти алгоритмы являются частными случаями алгоритма обобщенной низкоранговой модели, основная цель которого — обеспечить гибкие потери и регуляризацию для разнородных данных. Специализированные алгоритмы в целом достигают более быстрой сходимости. Документация на странице о LowRankModels.jl. Пример: Классификация цифр методом k-средних.

Участие в создании новых моделей

Чтобы ваша модель Julia была совместима с ScikitLearn.jl, нужно реализовать интерфейс scikit-learn. См. ScikitLearnBase.jl