s2net
s2net
can be used as a supervised method (without unlabeled data) and it is equivalent to elastic net.
The auto_mpg
dataset is available when s2net
is installed.
library(s2net)
data("auto_mpg")
# Preprocess the data using the s2Data function
= s2Data(auto_mpg$P1$xL, auto_mpg$P1$yL, preprocess = TRUE) train
To fit an OLS model, we will use the lm
function (without intercept).
= lm( y~ 0 + ., data = data.frame(train$xL, y = train$yL)) lm.fit
To obtain the estimations from s2net
we use
= s2netR(train, s2Params(0))
obj # We set all the hyper-parameters to 0
We can compare the training objectives of both algorithms, as well as the estimations.
library(Metrics)
# Training error
= predict.lm(lm.fit, data.frame(train$xL))
ypred print("OLS error:")
mse(ypred, train$yL)
= predict(obj, train$xL)
ypred print("s2net error:")
mse(ypred, train$yL)
#Estimations
data.frame(mle = lm.fit$coefficients, s2net = obj$beta)
[1] "OLS error:"
[1] 11.14708
[1] "s2net error:"
[1] 11.14754
mle s2net
cylinders.L 0.3548161 0.285474997
cylinders.Q -0.9132173 -0.935717172
cylinders.C 0.3835068 0.330481968
cylinders.4 NA -0.008096223
displacement -1.0056651 -0.945328949
horsepower 0.1307953 0.124370552
weight -2.8561218 -2.901267109
acceleration 1.1041176 1.115766617
year 3.7855521 3.782110411
library(glmnet)
= glmnet(train$xL, train$yL, family = "gaussian",
lasso.fit alpha = 1, lambda = 0.01, intercept = F)
= predict(lasso.fit, train$xL)
ypred print("Lasso error:")
mse(ypred, train$yL)
= s2netR(train, s2Params(lambda1 = 0.01))
obj = predict(obj, train$xL)
ypred print("s2net error")
mse(ypred, train$yL)
print("Coefficients")
data.frame(lasso = as.numeric(lasso.fit$beta), s2net = obj$beta)
[1] "Lasso error:"
[1] 11.1477
[1] "s2net error"
[1] 11.1495
[1] "Coefficients"
lasso s2net
1 0.00000000 0.04400422
2 -1.12939790 -1.06249932
3 0.03454994 0.11384660
4 -0.06378002 -0.04329510
5 -0.97177003 -0.88722825
6 0.11854687 0.10780812
7 -2.87208217 -2.93069375
8 1.10283623 1.11822773
9 3.77265557 3.76858994
= glmnet(train$xL, train$yL, family = "gaussian",
enet.fit alpha = 0.3333, lambda = 0.03, intercept = F)
= predict(enet.fit, train$xL)
ypred print("glmnet error")
mse(ypred, train$yL)
= s2netR(train, s2Params(lambda1 = 0.01, lambda2 = 0.01))
obj = predict(obj, train$xL)
ypred print("s2net error")
mse(ypred, train$yL)
print("Coefficients")
data.frame(enet = as.matrix(enet.fit$beta), s2net = obj$beta)
[1] "glmnet error"
[1] 11.14839
[1] "s2net error"
[1] 11.16189
[1] "Coefficients"
s0 s2net
cylinders.L 0.00000000 0.02176857
cylinders.Q -1.12966519 -1.11081728
cylinders.C 0.03962925 0.08926029
cylinders^4 -0.06613103 -0.07240406
displacement -0.98765401 -1.05183911
horsepower 0.11712469 0.10903802
weight -2.84667192 -2.72983278
acceleration 1.09711179 1.07104828
year 3.76243231 3.70533071