Como executar a classificação Random Forest não supervisionada usando o código de Breiman?

8

Estou trabalhando com o código de floresta aleatória de Breiman ( http://stat-www.berkeley.edu/users/breiman/RandomForests/cc_manual.htm#c2 ) para classificação de dados de satélite (aprendizado supervisionado). Estou usando um conjunto de dados de treinamento e teste com tamanho de amostra de 2000 e tamanho variável 10. Os dados são classificados em duas classes, A e B. No modo de aprendizado supervisionado, o algoritmo está executando bem com erro de classificação muito baixo (<2%) . Agora, quero tentar a classificação não supervisionada sem rótulos de classe no conjunto de dados de teste e ver como o algoritmo é capaz de prever as classes. Existe uma maneira de implementar a classificação não supervisionada usando o código de Breiman? O erro desse método será maior que a classificação supervisionada? A configuração de dados e parâmetros de execução no algoritmo é fornecida abaixo

DESCRIÇÃO DOS DADOS 1 mdim = 10, ntrain = 2000, nclass = 2, maxcat = 1, 1 ntest = 2000, labelts = 1, labeltr = 1,

SET PARAMETERS DE EXECUÇÃO 2 mtry0 = 3, ndsize = 1, jbt = 500, look = 100, lookcls = 1, 2 jclasswt = 0, mdim2nd = 0, mselect = 0,

Bijoy
fonte
1
Você pode elaborar mais? Se você quiser prever as classes, precisará usar a classificação supervisionada.
Simone
Digamos que eu tenho dois conjuntos de dados com o mesmo número de variáveis ​​e amostras. o primeiro conjunto de dados contém as informações da classe (A e B) enquanto o segundo conjunto de dados não possui nenhuma informação da classe. Usando o código RF, o primeiro conjunto de dados foi classificado nas duas classes com uma precisão muito boa. Os parâmetros de execução fornecidos acima são para essa classificação específica em que as informações da classe são necessárias no conjunto de dados. Agora, minha pergunta é como classificar o segundo conjunto de dados em duas classes?
Bijoy

Respostas:

3

Como seu modelo exibe boa precisão, você pode apenas usá-lo para prever os rótulos de classe dos registros no conjunto de dados não rotulado. No entanto, você não pode avaliar os desempenhos em dados não rotulados.

Tenha cuidado para avaliar a qualidade do seu modelo nos dados rotulados por validação cruzada. Não é suficiente verificar a taxa de erro do treinamento.

Se o seu modelo não for preciso o suficiente, você pode pensar em aprendizado semi-supervisionado . Os dados não rotulados são usados ​​para melhorar a qualidade do seu modelo via aprendizado indutivo. A precisão deve sempre ser calculada pela validação cruzada nos dados rotulados.

Veja [Crimisini et al. Florestas de decisão: uma estrutura unificada para classificação, regressão, estimativa de densidade, aprendizado múltiplo e aprendizado semi-supervisionado] Capítulo 7 sobre aprendizado semi-supervisionado e 7.4 sobre indução com aprendizado semi-supervisionado.

Simone
fonte
Obrigado Simone pelos comentários ... Como você mencionou em seus comentários, meu objetivo é prever as etiquetas de classe dos registros no conjunto de dados não rotulado usando RF. No entanto, gostaria de saber se isso é possível usando o código RF de Brieman e Cutler .. ??
quer
Eu não estou tão familiarizado com esse código. Também pode estar um pouco desatualizado. Experimente o WEKA ou R, eles fornecem implementações florestais aleatórias recentes.
Simone
9

Duvido que a supervisão não funcione melhor, mas poderia ser um exercício interessante de experimentar. O aprendizado não supervisionado com floresta aleatória é feito através da construção de uma distribuição conjunta com base em suas variáveis ​​independentes que descrevem aproximadamente seus dados. Em seguida, simule um certo número de observações usando essa distribuição. Por exemplo, se você tiver 1000 observações, poderá simular mais 1000. Então você os rotula, por exemplo, 1: = observação real, 0: = observação simulada. Depois disso, você executa um classificador aleatório de floresta comum tentando distinguir as observações reais das simuladas. Observe que você deve ter a opção calcular a proximidade ativada. O resultado realmente útil é exatamente isso, uma descrição da proximidade entre suas observações, com base no que a Random Forest faz ao tentar atribuir esses rótulos. Agora você tem uma descrição de como " Quero dizer, juntar observações que estão mais próximas do que um certo limite. Outra opção fácil é fazer cluster hierárquico, mas usando essa matriz de distância específica. Se você pode trabalhar com R, a maioria dos pacotes de armazenamento em cluster hierárquico permite alimentar as matrizes de distância personalizadas das funções. Em seguida, você seleciona um ponto de corte, pode visualizá-lo como um dendograma e assim por diante. Quero dizer, juntar observações que estão mais próximas do que um certo limite. Outra opção fácil é fazer cluster hierárquico, mas usando essa matriz de distância específica. Se você pode trabalhar com R, a maioria dos pacotes de armazenamento em cluster hierárquico permite alimentar as matrizes de distância personalizadas das funções. Em seguida, você seleciona um ponto de corte, pode visualizá-lo como um dendograma e assim por diante.

Este costumava ser um tutorial muito bom sobre o agrupamento Random Forest e eles compartilhavam algumas funções R úteis que eles escreveram para esse fim, mas o link parece estar morto agora. Talvez volte mais tarde. Eles também escreveram um pacote glm R aleatório muito elegante (que é análogo a floresta aleatória, mas baseado em duh ... glms) se você quiser conferir isso. Você sempre pode escrever para os autores e pedir o material para a classificação Random Forest, que costumava estar disponível no link morto. Eu tenho o código R, mas é muito grande para colar aqui, posso enviá-lo para você se você me enviar uma mensagem privada.

JEquihua
fonte
Este pacote R parece ser também para isso, mas não o examinei
JEquihua
4

Se você deseja usar a floresta aleatória em um ambiente não supervisionado, estará focando na métrica de distância obtida no que Breiman chama de "proximidades". Essa deve ser uma matriz NxN que representa os tempos em que as amostras co-ocorrem nos nós terminais. No randomForest do R, isso é obtido via (eu nunca usei o Breiman, mas tenho certeza de que está disponível):

rf = randomForest( ... )
1 - rf$proximities

Agora, em um ambiente não supervisionado, a floresta aleatória não faz ideia de quantas classes deve haver, portanto esse será o seu trabalho. Isso pode ser feito de várias maneiras, por exemplo, KNN, PAM, etc., onde você escolhe k = 2.

Como você pode imaginar, essa é uma floresta aleatória supervisionada um pouco diferente; portanto, comparar a precisão da classificação entre os dois procedimentos pode não ser esclarecedor.

jimmyb
fonte