Re: [R-es] Fwd: weighted random forest

2021-01-23 Por tema Jose Luis Cañadas Reche
Hola. Si tienes una columna con los pesos. con tidyverse es sencillo
hacer la muestra usando


tam_muestra <- 1000

muestra <- df %>%
  sample_n(size = tam_muestra,
   replace = TRUE,
   weight = pesos)



El 22/1/21 a las 17:58, Manuel Mendoza escribió:
> Gracias Jesús, sí, haré remuestreos. Yo suelo usar una función que me pasó
> un colega:
>
> # A function to generate the equal number of samples (n) for different
> classes
>
> bsample <- function(data,cname,n) {
>   d <- data[-c(1:nrow(data)),]
>   u <- unique(data[,cname])
>   for (uu in u) {
> w <- which(data[,cname] == uu)
> if (length(w) >= n) {
>   s <- sample(w,n)
> } else {
>   s <- sample(w,n,replace=TRUE)
> }
> d <- rbind(d,data[s,])
>   }
>   d
> }
>
> # for your data:
> table(data$Clst)
> mean<-mean(table(data$Clst))
> data <- bsample(data,'Clst',mean) # this takes 100 records for each class
> in your dataset
> table(data$Clst)
>
> Por si le sirve a alguien, Clst sería la variable objetivo.
> En vez de  bsample(data,'Clst',mean) se puede, p.e.,  (data,'Clst', *2**mean)
>
>
> Manuel
>
> El vie, 22 ene 2021 a las 16:10, Jesús Para Fernández (<
> j.para.fernan...@hotmail.com>) escribió:
>
>> Has probado en usar en vez de algoritmos sensibles al coste, usar técnicas
>> de remuestreo? Hay un paquete de la UGR llamado imbalance que funciona muy
>> bien.
>>
>>
>> --
>> *De:* R-help-es  en nombre de Manuel
>> Mendoza 
>> *Enviado:* viernes, 22 de enero de 2021 11:43
>> *Para:* Lista R 
>> *Asunto:* [R-es] weighted random forest
>>
>> Buenos días, tengo una base de datos desequilibrados (unbalanced) en la que
>> las ausencias son 9 veces más abundantes que las presencias (*ratio *= 9).
>> Para árboles de clasificación utilizo una matriz de pérdidas
>> parms=list(loss=matrix(c(0,
>> FP,  *ratio  *,0)))o un vector de ponderación que le da 9 veces más peso a
>> las presencias. Como cabría esperar, la sensibilidad y sensitividad se
>> hacen parecidas. Pasan de ser
>> 89/39 a 79/76 y kappa sube de 0.24 a 0.30.
>>
>> El problema surge cuando intento hacer lo mismo con random forest, y
>> supongo que no lo estoy haciendo bien. Uso  RFfit <- randomForest(Dep ~. ,
>> classwt = c(1, *ratio * ), data=data). La sensibilidad y sensitividad se
>> quedan casi igual 90/40 y kappa también 0.25.
>>
>> Sé que se puede hacer con ranger, pero, por razones que no vienen al caso,
>> no me viene bien cambiar.
>>
>> Gracias, como siempre,
>> Manuel
>>
>> [[alternative HTML version deleted]]
>>
>> ___
>> R-help-es mailing list
>> R-help-es@r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>   [[alternative HTML version deleted]]
>
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


[R-es] Fwd: weighted random forest

2021-01-22 Por tema Manuel Mendoza
Gracias Jesús, sí, haré remuestreos. Yo suelo usar una función que me pasó
un colega:

# A function to generate the equal number of samples (n) for different
classes

bsample <- function(data,cname,n) {
  d <- data[-c(1:nrow(data)),]
  u <- unique(data[,cname])
  for (uu in u) {
w <- which(data[,cname] == uu)
if (length(w) >= n) {
  s <- sample(w,n)
} else {
  s <- sample(w,n,replace=TRUE)
}
d <- rbind(d,data[s,])
  }
  d
}

# for your data:
table(data$Clst)
mean<-mean(table(data$Clst))
data <- bsample(data,'Clst',mean) # this takes 100 records for each class
in your dataset
table(data$Clst)

Por si le sirve a alguien, Clst sería la variable objetivo.
En vez de  bsample(data,'Clst',mean) se puede, p.e.,  (data,'Clst', *2**mean)


Manuel

El vie, 22 ene 2021 a las 16:10, Jesús Para Fernández (<
j.para.fernan...@hotmail.com>) escribió:

> Has probado en usar en vez de algoritmos sensibles al coste, usar técnicas
> de remuestreo? Hay un paquete de la UGR llamado imbalance que funciona muy
> bien.
>
>
> --
> *De:* R-help-es  en nombre de Manuel
> Mendoza 
> *Enviado:* viernes, 22 de enero de 2021 11:43
> *Para:* Lista R 
> *Asunto:* [R-es] weighted random forest
>
> Buenos días, tengo una base de datos desequilibrados (unbalanced) en la que
> las ausencias son 9 veces más abundantes que las presencias (*ratio *= 9).
> Para árboles de clasificación utilizo una matriz de pérdidas
> parms=list(loss=matrix(c(0,
> FP,  *ratio  *,0)))o un vector de ponderación que le da 9 veces más peso a
> las presencias. Como cabría esperar, la sensibilidad y sensitividad se
> hacen parecidas. Pasan de ser
> 89/39 a 79/76 y kappa sube de 0.24 a 0.30.
>
> El problema surge cuando intento hacer lo mismo con random forest, y
> supongo que no lo estoy haciendo bien. Uso  RFfit <- randomForest(Dep ~. ,
> classwt = c(1, *ratio * ), data=data). La sensibilidad y sensitividad se
> quedan casi igual 90/40 y kappa también 0.25.
>
> Sé que se puede hacer con ranger, pero, por razones que no vienen al caso,
> no me viene bien cambiar.
>
> Gracias, como siempre,
> Manuel
>
> [[alternative HTML version deleted]]
>
> ___
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>

[[alternative HTML version deleted]]

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es