Minha pergunta é sobre classificação binária, por exemplo, separar bons clientes de clientes ruins, mas não regressão ou classificação não-binária. Nesse contexto, uma floresta aleatória é um conjunto de árvores de classificação. Para cada observação, toda árvore vota um "sim" ou "não", e o voto médio de todas as árvores é a probabilidade final da floresta.
Minha pergunta é sobre a modificação do comportamento das árvores subjacentes: Como podemos modificar a função randomForest (do pacote randomForest de R) para que cada árvore vote um decimal em vez de um sim / não binário. Para entender melhor o que quero dizer com decimal, vamos pensar sobre como as árvores de decisão funcionam.
Uma árvore de decisão totalmente desenvolvida possui 1 instância boa ou 1 incorreta em seus nós terminais. Suponha que eu limite o tamanho do nó do terminal como 100. Em seguida, os nós do terminal terão a seguinte aparência:
Nó1 = 80 ruim, 20 bom
Nó2 = 51 ruim, 49 bom
Nó3 = 10 ruim, 90 bom
Observe que, embora o Nó1 e o Nó2 votem "ruim", sua "força da maldade" é severamente diferente. É disso que eu estou depois. Em vez de fazê-los produzir 1 ou 0 (qual é o comportamento padrão), pode-se modificar o pacote R para votar 80/100, 51/100, 10/100 etc?
fonte
Respostas:
Este é um ponto sutil que varia de software para software. Existem dois métodos principais que eu conheço:
randomForest
funciona no R, mesmo ao usarpredict(..., type="prob")
sklearn.ensemble.RandomForestClassifier.predict_proba
funciona. Em outra resposta, @ usεr11852 aponta que oranger
pacote de R também fornece essa funcionalidade. Felizmente, posso atestar que, devido ao meu uso limitado,ranger
também é muito, muito mais rápido querandomForest
.Não acho que exista uma maneira fácil
randomForest
de usar o método da folha proporcional, já que o software R é na verdade apenas um gancho para um programa C & FORTRAN. A menos que você goste de modificar o código de outra pessoa, precisará criar seu próprio código ou encontrar outra implementação de software.fonte
randomForest
pode ser modificado para acompanhar isso?randomForest
é apenas uma interface R no código FORTRAN, portanto, pode levar recursos consideráveis para ser realizado.É perfeitamente possível cultivar uma "floresta de probabilidade". A metodologia de Malley et al. (2012) " Máquinas de probabilidade: estimativa consistente de probabilidade usando máquinas de aprendizagem não paramétricas ", que descreve como isso é feito e como ele se compara à implementação padrão de floresta aleatória. Além disso, o excelente guarda florestal de pacotes R já implementa essa funcionalidade; basta definir
probability = TRUE
ao fazer a chamada de função pararanger
.fonte
Basta usar
predict.randomForest(..., type="prob")
. Você está fazendo uma coisa boa .fonte
predict.all
osnorm.votes
parâmetros e, isso não parece ser possível. Se você realmente deseja isso, provavelmente precisará codificar sua própria floresta aleatória. Concordo com a @psarka que isso faz todo o sentido. (Eu excluir esta resposta, mas então poderíamos perder esta discussão nos comentários.)