Árboles de decisión y bosques aleatorios en lenguaje R
Árboles de decisión y bosques aleatorios en lenguaje R
Antes de resumir el árbol de decisión, resumamos la generación y selección de características, porque el árbol de decisión es un proceso de selección de características integradas. La selección y el algoritmo están integrados y no se requiere selección de funciones adicionales.
1. Generación de características:
La generación de características se refiere a las características de los datos que tienen los datos originales cuando se recopilan. Estas características de los datos están determinadas por los datos recopilados. en el producto Las características de los datos que deben recopilarse durante la finalización). Por supuesto, durante el preprocesamiento de los datos, también puede construir algunas características de datos nuevas sobre esta base. Cuantas más de estas características, mejor significa que las ha considerado. El problema más a fondo, específicamente esas variables. Si es útil o inútil depende del siguiente paso de selección de características.
2. Selección de características
La selección de características se refiere a eliminar variables de características con baja importancia en función de las características de datos originales y filtrar variables de características útiles. Lo más difícil aquí es descubrir qué características son más importantes. Esto requiere un análisis específico basado en problemas específicos. La selección de algunas variables puede verse intuitivamente, pero esta intuición no es necesariamente correcta. Los métodos de selección de funciones más utilizados incluyen principalmente: tipo de filtrado, tipo de empaquetado y tipo integrado.
Tipo de filtrado: significa que puede seleccionar variables de características según el tamaño de una determinada estadística, como coeficiente de correlación, valor p, valor R, etc.
Tipo de embalaje: significa eso en Seleccione el subconjunto de características óptimo de un conjunto de características. Es necesario hacer consideraciones específicas: ¿Qué algoritmo se debe utilizar para seleccionar? ¿Cuál es el criterio óptimo para la selección?
Los algoritmos más utilizados son la regresión por pasos, incluida la búsqueda hacia adelante, la eliminación hacia atrás y la búsqueda bidireccional.
Búsqueda hacia adelante: cada vez seleccione uno que pueda hacer que el modelo prediga o clasifique mejor Las variables de características entran y no salen hasta que el efecto de mejora del modelo ya no es obvio;
Eliminación hacia atrás: significa que eliminar una variable de característica del conjunto completo de características cada vez puede maximizar el efecto de predicción o clasificación. OK, no entre después de salir hasta que el efecto de mejora del modelo ya no sea obvio;
Búsqueda bidireccional: significa que eliminar una variable de característica o agregar una variable de característica cada vez puede mejorar el modelo. La mejor predicción o clasificación es que los que salgan no entrarán, y los que entren no saldrán hasta que el efecto de mejora del modelo ya no sea obvio;
Aquí hay varios criterios para la selección de variables características: valor p, Valor R, AIC (cuanto menor, mejor será el efecto), BIC (cuanto menor sea el efecto, mejor), entropía (cuanto menor sea el efecto, mejor)
Tipo integrado: debería ser principalmente un situación como un árbol de decisión, y la selección de variables de características se completa internamente en el algoritmo.
3. Árbol de decisión
Varios puntos clave en la toma de decisiones: 1. ¿Cómo tomar una decisión? (Es decir, cómo se bifurca el árbol) ------Entropía y ganancia de información ---¿Qué incluye esto es la selección de características? La variable de característica que contiene la mayor cantidad de información se clasificará en primer lugar. La profundidad del árbol final determina la cantidad de variables de característica.
Por supuesto, diferentes algoritmos utilizan diferentes estándares de medición, que incluyen: índice de ganancia de información, coeficiente de impureza de Gini
2. -----Por lo general, se poda después
3. ¿Cómo discretizar variables continuas? -----Selección de umbral
Entropía: se refiere al grado de mezcla (grado de confusión) de información. Cuanto mayor es la entropía 0-1, más información se mezcla en el conjunto, lo que significa. que esta vez el efecto de bifurcación no es bueno o hay muchos tipos diferentes de información mezclada
Ganancia de información: cuanto mayor sea la reducción del valor de entropía, mejor
Características del modelo de árbol de decisión : el modelo es fácil de interpretar; el espacio de almacenamiento es pequeño y se almacena en forma de árbol. El árbol de decisión es un clasificador débil y no se pueden clasificar completamente mediante votación mayoritaria.
4. Paquete R para implementar el árbol de decisiones
library(rpart)
library(rpart.plot)
## rpart. control Realice algunas configuraciones para el árbol
## xval es una validación cruzada de 10 veces
## minsplit es el número mínimo de nodos de rama, aquí significa mayor o igual a 20, entonces el nodo continuará dividiéndose; de lo contrario, deténgase
## minbucket: el número mínimo de muestras de nodos hoja
## max Depth: la profundidad del árbol p>
## cp significa parámetro de complejidad, que se refiere a un cierto La complejidad de cada punto, para cada paso dividido, el grado en que se debe mejorar la bondad de ajuste del modelo
ct <- rpart.control(xval=10, minsplit=20, cp=0.1)
p>## cifosis es el conjunto de datos que viene con el paquete rpart
## na.action: el método de procesamiento de datos faltantes. El valor predeterminado es eliminar las observaciones a las que les faltan variables dependientes y conservar aquellas a las que les faltan variables independientes.
## método: seleccione el método de división de variables correspondiente para el tipo de datos al final del árbol:
## Método continuo="anova", método discreto="clase" , método de tipo de conteo="poisson", método de análisis de supervivencia="exp"
## parms se utiliza para establecer tres parámetros: probabilidad previa, matriz de pérdidas, método de medición de pureza de clasificación (gini e información) p>
## costo es la matriz de pérdidas Durante la poda, el error ponderado del nodo hoja se compara con el error del nodo principal. Al considerar la matriz de pérdidas, ajuste de "reducir-error" a "reducir-. pérdida" ”
datos("Cifosis")
ajuste <- rpart(Cifosis~Edad + Número + Inicio,datos=cifosis, método="clase",control=ct, parms = list(prior = c(0.65,0.35), split = "information"));
## Hay dos formas de dibujar gráficos
## La primera:
par(mfrow=c(1,3));plot(fit); text(fit,use.n=T,all=T,cex=0.9)
# # Segunda especie, ésta será más bonita:
rpart.plot(fit, Branch=1, Branch.type=2, type=1, extra=102,
sombra .col ="gris", box.col="verde",
border.col="azul", split.col="rojo",
split.cex=1.2 , main ="Árbol de decisión de cifosis");
## El paquete rpart proporciona un método de poda para la poda de pérdida de complejidad. printcp le dirá cuál es el cp y el error relativo promedio después de dividir en cada capa
## El error estimado de la validación cruzada (columna "xerror") y el error estándar (columna "xstd"), error relativo promedio = xerror±xstd
printcp(fit )
## Determine el valor de cp a través del análisis anterior
## Llame al diagrama de correlación entre CP (parámetro de complejidad) y xerror. Un método es encontrar el xerror mínimo correspondiente. point
< El valor CP de p>#, y este valor CP determina el tamaño del árbol. Otro método es utilizar el método 1SE para encontrar el valor CP correspondiente al punto mínimo de xerror+SE.plotcp(fit)
##Utilice el siguiente método para podar:
## prune(fit, cp= fit$cptable,predict(a, iris )$class)
#Calcular tasa de error
E0<-(sum(z0)-sum(diag(z0)))/sum(z0)
barplot(a$importance)
b<-errorevol(a,iris)#Calcular la evolución global del error
plot(b$error,type="l",main = "Error de AdaBoost vs número de árboles") #Dibuja la evolución del error
a<-bagging(Species~.,data=iris)
z0<-table(iris,predict (a,iris)$class)
#Calcular tasa de error
E0<-(sum(z0)-sum(diag(z0)))/sum(z0) p>
barplot(a$importance)
b<-errorevol(a,iris)#Calcular la evolución global del error
plot(b$error,type="l ",main="Error de AdaBoost vs número de árboles") #Dibuja la evolución del error
#Validación cruzada de 5 veces
set.seed(1044) #Establece la semilla aleatoria
samp=c(sample(1:50,25),sample(51:100,25),sample(101:150,25)) #Realizar muestreo aleatorio
a = boosting(Species~.,data=iris,predict(a,iris,predict(a,iris[-samp,])$class)#Resultados del conjunto de pruebas
E0<-(sum(z0) - suma(diag(z0)))/suma(z0)
E1<-(suma(z0)-suma(diag(z0)))/suma(z1)
a =bagging(Especies~.,data=iris,predict(a,iris,predict(a,iris[-samp,])$class)#Resultados del conjunto de pruebas
E0<-(sum(z0 ) -sum(diag(z0)))/sum(z0)
E1<-(sum(z0)-sum(diag(z0)))/sum(z1)
Paquete R para implementar bosque aleatorio:
#Random Forest Law
biblioteca(randomForest)
biblioteca(extranjera)
datos( "iris ")
#Datos de muestreo
ind<-sample(2,nrow(iris),replace = TRUE,prob=c(0.7,0.3))
entrenamiento<-iris[ind==1,]
pruebas<-iris[ind==2,]
#Datos de entrenamiento
rf <- randomForest(Especies ~ ., data=traning, ntree=100, proximidad=TRUE)
#Prediction
table(predict(rf),traning$Species)
tabla(predecir(rf,pruebas),testi
ng$Species)
#Ver el efecto previsto
print(rf)
plot(rf)
#Ver la importancia
importancia(rf)
varImpPlot(rf)