Digamos que eu tenha um conjunto de instâncias com rótulos de classe associados. Não importa como essas instâncias foram rotuladas, mas quão certa é a associação de classe. Cada instância pertence a exatamente uma classe. Digamos que eu possa quantificar a certeza de cada associação de classe com um atributo nominal que vai de 1 a 3 (muito certo a incerto, respectivamente).
Existe algum tipo de classificador que leva em consideração essa medida de certeza e, se sim, está disponível no kit de ferramentas WEKA?
Imagino que essa situação ocorra com bastante frequência, por exemplo, quando as instâncias são classificadas por seres humanos que nem sempre são completamente certas. No meu caso, tenho que classificar imagens e, às vezes, uma imagem pode pertencer a mais de uma classe. Se isso acontecer, dou uma alta incerteza à classe, mas ainda a classifico com apenas uma classe.
Ou existem outras abordagens para esse problema, sem um classificador especializado? Por exemplo, apenas fazendo "certas" classificações para treinamento? Receio que, neste caso, ocorram mais erros de classificação porque os casos "fronteiriços" não são cobertos.
fonte
Respostas:
Antes de tudo, como o @Marc Claesen já explicou, a classificação semi-supervisionada é uma das técnicas para cuidar da situação em que você sabe que as classes são realmente distintas, mas não tem certeza de qual classe o caso realmente pertence.
No entanto, também existem situações relacionadas, nas quais a "realidade" não é tão clara e a suposição de ter classes realmente distintas não é atendida: casos de fronteira podem ser uma realidade "física" (veja os artigos sobre aplicativos a seguir) onde encontramos essa condição).
Há uma suposição crucial para classificadores semi-supervisionados que você precisa ter certeza de que seja atendida: a suposição de que, no espaço de recursos, os limites de classe acompanham a baixa densidade da amostra . Isso é chamado de suposição de cluster.
Mesmo que a realidade subjacente aos seus dados tenha classes distintas, seu conjunto de dados pode ter casos desproporcionalmente mais limitados: por exemplo, se sua técnica de classificação é direcionada à classificação de casos difíceis, enquanto os casos claros e fáceis não são de interesse e seus dados de treinamento já refletem isso situação.
Concordo plenamente com você que excluir os casos limítrofes geralmente é uma má idéia: ao remover todos os casos difíceis, você acaba com um problema artificialmente fácil. IMHO é ainda pior que a exclusão de casos limítrofes geralmente não para com o treinamento do modelo, mas os casos limítrofes também são excluídos dos testes, testando o modelo apenas com casos fáceis. Com isso, você nem perceberia que o modelo não funciona bem com casos limítrofes.
Aqui estão dois artigos que escrevemos sobre um problema que difere do seu, pois em nossa aplicação também a realidade pode ter classes "mistas" (uma versão mais geral do seu problema: a incerteza nas etiquetas de referência também é abordada).
C. Beleites, K. Geiger, M. Kirsch, SB Sobottka, G. Schackert e R. Salzer: classificação espectroscópica Raman de tecidos de astrocitoma: usando informações de referência suaves, Anal. Bioanal. Chem., 400 (2011), 2801 - 2816.
C. Beleites, R. Salzer e V. Sergo:
Validação de Modelos de Classificação Suave usando Associações Parciais de Classe: Um Conceito Estendido de Sensibilidade & Co. aplicado à Classificação de Tecidos de Astrocitoma
Chemom. Intell. Lab. Syst., 122 (2013), 12-22.
Os links vão para a página do projeto de um pacote R que eu desenvolvi para fazer os cálculos de desempenho. Existem outros links para a página oficial da web e para meus manuscritos. Embora eu não tenha usado o Weka até agora, entendo que uma interface para o R esteja disponível .
considerações práticas:
libSVM
o ajuste por validação cruzada que todas as cópias de cada ponto de dados precisam ser mantidas na mesma dobra de validação cruzada. Assim,libSVM
a sintonia provavelmente produziria um modelo massivamente super ajustado.nnet::multinom
).fonte
libsvm
em particular. Oslibsvm
autores fornecem uma versão alternativa de cada versão em que a classificação ponderada por instância é possível, evitando esse problema completamente. São esses tipos de coisas que me levam a geralmente usam algoritmos bibliotecas diretamente, em vez de wrappers como Weka / scipy / ... csie.ntu.edu.tw/~cjlin/libsvmtools/#weights_for_data_instancesEssa é uma das generalizações de classificação abordadas na aprendizagem semi-supervisionada. Se você tem uma medida de certeza, pode usar abordagens que permitam ponderar as instâncias de treinamento. Quanto maior a certeza, maior o peso da instância correspondente. Exemplos de tais abordagens incluem SVM ponderado por instância e regressão logística.
Tenho certeza que a weka tem implementações desses algoritmos. Se tudo mais falhar, experimente várias instâncias das instâncias com alta certeza. Você pode usar essa abordagem para SVM ou LR tradicional.
Exemplo: SVM
Se não me engano, o weka possui interfaces com o LIBSVM . O LIBSVM permite resolver o SVM com ponderação de classe em todas as suas liberações e o SVM com ponderação de instância em versões especiais de cada liberação. Vou assumir que o weka não suporta o último (que é o que você precisa).
O SVM ponderado por classe minimiza a seguinte função objetivo: com o hiperplano de separação no espaço de recursos, as variáveis de folga (que modelam a classificação incorreta do treinamento) e e o conjunto de vetores de suporte pertencentes à classe positiva e negativa, respectivamente. Usando os pesos e você pode atribuir diferentes penalidades de classificação incorreta entre as classes.w ξ P N C p o s C n e g
Com base na sua pergunta, parece que você preferiria usar 6 pesos diferentes (2 classes 3 níveis de certeza). Você pode conseguir isso para muitas abordagens duplicando amostras dos pontos com alta certeza.×
Por exemplo, em termos de SVM, o uso da mesma instância de dados duas vezes produz uma solução idêntica à duplicação do valor associado . Essa é uma maneira muito fácil de atribuir altas penalidades de classificação incorreta a determinadas instâncias de dados. Você pode seguir a mesma abordagem para regressão logística.C
fonte
A dificuldade do problema depende muito de quão errôneas podem ser as etiquetas incertas. Se os rótulos incertos estiverem corretos, digamos, 90% das vezes, você provavelmente poderá se safar usando apenas a regressão logística. Por outro lado, se os rótulos estiverem errados quase metade do tempo, talvez seja necessário recorrer a algumas técnicas especiais. Aqui está uma facada que fiz em um problema muito semelhante. (Tivemos várias observações por rótulo, mas, caso contrário, a configuração é bastante semelhante.)
fonte
Tive uma breve passagem pelo reconhecimento e classificação de imagens.
Florestas aleatórias é uma técnica fácil de usar. Eu o implementei no R, ele deve estar disponível no Weka também. A facilidade de uso supera a precisão da previsão. Se você tiver um conjunto de treinamento grande o suficiente, ele poderá classificar vários rótulos.
Ele funcionou para reconhecer dígitos manuscritos muito bem, mas se suas imagens forem mais complexas, apenas uma avaliação lhe dirá se funciona bem.
fonte