SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
Sesión 07. “Seguimos Tomando Decisiones…”
1480-Técnicas Estadísticas en Investigación de Mercados
Grado en Estadística empresarial
Profesor: Xavier Barber i Vallés
Departamento: Estadística, Matemáticas e Informática
ÁRBOLES Y BOSQUES
Diferencias entre
Árboles de Clasificación y de Regresión
DIFERENCIA 1:
Esto puede parecer un asunto trivial, ¡pues se sabe la diferencia!
Árboles de clasificación, como su nombre indica se utiliza para separar el
conjunto de datos en clases que pertenecen a la variable de respuesta. Por lo
general, la variable de respuesta tiene dos clases: Sí o No (1 ó 0). Por lo tanto
los árboles de clasificación se utilizan cuando la variable de respuesta o de
destino es categórica en la naturaleza.
Se necesitan árboles de regresión cuando la variable respuesta es numérica o
continua. Por ejemplo, el precio predicho de un bien de consumo. Por lo tanto
los árboles de regresión son aplicables para los problemas de predicción en
lugar de clasificación.
En cualquier caso, los predictores o variables independientes pueden ser
categóricas o numéricas. Es la variable de destino la que determina qué tipo
de árbol de decisión es necesario.
Diferencias entre
Árboles de Clasificación y de Regresión
DIFERENCIA 2:
En un árbol de clasificación estándar, la idea es dividir el conjunto de datos basado en
la homogeneidad de los datos. Digamos, por ejemplo, tenemos dos variables: la edad
y el peso que predicen si una persona va a registrarse para ser socio de un gimnasio o
no. En los datos de “calentamiento” se observó que el 90% de las personas que son
mayores de 40 años se ha registrado, dividimos los datos aquí y la edad se convierte
en un nodo superior del árbol. Casi podemos decir que esta separación ha hecho que
los datos de "90% de pureza". Medidas rigurosas de impurezas, basado en la
proporción de cálculo de los datos que pertenecen a una clase, tales como la entropía
o índice de Gini se utilizan para cuantificar la homogeneidad en los árboles de
clasificación.
En un árbol de regresión, la idea es la siguiente: dado que la variable de destino no
tiene clases, ajustar un modelo de regresión para la variable de destino con cada una
de las variables independientes. Luego, para cada variable independiente, los datos se
dividen en varios puntos de división. En cada punto de división, se eleva al cuadrado el
"error" entre el valor predicho y los valores reales de conseguir una "suma de errores
cuadrados (SSE)“ mínima.
RANDOM FOREST
Random forest, ¿qué son?
• Random Forest son un tipo de método de particionamiento recursivo
especialmente adecuado para pequeñas n y grandes p (pocos datos y
muchas variables).
• Se calculan subconjuntos de árboles de regresión al azar, es decir, se eligen
subconjuntos de X frente a la misma Y.
• De esta manera, los bosques aleatorios son capaces de examinar mejor la
contribución y el comportamiento que cada predictor tiene, aun cuando
por lo general se eclipsa el efecto de un predictor por sus competidores
más importantes en los modelos más simples.
• Por otra parte, los resultados de un conjunto de árboles de
clasificación/regresión se han demostrado mejores para producir
predicciones que los resultados de un solo árbol de clasificación.
¿Cómo funciona?
Random Forests
Leo Breiman and Adele Cutler
http://www.stat.berkeley.edu/~breiman/RandomForests/
Random Forests(tm) is a trademark of Leo Breiman and Adele Cutler and is licensed
exclusively to Salford Systems for the commercial release of the software.
Our trademarks also include RF(tm), RandomForests(tm), RandomForest(tm) and
Random Forest(tm)
¿cómo funciona?
library(randomforest)
– randomForest implements Breiman’s random
forest algorithm for classification and regression.
It can also be used in unsupervised mode for
assessing proximities among data points.
library (party):
– cforest: An implementation of the random forest
and bagging ensemble algorithms utilizing
conditional inference trees as base learners.
En marcha!!
> library(languageR)
> library(Design)
> library(Party)
### ajustando los parámetros del random forest.
> data.controls <- cforest_unbiased(ntree=1000, mtry=3)
## inicializando la semilla
> set.seed(47)
#### ajuste del RF
> data.cforest <- cforest(Resp ~ x + y + z…, data =
mydata, controls=data.controls)
#### obteniendo la “importancia” de cada variable”
data.cforest.varimp <- varimp(data.cforest, conditional TRUE)
> write.table(data.cforest.varimp, file="FILEPATH.txt")
> dotplot(sort(data.cforest.varimp))
#(Note: conditional variable importance will take a while and is fairly CPU-intensive,
#especially for data sets with many variables, observations, and levels to the
#variables. I would highly recommend running these calculations on a high-powered
#computer.)
Importancia de las variables
Contrastes para la VI
“Importancia” de las Variables
“Importancia” de las variable
“Importancia” de las variable
“Estadísticos” del bosque
C = concordancia (medida de 0 a 1).
Dxy= D de Sommers que mide la diferencia entre
la concondarcia y la discordancia.
Problemas de los “bosques”
• Si tus variables predictoras son de distintos tipos:
– Utiliza cforest (pkg:party) con la opción por defecto
controls=cforest_unbiased(); y varimp(obj).
En caso contrario se puede usar indistintamente el paquete
party con varimp(obj)o randomForest con VI
importance(obj, type=1) o el índice Gini
importance(obj, type=2); pero nunca olvides
poner scale=FALSE.
• Si tus variables predictoras están altamente
correlacionadas:
– cforest del paquete party.
REVISANDO CONCEPTOS
(Rellenar los huecos vosotros)
rpart
Este es el primer paquete de R para árboles de
clasificación y árboles de regresión. Tiene las
funciones de “cortar” y gráficos muy generales.
La salida del árbol es fácil de comparar con un
GLM o un GAM (Generalized Additove Models).
rpart
library(rpart)
#http://people.hbs.edu/mtoffel/datasets/rsei212/rsei212_chemical.txt
raw.orig < - read.csv(file="rsei212_chemical.txt", header=T, sep="t")
# Keep the dataset small and tidy
# The Dataverse: hdl:1902.1/21235
raw = subset(raw.orig, select=c("Metal","OTW","AirDecay","Koc"))
row.names(raw) = raw.orig$CASNumber
raw = na.omit(raw);
frmla = Metal ~ OTW + AirDecay + Koc
# Metal: Core Metal (CM); Metal (M); Non-Metal (NM); Core Non-Metal (CNM)
fit = rpart(frmla, method="class", data=raw)
printcp(fit) # display the results
plotcp(fit) # visualize cross-validation results
summary(fit) # detailed summary of splits
# plot tree
plot(fit, uniform=TRUE, main="Classification Tree for Chemicals")
text(fit, use.n=TRUE, all=TRUE, cex=.8)
# tabulate some of the data
table(subset(raw, Koc>=190.5)$Metal)
Basic Decision Tree
tree
tree
###############
# TREE package
library(tree)
tr = tree(frmla, data=raw)
summary(tr)
plot(tr); text(tr)
party
###############
# PARTY package
library(party)
(ct = ctree(frmla, data = raw))
plot(ct, main="Conditional Inference Tree")
#Table of prediction errors
table(predict(ct), raw$Metal)
# Estimated class probabilities
tr.pred = predict(ct, newdata=raw, type="prob")
maptree
###############
# MAPTREE
library(maptree)
library(cluster)
draw.tree( clip.rpart (rpart ( raw), best=7),
nodeinfo=TRUE, units="species",
cases="cells", digits=0)
a =agnes(raw[2:4], method="ward" )
names(a)
a$diss
b =kgs(a, a$diss, maxclust=20)
plot(names(b), b, xlab="# clusters", ylab="penalty", type="n")
xloc = names(b)[b==min(b)]
yloc = min(b)
ngon(c(xloc,yloc+.75,10, "dark green"), angle=180, n=3)
apply(cbind(names(b), b, 3, 'blue'), 1, ngon, 4) #
cbind(x,y,size,color)
evtree
library(evtree)
ev.raw = evtree(frmla, data=raw)
plot(ev.raw)
table(predict(ev.raw), raw$Metal)
1-mean(predict(ev.raw) == raw$Metal)
#Evolutionary Tree Learning
varSelRF
library(varSelRF)
x = matrix(rnorm(25 * 30), ncol = 30)
x[1:10, 1:2] = x[1:10, 1:2] + 2
cl = factor(c(rep("A", 10), rep("B", 15)))
rf.vs1 = varSelRF(x, cl, ntree = 200, ntreeIterat = 100,
vars.drop.frac = 0.2)
rf.vs1
plot(rf.vs1)
## Example of importance function show that forcing x1 to be the most
important
## while create secondary variables that is related to x1.
x1=rnorm(500)
x2=rnorm(500,x1,1)
y=runif(1,1,10)*x1+rnorm(500,0,.5)
my.df=data.frame(y,x1,x2,x3=rnorm(500),x4=rnorm(500),x5=rnorm(500))
rf1 = randomForest(y~., data=my.df, mtry=2, ntree=50, importance=TRUE)
importance(rf1)
cor(my.df)
randomForest
library(randomForest)
fit.rf = randomForest(frmla, data=raw)
print(fit.rf)
importance(fit.rf)
plot(fit.rf)
plot( importance(fit.rf), lty=2, pch=16)
lines(importance(fit.rf))
imp = importance(fit.rf)
impvar = rownames(imp)[order(imp[, 1], decreasing=TRUE)]
op = par(mfrow=c(1, 3))
for (i in seq_along(impvar)) {
partialPlot(fit.rf, raw, impvar[i], xlab=impvar[i],
main=paste("Partial Dependence on", impvar[i]),
ylim=c(0, 1))
}
>importance(rf1)
%IncMSE IncNodePurity
x1 30.30146 8657.963
x2 7.739163 3675.853
x3 0.586905 240.275
x4 -0.82209 381.6304
x5 0.583622 253.3885
Importance Graph
varSelRF
oblique.tree
aug.crabs.data=data.frame(g=factor(rep(1:4,each=50))
,predict(princomp(crabs[,4:8]))[,2:3])
plot(aug.crabs.data[,-1],type="n")
text( aug.crabs.data[,-1],
col=as.numeric(aug.crabs.data[,1]),
labels=as.numeric(aug.crabs.data[,1]))
ob.tree=oblique.tree(formula = g~., data =
aug.crabs.data,oblique.splits = "only")
plot(ob.tree);text(ob.tree)
CORElearn
##################
## CORElearn
library(CORElearn)
## Random Forests
fit.rand.forest = CoreModel(frmla, data=raw, model="rf",
selectionEstimator="MDL", minNodeWeightRF=5, rfNoTrees=100)
plot(fit.rand.forest)
## decision tree with naive Bayes in the leaves
fit.dt = CoreModel(frmla, raw, model="tree", modelType=4)
plot(fit.dt, raw)
airquality.sub = subset(airquality, !is.na(airquality$Ozone))
fit.rt = CoreModel(Ozone~., airquality.sub, model="regTree", modelTypeReg=1)
summary(fit.rt)
plot(fit.rt, airquality.sub, graphType="prototypes")
pred = predict(fit.rt, airquality.sub)
print(pred)
plot(pred)
longRPart
library(longRPart)
data(pbkphData)
pbkphData$Time=as.factor(pbkphData$Time)
long.tree =
longRPart(pbkph~Time,~age+gender,~1|Subject,pbkphDat
a,R=corExp(form=~time))
lrpTreePlot(long.tree, use.n=TRE,
place="bottomright")
longRTreeplot
REEMtree
library(REEMtree)
pbkphData.sub=subset(pbkphData,!is.na(pbkphData$pbkp
h))
reem.tree = REEMtree(pbkph~Time, data=pbkphData.sub,
random=~1|Subject)
plot(reem.tree)
ranef(reem.tree) #random effects
reem.tree = REEMtree(pbkph~Time, data=pbkphData.sub,
random=~1|Subject,correlation=corAR1())
plot(reem.tree)
•
DONACIONES MENSUALES
VÍA RANDOM FOREST
Selección Aleatoria del Árbol
Cargamos las librerías que vamos a utilizar y creamos el
objeto de los datos:
library(languageR) ## por si necesitamos algunas funcioens
library(design) ## por si queremos hacer ANOVAs a los modelos lineales
library(party) ## Importante…
library(BCA) ## los datos
library(rpart) ## Importante
library(rms) ## diagnostico de rpart
library(randomForest)## otra versión de random forest
library(ModelGood) ## ajustes del modelo logistico
### recuperamos los datos del CCS de la sesión anterior (paquete BCA-> CCS)
data(CCS, package="BCA")
#### Seccionamos la muestra para evitar problemas de overfitting
CCS$Sample <- create.samples(CCS, est = 0.34, val = 0.33, rand.seed = 1)
CCS$Sample<-factor(CCS$Sample)
¡Me estás “estresando”!
### ajustando los parámetros del random forest.
data.controls <- cforest_unbiased(ntree=10, mtry=3)
## inicializando la semilla
set.seed(47)
#### ajuste del RF
# [1] "Region" "YearsGive" "AveDonAmt" "LastDonAmt"
# [5] "DonPerYear" "NewDonor" "Age20t29" "Age20t39"
# [9] "Age60pls" "Age70pls" "Age80pls" "AdultAge"
#[13] "SomeUnivP" "FinUnivP" "hh1t2mem" "hh1mem"
#[17] "AveIncEA" "DwelValEA" "EngPrmLang" "Sample" <<--OJO!!!
#[21] "Log.AveDonAmt" "Log.DonPerYear" "Log.LastDonAmt" "Log.YearsGive"
#[25] "NewRegion"
CCS2<-data.frame(CCS[,-20])
### el bosque…..
data.cforest <- cforest(MonthGive ~ . ,data =CCS2[CCS$Sample=="Estimation”,]
, controls=data.controls)
#### obteniendo la “importancia” de cada variable”
data.cforest.varimp <- varimp(data.cforest, conditional=TRUE)
write.table(data.cforest.varimp, file="FILEPATH.txt")
dotplot(sort(data.cforest.varimp))
Importancia de las variables
dotplot(sort(data.cforest.varimp),
xlab="Variable Importance in DATAn
-predictors to right of dashed vertical line are
significant-",
panel = function(x,y){
panel.dotplot(x, y, col='darkblue', pch=16, cex=1.1)
panel.abline(v=abs(min(data.cforest.varimp)), col='red',
lty='longdash', lwd=2) } )
Los resultados
Variable Importance in DATA
−predictors to right of dashed vertical line are
significant−
YearsGive
SomeUnivP
hh1mem
FinUnivP
AveDonAmt
NewDonor
Age20t39
Age70pls
hh1t2mem
AveIncEA
Sample
Age80pls
AdultAge
DwelValEA
Region
Age20t29
Age60pls
LastDonAmt
DonPerYear
0.000 0.004 0.008
Probando con otras variables
## Hay que poner más "arboles y más variables"####
### ajustando los parámetros del random forest.
data.controls <- cforest_unbiased(ntree=1000, mtry=3)
## inicializando la semilla
set.seed(47)
### todas la variables o algunas?? dependerá de la capacidad de cálculo de nuestro ordenador
sele=c(1, 16:19,21:25)
data.cforest2 <- cforest(MonthGive ~ . ,
data=CCS2[CCS$Sample=="Estimation",sele] , controls=data.controls)
#### obteniendo la “importancia” de cada variable”
data.cforest.varimp2 <- varimp(data.cforest2, conditional=TRUE)
data.cforest.varimp2
La importancia de las variables
> data.cforest.varimp2
Region Log.YearsGive Log.AveDonAmt Log.LastDonAmt Log.DonPerYear
1e-03 5e-04 2e-03 0e+00 1e-03
NewDonor Age20t29 Age20t39 Age60pls Age70pls
0e+00 1e-03 1e-03 0e+00 1e-03
Age80pls AdultAge SomeUnivP FinUnivP hh1t2mem
-5e-04 -5e-04 5e-04 -1e-03 0e+00
La importancia de las Variables
La concordancia del Modelo
Una vez obtenida la importancia de las
variables, nos queda saber si el modelo va a ser
un buen modelo para predecir.
Para ello o bien realizamos el árbol de “decisión”
o “regresión”, o bien realizamos una regresión
logísitica sólo con las variables “importantes”.
La concordancia del Modelo
#################
##### o bien creamos un árbol con las variables:
##### log.AveDonamt+Log.LastDonamt+Log.YearGive
##### o bien generamos una regresión logistica
####con estas variables sólo:
treeFinal.lrm.model <- lrm(MonthGive~
Log.AveDonAmt+Log.DonPerYear + Age70pls + Age20t39
+ Age20t29+Region,
data=CCS2[CCS$Sample=="Estimation",])
treeFinal.lrm.model
Logistic Regression Model
lrm(formula = MonthGive ~ Log.AveDonAmt + Log.DonPerYear + Age70pls +
Age20t39 + Age20t29 + Region, data = CCS2[CCS$Sample == "Estimation",
])
Model Likelihood Discrimination Rank Discrim.
Ratio Test Indexes Indexes
Obs 544 LR chi2 118.71 R2 0.261 C 0.761
No 280 d.f. 10 g 1.240 Dxy 0.522
Yes 264 Pr(> chi2) <0.0001 gr 3.457 gamma 0.523
max |deriv| 3e-07 gp 0.258 tau-a 0.261
Brier 0.199
Coef S.E. Wald Z Pr(>|Z|)
Intercept -4.1284 0.6394 -6.46 <0.0001
Log.AveDonAmt 0.9957 0.1351 7.37 <0.0001
Log.DonPerYear 1.1230 0.3835 2.93 0.0034
Age70pls 0.8381 1.2445 0.67 0.5007
Age20t39 1.0080 2.6798 0.38 0.7068
Age20t29 0.6653 4.2080 0.16 0.8744
Region=R2 0.3757 0.2723 1.38 0.1676
Region=R3 0.2017 0.3043 0.66 0.5075
Region=R4 -0.4745 0.4354 -1.09 0.2757
Region=R5 -0.0358 0.3010 -0.12 0.9053
Region=R6 -0.6034 0.5692 -1.06 0.2891
Predicciones con mis Importantes
pred.lrm.treefinal <- predictStatusProb(treeFinal.lrm.model,
newdata=CCS2[CCS$Sample=="Validation",])
boxplot(pred.lrm.treefinal~CCS2$MonthGive[CCS$Sample=="Validation"])
abline(h = 0.5, col="red")
#### Clasifica bien???????
teim_sesion_007_14_15.pdf

Más contenido relacionado

Similar a teim_sesion_007_14_15.pdf

Introducción a Machine Learning
Introducción a Machine Learning   Introducción a Machine Learning
Introducción a Machine Learning Pablo Casas
 
Conceptos basicos de programacion
Conceptos basicos de programacionConceptos basicos de programacion
Conceptos basicos de programacionSamuelOjedaViveros
 
Manual de r commander
Manual de r commanderManual de r commander
Manual de r commanderLenin Medina
 
medidas de tendencia central estadistica descriptiva
medidas de tendencia central estadistica descriptivamedidas de tendencia central estadistica descriptiva
medidas de tendencia central estadistica descriptivaMayliElizabethValeri
 
Poggi analytics - ensamble - 1b
Poggi   analytics - ensamble - 1bPoggi   analytics - ensamble - 1b
Poggi analytics - ensamble - 1bGaston Liberman
 
ALP Unidad 2: Representación de la información en datos simples y estructuras...
ALP Unidad 2: Representación de la información en datos simples y estructuras...ALP Unidad 2: Representación de la información en datos simples y estructuras...
ALP Unidad 2: Representación de la información en datos simples y estructuras...Franklin Parrales Bravo
 
ÁRBOLES DE CLASIFICACIÓN
ÁRBOLES DE CLASIFICACIÓNÁRBOLES DE CLASIFICACIÓN
ÁRBOLES DE CLASIFICACIÓNRaquel Solano
 
Trabajo de tecnología..pdf
Trabajo de tecnología..pdfTrabajo de tecnología..pdf
Trabajo de tecnología..pdfLinaLpez31
 
Trabajo de tecnología..pdf
Trabajo de tecnología..pdfTrabajo de tecnología..pdf
Trabajo de tecnología..pdfleslyenio1
 
Trabajo de tecnología..pdf
Trabajo de tecnología..pdfTrabajo de tecnología..pdf
Trabajo de tecnología..pdfleslyenino
 
Trabajo de tecnología..pdf
Trabajo de tecnología..pdfTrabajo de tecnología..pdf
Trabajo de tecnología..pdfGABRIELASOLARTE1
 

Similar a teim_sesion_007_14_15.pdf (20)

Introducción a Machine Learning
Introducción a Machine Learning   Introducción a Machine Learning
Introducción a Machine Learning
 
Conceptos basicos de programacion
Conceptos basicos de programacionConceptos basicos de programacion
Conceptos basicos de programacion
 
Workshop Manipulacion de Datos con R
Workshop Manipulacion de Datos con RWorkshop Manipulacion de Datos con R
Workshop Manipulacion de Datos con R
 
Manual de r commander
Manual de r commanderManual de r commander
Manual de r commander
 
medidas de tendencia central estadistica descriptiva
medidas de tendencia central estadistica descriptivamedidas de tendencia central estadistica descriptiva
medidas de tendencia central estadistica descriptiva
 
Arreglos
ArreglosArreglos
Arreglos
 
ArbDec09.ppt
ArbDec09.pptArbDec09.ppt
ArbDec09.ppt
 
Trabajo de diagrama de arbol
Trabajo de diagrama de arbolTrabajo de diagrama de arbol
Trabajo de diagrama de arbol
 
Poggi analytics - ensamble - 1b
Poggi   analytics - ensamble - 1bPoggi   analytics - ensamble - 1b
Poggi analytics - ensamble - 1b
 
Estadistica Descriptiva
Estadistica DescriptivaEstadistica Descriptiva
Estadistica Descriptiva
 
Trabajo Final
Trabajo FinalTrabajo Final
Trabajo Final
 
ALP Unidad 2: Representación de la información en datos simples y estructuras...
ALP Unidad 2: Representación de la información en datos simples y estructuras...ALP Unidad 2: Representación de la información en datos simples y estructuras...
ALP Unidad 2: Representación de la información en datos simples y estructuras...
 
ÁRBOLES DE CLASIFICACIÓN
ÁRBOLES DE CLASIFICACIÓNÁRBOLES DE CLASIFICACIÓN
ÁRBOLES DE CLASIFICACIÓN
 
Trabajo de tecnología.pdf
Trabajo de tecnología.pdfTrabajo de tecnología.pdf
Trabajo de tecnología.pdf
 
Trabajo de tecnología..pdf
Trabajo de tecnología..pdfTrabajo de tecnología..pdf
Trabajo de tecnología..pdf
 
Trabajo de tecnología..pdf
Trabajo de tecnología..pdfTrabajo de tecnología..pdf
Trabajo de tecnología..pdf
 
Trabajo de tecnología..pdf
Trabajo de tecnología..pdfTrabajo de tecnología..pdf
Trabajo de tecnología..pdf
 
Trabajo de tecnología..pdf
Trabajo de tecnología..pdfTrabajo de tecnología..pdf
Trabajo de tecnología..pdf
 
Trabajo de tecnología..pdf
Trabajo de tecnología..pdfTrabajo de tecnología..pdf
Trabajo de tecnología..pdf
 
Pasw Antes Spss
Pasw Antes SpssPasw Antes Spss
Pasw Antes Spss
 

Último

la historia de nissan skyline y su evolucion
la historia de nissan skyline y su evolucionla historia de nissan skyline y su evolucion
la historia de nissan skyline y su evolucionemanuelrosalezsanche
 
Manual de Camioneta Toyota doble traccion 20023
Manual de Camioneta Toyota doble traccion 20023Manual de Camioneta Toyota doble traccion 20023
Manual de Camioneta Toyota doble traccion 20023danyercatari1
 
Ergonomía en Oficinas- Ergonomía en Oficina.pptx
Ergonomía en Oficinas- Ergonomía en Oficina.pptxErgonomía en Oficinas- Ergonomía en Oficina.pptx
Ergonomía en Oficinas- Ergonomía en Oficina.pptxmolinabdiego93
 
PIAnGIMNACIA___19655c35a563e33___ 2.pdfh
PIAnGIMNACIA___19655c35a563e33___ 2.pdfhPIAnGIMNACIA___19655c35a563e33___ 2.pdfh
PIAnGIMNACIA___19655c35a563e33___ 2.pdfhjonathancallenteg
 
lollllllllllllllllllllllllllllllllllllllllllllllll
lolllllllllllllllllllllllllllllllllllllllllllllllllollllllllllllllllllllllllllllllllllllllllllllllll
lollllllllllllllllllllllllllllllllllllllllllllllllJesusFlores332
 
Inyección electrónica, Diagnostico por imagenes.pdf
Inyección electrónica, Diagnostico por imagenes.pdfInyección electrónica, Diagnostico por imagenes.pdf
Inyección electrónica, Diagnostico por imagenes.pdfmiltonantonioescamil
 

Último (6)

la historia de nissan skyline y su evolucion
la historia de nissan skyline y su evolucionla historia de nissan skyline y su evolucion
la historia de nissan skyline y su evolucion
 
Manual de Camioneta Toyota doble traccion 20023
Manual de Camioneta Toyota doble traccion 20023Manual de Camioneta Toyota doble traccion 20023
Manual de Camioneta Toyota doble traccion 20023
 
Ergonomía en Oficinas- Ergonomía en Oficina.pptx
Ergonomía en Oficinas- Ergonomía en Oficina.pptxErgonomía en Oficinas- Ergonomía en Oficina.pptx
Ergonomía en Oficinas- Ergonomía en Oficina.pptx
 
PIAnGIMNACIA___19655c35a563e33___ 2.pdfh
PIAnGIMNACIA___19655c35a563e33___ 2.pdfhPIAnGIMNACIA___19655c35a563e33___ 2.pdfh
PIAnGIMNACIA___19655c35a563e33___ 2.pdfh
 
lollllllllllllllllllllllllllllllllllllllllllllllll
lolllllllllllllllllllllllllllllllllllllllllllllllllollllllllllllllllllllllllllllllllllllllllllllllll
lollllllllllllllllllllllllllllllllllllllllllllllll
 
Inyección electrónica, Diagnostico por imagenes.pdf
Inyección electrónica, Diagnostico por imagenes.pdfInyección electrónica, Diagnostico por imagenes.pdf
Inyección electrónica, Diagnostico por imagenes.pdf
 

teim_sesion_007_14_15.pdf

  • 1. Sesión 07. “Seguimos Tomando Decisiones…” 1480-Técnicas Estadísticas en Investigación de Mercados Grado en Estadística empresarial Profesor: Xavier Barber i Vallés Departamento: Estadística, Matemáticas e Informática
  • 3. Diferencias entre Árboles de Clasificación y de Regresión DIFERENCIA 1: Esto puede parecer un asunto trivial, ¡pues se sabe la diferencia! Árboles de clasificación, como su nombre indica se utiliza para separar el conjunto de datos en clases que pertenecen a la variable de respuesta. Por lo general, la variable de respuesta tiene dos clases: Sí o No (1 ó 0). Por lo tanto los árboles de clasificación se utilizan cuando la variable de respuesta o de destino es categórica en la naturaleza. Se necesitan árboles de regresión cuando la variable respuesta es numérica o continua. Por ejemplo, el precio predicho de un bien de consumo. Por lo tanto los árboles de regresión son aplicables para los problemas de predicción en lugar de clasificación. En cualquier caso, los predictores o variables independientes pueden ser categóricas o numéricas. Es la variable de destino la que determina qué tipo de árbol de decisión es necesario.
  • 4. Diferencias entre Árboles de Clasificación y de Regresión DIFERENCIA 2: En un árbol de clasificación estándar, la idea es dividir el conjunto de datos basado en la homogeneidad de los datos. Digamos, por ejemplo, tenemos dos variables: la edad y el peso que predicen si una persona va a registrarse para ser socio de un gimnasio o no. En los datos de “calentamiento” se observó que el 90% de las personas que son mayores de 40 años se ha registrado, dividimos los datos aquí y la edad se convierte en un nodo superior del árbol. Casi podemos decir que esta separación ha hecho que los datos de "90% de pureza". Medidas rigurosas de impurezas, basado en la proporción de cálculo de los datos que pertenecen a una clase, tales como la entropía o índice de Gini se utilizan para cuantificar la homogeneidad en los árboles de clasificación. En un árbol de regresión, la idea es la siguiente: dado que la variable de destino no tiene clases, ajustar un modelo de regresión para la variable de destino con cada una de las variables independientes. Luego, para cada variable independiente, los datos se dividen en varios puntos de división. En cada punto de división, se eleva al cuadrado el "error" entre el valor predicho y los valores reales de conseguir una "suma de errores cuadrados (SSE)“ mínima.
  • 6. Random forest, ¿qué son? • Random Forest son un tipo de método de particionamiento recursivo especialmente adecuado para pequeñas n y grandes p (pocos datos y muchas variables). • Se calculan subconjuntos de árboles de regresión al azar, es decir, se eligen subconjuntos de X frente a la misma Y. • De esta manera, los bosques aleatorios son capaces de examinar mejor la contribución y el comportamiento que cada predictor tiene, aun cuando por lo general se eclipsa el efecto de un predictor por sus competidores más importantes en los modelos más simples. • Por otra parte, los resultados de un conjunto de árboles de clasificación/regresión se han demostrado mejores para producir predicciones que los resultados de un solo árbol de clasificación.
  • 8. Random Forests Leo Breiman and Adele Cutler http://www.stat.berkeley.edu/~breiman/RandomForests/ Random Forests(tm) is a trademark of Leo Breiman and Adele Cutler and is licensed exclusively to Salford Systems for the commercial release of the software. Our trademarks also include RF(tm), RandomForests(tm), RandomForest(tm) and Random Forest(tm)
  • 9. ¿cómo funciona? library(randomforest) – randomForest implements Breiman’s random forest algorithm for classification and regression. It can also be used in unsupervised mode for assessing proximities among data points. library (party): – cforest: An implementation of the random forest and bagging ensemble algorithms utilizing conditional inference trees as base learners.
  • 10. En marcha!! > library(languageR) > library(Design) > library(Party) ### ajustando los parámetros del random forest. > data.controls <- cforest_unbiased(ntree=1000, mtry=3) ## inicializando la semilla > set.seed(47) #### ajuste del RF > data.cforest <- cforest(Resp ~ x + y + z…, data = mydata, controls=data.controls) #### obteniendo la “importancia” de cada variable” data.cforest.varimp <- varimp(data.cforest, conditional TRUE) > write.table(data.cforest.varimp, file="FILEPATH.txt") > dotplot(sort(data.cforest.varimp)) #(Note: conditional variable importance will take a while and is fairly CPU-intensive, #especially for data sets with many variables, observations, and levels to the #variables. I would highly recommend running these calculations on a high-powered #computer.)
  • 11. Importancia de las variables
  • 16. “Estadísticos” del bosque C = concordancia (medida de 0 a 1). Dxy= D de Sommers que mide la diferencia entre la concondarcia y la discordancia.
  • 17. Problemas de los “bosques” • Si tus variables predictoras son de distintos tipos: – Utiliza cforest (pkg:party) con la opción por defecto controls=cforest_unbiased(); y varimp(obj). En caso contrario se puede usar indistintamente el paquete party con varimp(obj)o randomForest con VI importance(obj, type=1) o el índice Gini importance(obj, type=2); pero nunca olvides poner scale=FALSE. • Si tus variables predictoras están altamente correlacionadas: – cforest del paquete party.
  • 19. rpart Este es el primer paquete de R para árboles de clasificación y árboles de regresión. Tiene las funciones de “cortar” y gráficos muy generales. La salida del árbol es fácil de comparar con un GLM o un GAM (Generalized Additove Models).
  • 20. rpart library(rpart) #http://people.hbs.edu/mtoffel/datasets/rsei212/rsei212_chemical.txt raw.orig < - read.csv(file="rsei212_chemical.txt", header=T, sep="t") # Keep the dataset small and tidy # The Dataverse: hdl:1902.1/21235 raw = subset(raw.orig, select=c("Metal","OTW","AirDecay","Koc")) row.names(raw) = raw.orig$CASNumber raw = na.omit(raw); frmla = Metal ~ OTW + AirDecay + Koc # Metal: Core Metal (CM); Metal (M); Non-Metal (NM); Core Non-Metal (CNM) fit = rpart(frmla, method="class", data=raw) printcp(fit) # display the results plotcp(fit) # visualize cross-validation results summary(fit) # detailed summary of splits # plot tree plot(fit, uniform=TRUE, main="Classification Tree for Chemicals") text(fit, use.n=TRUE, all=TRUE, cex=.8) # tabulate some of the data table(subset(raw, Koc>=190.5)$Metal) Basic Decision Tree tree
  • 21.
  • 22. tree ############### # TREE package library(tree) tr = tree(frmla, data=raw) summary(tr) plot(tr); text(tr)
  • 23.
  • 24. party ############### # PARTY package library(party) (ct = ctree(frmla, data = raw)) plot(ct, main="Conditional Inference Tree") #Table of prediction errors table(predict(ct), raw$Metal) # Estimated class probabilities tr.pred = predict(ct, newdata=raw, type="prob")
  • 25.
  • 26. maptree ############### # MAPTREE library(maptree) library(cluster) draw.tree( clip.rpart (rpart ( raw), best=7), nodeinfo=TRUE, units="species", cases="cells", digits=0) a =agnes(raw[2:4], method="ward" ) names(a) a$diss b =kgs(a, a$diss, maxclust=20) plot(names(b), b, xlab="# clusters", ylab="penalty", type="n") xloc = names(b)[b==min(b)] yloc = min(b) ngon(c(xloc,yloc+.75,10, "dark green"), angle=180, n=3) apply(cbind(names(b), b, 3, 'blue'), 1, ngon, 4) # cbind(x,y,size,color)
  • 27.
  • 28. evtree library(evtree) ev.raw = evtree(frmla, data=raw) plot(ev.raw) table(predict(ev.raw), raw$Metal) 1-mean(predict(ev.raw) == raw$Metal) #Evolutionary Tree Learning
  • 29.
  • 30. varSelRF library(varSelRF) x = matrix(rnorm(25 * 30), ncol = 30) x[1:10, 1:2] = x[1:10, 1:2] + 2 cl = factor(c(rep("A", 10), rep("B", 15))) rf.vs1 = varSelRF(x, cl, ntree = 200, ntreeIterat = 100, vars.drop.frac = 0.2) rf.vs1 plot(rf.vs1) ## Example of importance function show that forcing x1 to be the most important ## while create secondary variables that is related to x1. x1=rnorm(500) x2=rnorm(500,x1,1) y=runif(1,1,10)*x1+rnorm(500,0,.5) my.df=data.frame(y,x1,x2,x3=rnorm(500),x4=rnorm(500),x5=rnorm(500)) rf1 = randomForest(y~., data=my.df, mtry=2, ntree=50, importance=TRUE) importance(rf1) cor(my.df)
  • 31. randomForest library(randomForest) fit.rf = randomForest(frmla, data=raw) print(fit.rf) importance(fit.rf) plot(fit.rf) plot( importance(fit.rf), lty=2, pch=16) lines(importance(fit.rf)) imp = importance(fit.rf) impvar = rownames(imp)[order(imp[, 1], decreasing=TRUE)] op = par(mfrow=c(1, 3)) for (i in seq_along(impvar)) { partialPlot(fit.rf, raw, impvar[i], xlab=impvar[i], main=paste("Partial Dependence on", impvar[i]), ylim=c(0, 1)) } >importance(rf1) %IncMSE IncNodePurity x1 30.30146 8657.963 x2 7.739163 3675.853 x3 0.586905 240.275 x4 -0.82209 381.6304 x5 0.583622 253.3885 Importance Graph varSelRF
  • 32.
  • 34.
  • 35. CORElearn ################## ## CORElearn library(CORElearn) ## Random Forests fit.rand.forest = CoreModel(frmla, data=raw, model="rf", selectionEstimator="MDL", minNodeWeightRF=5, rfNoTrees=100) plot(fit.rand.forest) ## decision tree with naive Bayes in the leaves fit.dt = CoreModel(frmla, raw, model="tree", modelType=4) plot(fit.dt, raw) airquality.sub = subset(airquality, !is.na(airquality$Ozone)) fit.rt = CoreModel(Ozone~., airquality.sub, model="regTree", modelTypeReg=1) summary(fit.rt) plot(fit.rt, airquality.sub, graphType="prototypes") pred = predict(fit.rt, airquality.sub) print(pred) plot(pred)
  • 36.
  • 38.
  • 39. REEMtree library(REEMtree) pbkphData.sub=subset(pbkphData,!is.na(pbkphData$pbkp h)) reem.tree = REEMtree(pbkph~Time, data=pbkphData.sub, random=~1|Subject) plot(reem.tree) ranef(reem.tree) #random effects reem.tree = REEMtree(pbkph~Time, data=pbkphData.sub, random=~1|Subject,correlation=corAR1()) plot(reem.tree) •
  • 40.
  • 42. Selección Aleatoria del Árbol Cargamos las librerías que vamos a utilizar y creamos el objeto de los datos: library(languageR) ## por si necesitamos algunas funcioens library(design) ## por si queremos hacer ANOVAs a los modelos lineales library(party) ## Importante… library(BCA) ## los datos library(rpart) ## Importante library(rms) ## diagnostico de rpart library(randomForest)## otra versión de random forest library(ModelGood) ## ajustes del modelo logistico ### recuperamos los datos del CCS de la sesión anterior (paquete BCA-> CCS) data(CCS, package="BCA") #### Seccionamos la muestra para evitar problemas de overfitting CCS$Sample <- create.samples(CCS, est = 0.34, val = 0.33, rand.seed = 1) CCS$Sample<-factor(CCS$Sample)
  • 43. ¡Me estás “estresando”! ### ajustando los parámetros del random forest. data.controls <- cforest_unbiased(ntree=10, mtry=3) ## inicializando la semilla set.seed(47) #### ajuste del RF # [1] "Region" "YearsGive" "AveDonAmt" "LastDonAmt" # [5] "DonPerYear" "NewDonor" "Age20t29" "Age20t39" # [9] "Age60pls" "Age70pls" "Age80pls" "AdultAge" #[13] "SomeUnivP" "FinUnivP" "hh1t2mem" "hh1mem" #[17] "AveIncEA" "DwelValEA" "EngPrmLang" "Sample" <<--OJO!!! #[21] "Log.AveDonAmt" "Log.DonPerYear" "Log.LastDonAmt" "Log.YearsGive" #[25] "NewRegion" CCS2<-data.frame(CCS[,-20]) ### el bosque….. data.cforest <- cforest(MonthGive ~ . ,data =CCS2[CCS$Sample=="Estimation”,] , controls=data.controls) #### obteniendo la “importancia” de cada variable” data.cforest.varimp <- varimp(data.cforest, conditional=TRUE) write.table(data.cforest.varimp, file="FILEPATH.txt") dotplot(sort(data.cforest.varimp))
  • 44. Importancia de las variables dotplot(sort(data.cforest.varimp), xlab="Variable Importance in DATAn -predictors to right of dashed vertical line are significant-", panel = function(x,y){ panel.dotplot(x, y, col='darkblue', pch=16, cex=1.1) panel.abline(v=abs(min(data.cforest.varimp)), col='red', lty='longdash', lwd=2) } )
  • 45. Los resultados Variable Importance in DATA −predictors to right of dashed vertical line are significant− YearsGive SomeUnivP hh1mem FinUnivP AveDonAmt NewDonor Age20t39 Age70pls hh1t2mem AveIncEA Sample Age80pls AdultAge DwelValEA Region Age20t29 Age60pls LastDonAmt DonPerYear 0.000 0.004 0.008
  • 46. Probando con otras variables ## Hay que poner más "arboles y más variables"#### ### ajustando los parámetros del random forest. data.controls <- cforest_unbiased(ntree=1000, mtry=3) ## inicializando la semilla set.seed(47) ### todas la variables o algunas?? dependerá de la capacidad de cálculo de nuestro ordenador sele=c(1, 16:19,21:25) data.cforest2 <- cforest(MonthGive ~ . , data=CCS2[CCS$Sample=="Estimation",sele] , controls=data.controls) #### obteniendo la “importancia” de cada variable” data.cforest.varimp2 <- varimp(data.cforest2, conditional=TRUE) data.cforest.varimp2
  • 47. La importancia de las variables > data.cforest.varimp2 Region Log.YearsGive Log.AveDonAmt Log.LastDonAmt Log.DonPerYear 1e-03 5e-04 2e-03 0e+00 1e-03 NewDonor Age20t29 Age20t39 Age60pls Age70pls 0e+00 1e-03 1e-03 0e+00 1e-03 Age80pls AdultAge SomeUnivP FinUnivP hh1t2mem -5e-04 -5e-04 5e-04 -1e-03 0e+00
  • 48. La importancia de las Variables
  • 49.
  • 50. La concordancia del Modelo Una vez obtenida la importancia de las variables, nos queda saber si el modelo va a ser un buen modelo para predecir. Para ello o bien realizamos el árbol de “decisión” o “regresión”, o bien realizamos una regresión logísitica sólo con las variables “importantes”.
  • 51. La concordancia del Modelo ################# ##### o bien creamos un árbol con las variables: ##### log.AveDonamt+Log.LastDonamt+Log.YearGive ##### o bien generamos una regresión logistica ####con estas variables sólo: treeFinal.lrm.model <- lrm(MonthGive~ Log.AveDonAmt+Log.DonPerYear + Age70pls + Age20t39 + Age20t29+Region, data=CCS2[CCS$Sample=="Estimation",])
  • 52. treeFinal.lrm.model Logistic Regression Model lrm(formula = MonthGive ~ Log.AveDonAmt + Log.DonPerYear + Age70pls + Age20t39 + Age20t29 + Region, data = CCS2[CCS$Sample == "Estimation", ]) Model Likelihood Discrimination Rank Discrim. Ratio Test Indexes Indexes Obs 544 LR chi2 118.71 R2 0.261 C 0.761 No 280 d.f. 10 g 1.240 Dxy 0.522 Yes 264 Pr(> chi2) <0.0001 gr 3.457 gamma 0.523 max |deriv| 3e-07 gp 0.258 tau-a 0.261 Brier 0.199 Coef S.E. Wald Z Pr(>|Z|) Intercept -4.1284 0.6394 -6.46 <0.0001 Log.AveDonAmt 0.9957 0.1351 7.37 <0.0001 Log.DonPerYear 1.1230 0.3835 2.93 0.0034 Age70pls 0.8381 1.2445 0.67 0.5007 Age20t39 1.0080 2.6798 0.38 0.7068 Age20t29 0.6653 4.2080 0.16 0.8744 Region=R2 0.3757 0.2723 1.38 0.1676 Region=R3 0.2017 0.3043 0.66 0.5075 Region=R4 -0.4745 0.4354 -1.09 0.2757 Region=R5 -0.0358 0.3010 -0.12 0.9053 Region=R6 -0.6034 0.5692 -1.06 0.2891
  • 53. Predicciones con mis Importantes pred.lrm.treefinal <- predictStatusProb(treeFinal.lrm.model, newdata=CCS2[CCS$Sample=="Validation",]) boxplot(pred.lrm.treefinal~CCS2$MonthGive[CCS$Sample=="Validation"]) abline(h = 0.5, col="red") #### Clasifica bien???????