Eu estou procurando treinar um classificador que discrimine Type A
e Type B
objetos com um conjunto de treinamento razoavelmente grande de aproximadamente 10.000 objetos, aproximadamente metade dos quais são Type A
e metade deles Type B
. O conjunto de dados consiste em 100 recursos contínuos detalhando as propriedades físicas das células (tamanho, raio médio, etc.). Visualizar os dados em gráficos de dispersão em pares e gráficos de densidade nos diz que há uma sobreposição significativa nas distribuições das células cancerígenas e normais em muitos dos recursos.
Atualmente, estou explorando florestas aleatórias como um método de classificação para esse conjunto de dados e tenho visto bons resultados. Usando R, as florestas aleatórias conseguem classificar corretamente cerca de 90% dos objetos.
Uma das coisas que queremos tentar é criar uma espécie de "índice de certeza" que quantifique a confiança que temos com a classificação dos objetos. Sabemos que nosso classificador nunca será 100% preciso e, mesmo que seja alcançada alta precisão nas previsões, desejaremos técnicos treinados para identificar quais objetos são realmente Type A
e Type B
. Portanto, em vez de fornecer previsões intransigentes de Type A
ou Type B
, queremos apresentar uma pontuação para cada objeto que descreva como A
ou é B
um objeto. Por exemplo, se concebermos uma pontuação que varia de 0 a 10, uma pontuação de 0 pode indicar que um objeto é muito semelhante a Type A
objetos, enquanto uma pontuação de 10 indica que um objeto é muito parecido Type B
.
Eu estava pensando que poderia usar os votos dentro das florestas aleatórias para conceber essa pontuação. Como a classificação em florestas aleatórias é feita por maioria de votos na floresta de árvores geradas, eu assumiria que os objetos que foram votados por 100% das árvores Type A
seriam diferentes dos objetos que foram votados por, digamos, 51% das árvores para ser Type A
.
Atualmente, tentei definir um limite arbitrário para a proporção de votos que um objeto deve receber para ser classificado como Type A
ou Type B
, e se o limite não for ultrapassado, ele será classificado como Uncertain
. Por exemplo, se eu forçar a condição de que 80% ou mais das árvores devem concordar com a decisão de aprovação de uma classificação, constatarei que 99% das previsões de classe estão corretas, mas cerca de 40% dos objetos estão no lixo como Uncertain
.
Faria sentido, então, tirar proveito das informações de votação para pontuar a certeza das previsões? Ou estou indo na direção errada com meus pensamentos?
Respostas:
Faz todo o sentido, e todas as implementações de florestas aleatórias com as quais trabalhei (como as do MATLAB) também fornecem resultados probabilísticos para fazer exatamente isso.
Eu não trabalhei com a implementação do R, mas ficaria chocado se não houvesse uma maneira simples de obter resultados positivos dos votos e da decisão difícil.
Edit: Basta olhar para R e prever.randomForest também gera probabilidades de saída.
fonte
Se você estiver usando R, o pacote de intercalação o impedirá de reinventar a roda. Por exemplo, o código a seguir usa a validação cruzada para escolher os parâmetros de ajuste para um modelo de floresta aleatório e, em seguida, gera a média e o desvio padrão de precisão para cada dobra de validação cruzada. Por fim, calcula as probabilidades de classe para o modelo.
O bom do sinal de intercalação é que facilita muito a comparação de diferentes modelos preditivos. Por exemplo, se você quiser tentar uma SVM, você pode substituir o texto
method='rf'
commethod='svmLinear'
oumethod='svmRadial'.
Você também pode escolher seus parâmetros de ajuste com base na AUC , em vez de precisão, adicionando uma linha para o parâmetro trainControl:summaryFunction=twoClassSummary
.Por fim, há um pouco de código no pacote PerformanceAnalytics
chart.Correlation(Dataset[-5], col= Dataset$Class)
, que não é necessário para criar o modelo, mas fornece uma boa visualização do seu conjunto de dados.fonte
modelLookup()
comando para obter uma lista do que é possível.prob
tipo depredict
também está disponível usandorandomForest
para treinar seu modelo (com ou sem o uso de outros pacotes comocaret
ouPerformanceAnalytics
).O pacote randomForest no R é um pacote bastante decente para obter mais detalhes sobre sua análise. Ele fornece os votos (como uma fração ou contagem bruta) e oferece capacidade incorporada para ajuste e validação cruzada e também pode fornecer mais informações sobre seus recursos (se você quiser saber quais dos seus 100 são o mais importante na análise).
Se você já está usando esse pacote, talvez queira dar uma olhada mais de perto e, se não estiver, talvez dê uma olhada.
fonte