Classificação discriminatória de uma classe com fundo negativo desequilibrado e heterogêneo?

16

Estou trabalhando para melhorar um classificador supervisionado existente, para classificar sequências {protein} como pertencentes a uma classe específica (precursores do hormônio neuropeptídeo) ou não.

Existem cerca de 1.150 "positivos" conhecidos, num contexto de cerca de 13 milhões de seqüências de proteínas ("fundo desconhecido / pouco anotado") ou cerca de 100.000 proteínas relevantes revisadas, anotadas com uma variedade de propriedades (mas muito poucas anotadas de forma explícita). "forma negativa).

Minha implementação anterior encarou isso como um problema de classificação binária: Conjunto positivo = proteínas marcadas como neuropeptídeos. Conjunto negativo: amostragem aleatória de 1.300 amostras (total) dentre as proteínas restantes de uma distribuição longitudinal aproximadamente semelhante.

Isso funcionou, mas quero melhorar bastante as habilidades discriminatórias das máquinas (atualmente, é de 83 a 86% em termos de precisão, AUC, F1, medida pelo CV, em vários conjuntos negativos amostrados aleatoriamente).

Meu pensamento era: 1) Tornar este um problema de várias classes, escolhendo 2-3 classes diferentes de proteínas que serão definitivamente negativas, por suas propriedades / classe funcional, junto com (talvez) outro conjunto amostrado aleatoriamente. (Prioridade aqui seriam conjuntos negativos com características / características semelhantes ao conjunto positivo, embora ainda possuam características definidoras). 2) Uma aula de aprendizagem - Seria bom, mas, pelo que entendi, é destinado apenas à detecção de anomalias e tem desempenho inferior às abordagens discriminatórias.

*) Ouvi falar de aprendizado de PU, o que parece interessante, mas sou um N00b de programação e não conheço nenhuma implementação existente para ele. (Em Python / sci-kit aprenda).

Então, a abordagem 1 faz sentido em um ponto de vista teórico? Existe a melhor maneira de fazer vários conjuntos negativos? (Eu também poderia simplesmente usar uma grande variedade de proteínas "negativas" [50K], mas todas são muito diferentes umas das outras, então não sei o quão bem o classificador as trataria como uma mistura grande e desequilibrada ) Obrigado!

GrimSqueaker
fonte
como você provavelmente viu, o artigo da Wikipedia sobre aprendizado de PU faz referência a um artigo em que isso foi aplicado à identificação de genes. Talvez valha a pena descobrir / perguntar aos autores qual software eles usaram.
21815 Andre Holzner
Há alguma discussão sobre a aprendizagem PU em scikit aprender aqui: stackoverflow.com/questions/25700724/... (usando uma 'uma classe' máquinas de vetores de suporte)
Andre Holzner
O aprendizado da PU é um problema de classificação padrão de duas classes com uma ressalva - você otimiza a área sob a curva, não a precisão da classificação. Você pode usar o pacote de software Sofia ML para fazer exatamente isso (sem necessidade de programação). No lado prático, você anota seus exemplos positivos com +1 e todo o resto como -1 (sim, todos os outros dados não marcados que podem conter pontos positivos).
Vladislavs Dovgalecs 10/10

Respostas:

5

A maneira como eu atacaria o problema, em geral, é alavancar análises estatísticas como Análise de Componentes Principais ou Mínimos Quadrados Ordinários para ajudar a determinar quais atributos dessas seqüências de proteínas são mais adequados para classificar proteínas como precursoras de hormônios neuropeptídicos.

Para fazer isso, você precisará converter as seqüências de proteínas em dados numéricos, mas acredito que já foram feitos alguns trabalhos nesse sentido, utilizando fórmulas aproveitadas no Amino Acid PCA.

Veja estes dois links: http://www.ncbi.nlm.nih.gov/pubmed/24496727

http://www.ncbi.nlm.nih.gov/pubmed/16615809

Uma vez concluído esse trabalho, tentaria classificar usando o conjunto de dados inteiro e um algoritmo de aprendizado por reforço, como Naive Bayes, enquanto reduzia os dados àqueles que o PCA identificou como importantes.

A razão pela qual eu tentaria usar o Bayes é porque ele provou ser um dos melhores métodos para determinar spam versus email regular, que possui um conjunto de dados assimétrico.

Tendo dito tudo isso ...

Diminuir o número ou o tipo de classificações negativas pode distorcer seus resultados em alguns pontos, de uma maneira ou de outra, mas não acho que você verá a eficácia a longo prazo mudar substancialmente até que você faça o trabalho de determinar a melhor maneira de remover a imprecisão dos seus dados de treinamento. Isso exigirá um especialista em campo ou análise estatística.

Eu poderia estar completamente fora da base. Estou interessado em ver algumas outras respostas, mas esses são meus 2 centavos.

Steve Kallestad
fonte
1
Eu já implementei a extração de recursos e um kit de ferramentas (publicação aguarda algumas checagens).
GrimSqueaker
5

Uma aula de aprendizagem

Eu não seria muito rápido em jogar fora os métodos de classificação de uma classe (opção 2) - a chave é modelar a classe positiva (minoritária) com o modelo de uma classe.

Houve pesquisas demonstrando casos em que a classificação de uma classe superou outras abordagens, como a amostragem de dados altamente desequilibrados, como costuma ser observado nas tarefas de classificação de proteínas.

Não consegui encontrar a pesquisa que lembrei, mas encontrei outras comparações, mostrando que o uso de classificadores de uma classe (geralmente modelando a classe minoritária) alcançou um desempenho bom ou melhor do que a classificação binária, tipicamente com "negativos" amostrados do conjunto grande de proteínas que não se sabe serem positivas.

Além disso, essa abordagem também oferece a vantagem de um tempo de execução muito aprimorado - já que você só precisa treinar o classificador no conjunto menor e positivo. Alguns papéis:

"Previsão de interações proteína-proteína usando métodos de classificação de classe única e integrando diversos dados biológicos"

"Uma abordagem de classificação de classe única para sequências e estruturas de proteínas"

No mínimo, eu tentaria alguns métodos de uma classe e compararia o desempenho usando a validação com suas abordagens de classificação binária / multi-classe. Também existem implementações de código aberto para muitas delas, portanto, não deve ser muito caro experimentá-las, por exemplo, o LibSVM possui uma implementação SVM de uma classe. Além disso, pode ser valioso para uso em um conjunto com classificadores binários, pois pode haver mais discordância em suas previsões.

Incorporação / agrupamento de representação de nível superior

Na linha do que você estava pensando (1) e na outra postagem sugerindo PCA, abordagens como agrupamento, codificação esparsa ou até modelagem de tópicos - tratando cada proteína como uma sequência de documentos e famílias de proteínas diferentes como tópicos diferentes - poderiam produzir uma representação isso pode tornar a classificação das proteínas simples.

Ou seja, você pode identificar a qual grupo / cluster uma proteína pertence ou classificar as associações de cluster / representações incorporadas.

Por exemplo, abordagens de incorporação como codificação esparsa podem gerar representações que revelam a qual cluster uma proteína pertence também - de modo que alguns conjuntos de recursos são ativos apenas (diferentes de zero) para proteínas no mesmo cluster - o que pode facilitar sua classificação.

Além disso, rótulos de classe ou associação de cluster conhecida podem ser incorporados no processo de incorporação para a maioria dos métodos.

Conjunto

Conjuntos de múltiplos classificadores tendem a funcionar melhor - especialmente quando os classificadores são muito diversos e podem obter desempenho comparável individualmente.

Há pelo menos duas maneiras de usar conjuntos para esse problema.

  1. Você pode criar um conjunto de classificadores binários amostrando vários conjuntos negativos do mesmo tamanho e treinando um classificador em cada um.
  2. Você pode criar um conjunto a partir de diferentes abordagens, como classificadores binários com amostras negativas diferentes, combinados com uma abordagem de classificação de uma classe, combinada com modelos de classificação treinados nos dados incorporados.
Brian
fonte
2

Existem três abordagens que você pode adotar: APP, OAA, AAO. APP é discriminação entre objetos com base em todos os pares possíveis de classes. OAA é o uso de um contra todos (classes restantes) e o AAO é de uma só vez, como o uso de um teste F para várias classes simultaneamente (ou o teste de Hotelling para MVN). APP e AAO são na verdade várias execuções de classificação binária, mas com mais de duas de suas classes originais. Cada uma dessas abordagens produz resultados diferentes para os vários classificadores empregados.

A amostragem aleatória é uma boa técnica. Você também pode tentar agrupar todos os objetos em centros usando k-means e, em seguida, usar os centros como novos objetos. De qualquer maneira, métodos de redução de dimensão linear e não linear podem ajudar a evitar o grande tamanho da amostra.


fonte