Выбор модели
Поиск по сетке
Большинство моделей содержат гиперпараметры: параметры, которые задаются в конструкторе, а не извлекаются из данных. ScikitLearn.jl предоставляет GridSearchCV
для поиска оптимального набора гиперпараметров:
julia> using ScikitLearn, Random
julia> Random.seed!(11);
julia> X = rand(25,4); y = rand([true,false], 25);
julia> @sk_import linear_model: LogisticRegression;
julia> using ScikitLearn.GridSearch: GridSearchCV
julia> gridsearch = GridSearchCV(LogisticRegression(max_iter=200), Dict(:C => 0.1:0.1:2.0))
GridSearchCV
estimator: PyCall.PyObject
param_grid: Dict{Symbol,StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}}
scoring: Nothing nothing
loss_func: Nothing nothing
score_func: Nothing nothing
fit_params: Dict{Any,Any}
n_jobs: Int64 1
iid: Bool true
refit: Bool true
cv: Nothing nothing
verbose: Int64 0
error_score: String "raise"
scorer_: Nothing nothing
best_params_: Nothing nothing
best_score_: Nothing nothing
grid_scores_: Nothing nothing
best_estimator_: Nothing nothing
julia> fit!(gridsearch, X, y)
GridSearchCV
estimator: PyCall.PyObject
param_grid: Dict{Symbol,StepRangeLen{Float64,Base.TwicePrecision{Float64},Base.TwicePrecision{Float64}}}
scoring: Nothing nothing
loss_func: Nothing nothing
score_func: Nothing nothing
fit_params: Dict{Any,Any}
n_jobs: Int64 1
iid: Bool true
refit: Bool true
cv: Nothing nothing
verbose: Int64 0
error_score: String "raise"
scorer_: score (function of type typeof(score))
best_params_: Dict{Symbol,Any}
best_score_: Float64 0.6
grid_scores_: Array{ScikitLearn.Skcore.CVScoreTuple}((20,))
best_estimator_: PyCall.PyObject
julia> println("Best hyper-parameters: $(gridsearch.best_params_)")
Best hyper-parameters: Dict{Symbol,Any}(:C => 0.8)
Подробные сведения см. в описании ?GridSearchCV
и документации по scikit-learn.
Случайный поиск
RandomizedSearchCV
будет производить выборку из каждого параметра независимо. Документацию см. здесь.
Примечание. Распределения должны быть указаны с помощью scipy.stats
(см. пример ниже), но мы надеемся на поддержку Distributions.jl в будущем. Отправьте проблему, если возникают сложности.