Como controlar o custo da classificação incorreta em florestas aleatórias?

21

É possível controlar o custo da classificação incorreta no pacote R randomForest ?

No meu próprio trabalho, os falsos negativos (por exemplo, falta de erro de uma pessoa ter uma doença) são muito mais caros do que os falsos positivos. O pacote rpart permite que o usuário controle os custos de classificação incorreta especificando uma matriz de perda para ponderar classificações incorretas de maneira diferente. Existe algo semelhante para randomForest? Por exemplo, devo usar a classwtopção para controlar o critério Gini?

user5944
fonte

Respostas:

8

Na verdade, se não, criando manualmente o clone de RF fazendo o ensacamento dos rpartmodelos.

Alguma opção vem do fato de que a saída de RF é na verdade uma pontuação contínua, e não uma decisão clara, ou seja, a fração de árvores que votaram em alguma classe. Pode ser extraída predict(rf_model,type="prob")e usada para fazer, por exemplo, uma curva ROC que revelará um limiar melhor que 0,5 (que pode ser incorporado posteriormente no treinamento de RF com o cutoffparâmetro).

classwt A abordagem também parece válida, mas na prática não funciona muito bem - a transição entre previsão equilibrada e elenco trivial da mesma classe, independentemente dos atributos, tende a ser muito nítida para ser utilizável.


fonte
MBQ. Muito Obrigado. (i) Curva ROC: Nesse caso, não exijo a curva ROC, pois tenho meus próprios antecedentes sobre qual deve ser a ponderação de custos. (ii) classwt: Sim, descobri que, na prática, e de acordo com outros usuários, os resultados não são os esperados. (iii) cutoff: não sou claro sobre como utilizar cutoffneste caso e gostaria de receber mais conselhos.
user5944
3

Existem várias maneiras de incluir custos.
(1) A amostragem acima / abaixo de cada árvore ensacada (amostragem estratificada) é o método mais comum de introdução de custos. você desequilibra intencionalmente o conjunto de dados.
(2) Ponderação. Nunca funciona. Eu acho que isso é enfatizado na documentação. Alguns afirmam que você só precisa ponderar em todas as etapas, incluindo a divisão de Gini e votação final. Se vai funcionar, será uma implementação complicada.
(3) Função Metacost em Weka.
(4) Tratar uma floresta aleatória como classificador probabilístico e alterar o limiar. Eu gosto menos dessa opção. Provavelmente devido à minha falta de conhecimento, mas mesmo que o algoritmo possa gerar probabilidades, não faz sentido para mim tratá-las como se esse fosse um modelo probabilístico.

Mas tenho certeza de que existem abordagens adicionais.

Charles
fonte
3

É recomendável que, se a variável que você está tentando prever não for 50% class 1e 50% para class 2(como na maioria dos casos), ajuste o cutoffparâmetro para representar o real OOBem resumo.

Por exemplo,

randomForest(data=my_data, formula, ntree = 501, cutoff=c(.96,.04))

Nesse caso, a probabilidade de ter um valor de um class 1é .96enquanto tiver um valor de class 2é .04.

Caso contrário, as florestas aleatórias usam um limite de 0.5.

pablo_sci
fonte
1

Pode-se incorporar costMatrixno randomForestexplicitamente via parmsparâmetro:

library(randomForest)
costMatrix <- matrix(c(0,10,1,0), nrow=2)
mod_rf <- randomForest(outcome ~ ., data = train, ntree = 1000, parms = list(loss=costMatrix))
Sergey Bushmanov
fonte
0

Você pode incorporar sensibilidade de custo usando a sampsizefunção na randomForestembalagem.

model1=randomForest(DependentVariable~., data=my_data, sampsize=c(100,20))

Varie os números com (100,20)base nos dados que você possui e nas suposições / regras de negócios com as quais você está trabalhando.

É necessária uma abordagem de tentativa e erro para obter uma matriz de confusão que reflete os custos do erro de classificação. Veja as Previsões criminais de risco de Richard Berk : uma abordagem de aprendizado de máquina , p. 82

MH TING
fonte