JuliaAI / DataScienceTutorials.jl

A set of tutorials to show how to use Julia for data science (DataFrames, MLJ, ...)
https://juliaai.github.io/DataScienceTutorials.jl/
MIT License
116 stars 18 forks source link

More sophisticated example of learning networks #9

Open tlienart opened 5 years ago

tlienart commented 5 years ago

@ablaom it would be nice to have a quick example of something that can't be done with a pipeline; I was thinking something like

L1 : standardizer and boxcox L2 : Ridge and DTR L3 : hcat and feed to a LinearRegressor

It should look something like this

W = X |> Standardizer()
z = y |> UnivariateBoxCoxTransformer()
ẑ₁ = (W, z) |> RidgeRegressor()
ẑ₂ = (W, z) |> DecisionTreeRegressor()
R = hcat(ẑ₁, ẑ₂)
ẑ = (R, z) |> LinearRegressor()
ŷ = ẑ |> inverse_transform(z)

but it looks like there's an issue with fitting the R node, could you comment on it?

ERROR: MethodError: no method matching ridge(::Array{Any,2}, ::Array{Float64,1}, ::Float64)
tlienart commented 5 years ago

Hmm the KNNRidge blend example is actually just that. But I'd still be curious to understand what I did wrong above

ablaom commented 5 years ago

The following code works:

using MLJ

Xr, yr = @load_boston
zr = rand(length(yr))

X = source(Xr)
y = source(yr)
z = source(zr)

W = X |> Standardizer()
z = y |> UnivariateBoxCoxTransformer()
ẑ₁ = (W, z) |> @load RidgeRegressor pkg=MultivariateStats
ẑ₂ = (W, z) |> @load DecisionTreeRegressor
R = MLJ.table(hcat(ẑ₁, ẑ₂))
ẑ_prob = (R, z) |> @load LinearRegressor pkg=GLM
ẑ = node(v->mean.(v), ẑ_prob)
ŷ = ẑ |> inverse_transform(z)
fit!(ŷ)
ŷ()

Side comment: A great non-trivial example is stacking, as suggested by the diagram on the MLJ Readme.

ablaom commented 5 years ago

Or you could have used predict_mean but then you couldn't use the arrow syntax, I guess.