s2nets2net 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
train = s2Data(auto_mpg$P1$xL, auto_mpg$P1$yL, preprocess = TRUE)To fit an OLS model, we will use the lm function (without intercept).
lm.fit = lm( y~ 0 + ., data = data.frame(train$xL, y = train$yL))To obtain the estimations from s2net we use
obj = s2netR(train, s2Params(0))
# We set all the hyper-parameters to 0We can compare the training objectives of both algorithms, as well as the estimations.
library(Metrics)
# Training error
ypred = predict.lm(lm.fit, data.frame(train$xL))
print("OLS error:")
mse(ypred, train$yL)
ypred = predict(obj, train$xL)
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)
lasso.fit = glmnet(train$xL, train$yL, family = "gaussian",
alpha = 1, lambda = 0.01, intercept = F)
ypred = predict(lasso.fit, train$xL)
print("Lasso error:")
mse(ypred, train$yL)
obj = s2netR(train, s2Params(lambda1 = 0.01))
ypred = predict(obj, train$xL)
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
enet.fit = glmnet(train$xL, train$yL, family = "gaussian",
alpha = 0.3333, lambda = 0.03, intercept = F)
ypred = predict(enet.fit, train$xL)
print("glmnet error")
mse(ypred, train$yL)
obj = s2netR(train, s2Params(lambda1 = 0.01, lambda2 = 0.01))
ypred = predict(obj, train$xL)
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