Ridge, Lasso, Árboles, SVM y GAM en R: Ejemplos Prácticos de Machine Learning

Matemáticas4,28 KB

Ridge y Lasso

x=model.matrix(y~.,datos)[,-1]
y=datos[,1]
grid=10^(seq(10,-2,length=100))# lambdas
ridge=glmnet(x,y,alpha=0,lambda=grid)# ridge: alpha=0, lasso: alpha=1
*coef(ridge)
predict(ridge,s=50,type="coefficients")# s = lambda
*RNGkind(sample.kind="Rounding")
set.seed(10)
entrenamiento=sample(1:50,25) # Suponer esto.
prueba=-entrenamiento
ridge1=glmnet(x[entrenamiento,],y[entrenamiento],alpha=0,lambda=grid)
pred.ridge=predict(ridge1,s=5,newx=x[prueba,])
yprueba=y[prueba]
MSE=mean((pred.ridge-yprueba)^2)

Lasso con validación cruzada

set.seed(10)
cv=cv.glmnet(x[entrenamiento,],y[entrenamiento],alpha=1)
lambdaop=cv$lambda.min
lassomod1=glmnet(x[entrenamiento,],y[entrenamiento],alpha=1,lambda=grid)
lassopred=predict(lassomod1,s=lambdaop,newx=x[prueba,])
lasso.predi=predict(lassomod1,s=lambdaop,newx=x[prueba,])

Regresión polinómica

*mod11=lm(y~poly(X4,3))# potencia 3 para X4
mod1_p4=lm(y~poly(X4,4))
Si el Pr(>F) es cercano a 0.05, es significativa; cualquiera se ajusta.
*anova(mod11,mod1_p4)

Splines

*X1=datos[,2]
library(splines)
mods=lm(y~bs(X1,knots=c(20,30,40)))# c() son los nodos
*pred=predict(mods,newdata=list(X1=6.5),se=F)# cuando X1 = 6.5

Árboles

RNGkind(sample.kind="Rounding")
set.seed(5)
*entrenamiento=sample(1:50,35)# 35 = 0.7 * 50
*tree.precio=tree(y~.,datos,subset=entrenamiento)
*summary(tree.precio)# variables que participan en la construcción
plot(tree.precio)# gráfica del árbol
text(tree.precio,pretty=0)
*vc_tree_precio=cv.tree(tree.precio)# poda con validación cruzada
# Se trabaja con los nodos mínimos
podado_tree_reg=prune.tree(tree.precio,best=2)
dat_prueba_precio=datos[-entrenamiento,]
precio_pred=predict(podado_tree_reg,dat_prueba_precio)
precio_real=dat_prueba_precio[,1]
MSE=mean((precio_pred-precio_real)^2)

Bagging y Random Forest

*library("randomForest")
set.seed(5)
bagging1=randomForest(y~.,datos,subset=entrenamiento,mtry=9,importance=TRUE)
predict_bagging=predict(bagging1,dat_prueba_precio)
MSE1=mean((predict_bagging-precio_real)^2)
*library(gbm)
set.seed(5)
randomf=randomForest(y~.,datos,subset=entrenamiento,mtry=6,importance=TRUE)
predict_randomf=predict(randomf,dat_prueba_precio)
MSE2=mean((predict_randomf-precio_real)^2)
importance(randomf)# importancia de cada variable

Boosting

*boosting=gbm(y~.,data=datos[entrenamiento,],distribution="gaussian",n.trees=5000,interaction.depth=4)
# gaussian para regresión, bernoulli para clasificación; n.trees = cantidad de árboles; interaction.depth = profundidad límite; shrinkage = valor de lambda

GAM

*gam=gam(y~s(x1,4)+s(x2,5)+x3,data=)# s() son splines; 4 y 5 grados de libertad
gam=gam(y~lo(x2,span=0.7)+s(x1,4)+x3,data=)# regresión local; span = lapso
gam=gam(I(y>250)~x1+s(x2,5)+x3,family=binomial,data=)# cuando y es binaria

SVM

*library(e1071)
svmfit=svm(y~.,data=dat,kernel="linear",cost=10,scale=T)
summary(svmfit)# si el costo disminuye se obtienen más soportes
*set.seed(5)# validación cruzada
tune.out=tune(svm,y~.,data=dat,kernel="linear",ranges=list(cost=c(0.001,0.01,0.1,1,5,10,100)))
summary(tune.out)
bestmod=tune.out$best.model
summary(bestmod)
*datpr=read.spss(file.choose(),T,to.data.frame=T)
ypred=predict(bestmod,datn)# datn es una nueva data
*table(ypred,datpr$y)# porcentaje global de clasificación

Descargar

PDF Word HTML