我想在MLJ.jl中训练3个模型:ARDRegressor,AdaBoostRegressor,BaggingRegressor
目前,例如,我一次训练他们1:
using Pkg; Pkg.activate("."); Pkg.instantiate();
using RDatasets, MLJ, Statistics, PrettyPrinting, GLM
X, y = @load_boston; train, test = 1:406, 407:506
@load ARDRegressor
reg = ARDRegressor
m = machine(reg(), X, y);
fit!(m, rows=train);
ŷ = predict(m, rows=test)
os_ARDRegressor = rms(ŷ , y[test])
我想训练他们一个循环,例如:
modlist = [ARDRegressor; AdaBoostRegressor; BaggingRegressor]
score = []
for (i, mod) in enumerate(modlist)
@load mod;
reg = mod;
m = machine(reg(), X, y);
fit!(m, rows=train);
ŷ = predict(m, rows=test)
push!( score, (i, mod, rms(ŷ , y[test])) )
end
最佳答案
在运行最后一个代码块时存在一些问题。
循环for jj in eachindex(Models)
遍历Models
数组的索引,因此jj
取值1、2、3。而是直接循环遍历Models
数组。@load ARDRegressor
是宏调用;这意味着@load jj
将转换为@load("jj")
,因此请勿像您想要的变量那样使用jj
。os_jj
的值将在循环的每次迭代中被覆盖。您宁愿将分数保留在该索引处的数组中:os[jj] = ...
MLJ要求您在加载模型之前导入包含模型的软件包。提醒自己using ScikitLearn
需要在当前环境中安装sklearn python软件包。
考虑以下工作代码示例:
using MLJ, RDatasets
X, y = @load_boston; train, test = 1:406, 407:506
models = [@load ARDRegressor; @load AdaBoostRegressor; @load BaggingRegressor]
score = Array{Float64}(undef, 3)
for (i, model) in enumerate(models)
m = machine(model, X, y)
fit!(m, rows=train);
ŷ = predict(m, rows=test)
score[i] = rms(ŷ, y[test])
end
@show score
旁注:使用以下命令运行julia时,无需使用
using Pkg; Pkg.activate(".")
。但这取决于个人喜好