Por uma questão de simplicidade, digamos que estou trabalhando no exemplo clássico de emails de spam / não spam.
Eu tenho um conjunto de 20000 e-mails. Destas, sei que 2000 são spam, mas não tenho nenhum exemplo de email que não seja spam. Eu gostaria de prever se os 18000 restantes são spam ou não. Idealmente, o resultado que estou procurando é uma probabilidade (ou um valor-p) de que o email seja spam.
Que algoritmo (s) posso usar para fazer uma previsão sensata nessa situação?
No momento, estou pensando em um método baseado em distância que me diga como o meu email é semelhante a um email de spam conhecido. Que opções eu tenho?
De maneira mais geral, posso usar um método de aprendizado supervisionado ou preciso necessariamente ter casos negativos em meu conjunto de treinamento para fazer isso? Estou limitado a abordagens de aprendizado não supervisionadas? E os métodos semi-supervisionados?
fonte
Respostas:
Isso se chama aprendizado de dados positivos e não rotulados, ou aprendizado de PU, para abreviar, e é um nicho ativo de aprendizado semi-supervisionado.
Resumidamente, é importante usar os dados não rotulados no processo de aprendizado, pois eles produzem modelos significativamente aprimorados sobre os chamados classificadores de classe única que são treinados exclusivamente em positivos conhecidos. Os dados não rotulados podem ser incorporados de várias maneiras, as abordagens predominantes são as seguintes:
Sou ativo nesse campo e, em vez de resumir aqui para você, recomendo a leitura de dois de meus artigos e as referências nele contidas para obter uma visão geral do domínio:
fonte
kernlab
oue1071
. Observe que o SVM e o RESVM de embalagem têm vários hiperparâmetros que você precisa otimizar, para o qual eu recomendo a biblioteca Optunity (possui uma interface R).Suponho que não haja tantos casos de spam nos seus 18000 casos. Para usar uma abordagem de aprendizado supervisionado, é necessário ter mais de uma categoria / classe em seus dados. Como você sabe que 2000 casos são spam, você pode rotular os 18.000 casos restantes como 'categoria desconhecida' e treinar qualquer modelo de aprendizado supervisionado para prever se um caso está no spam ou na categoria desconhecida. Em seguida, verifique a precisão do modelo fora da amostra para ver o desempenho do modelo para distinguir entre as duas categorias. Se tiver um bom desempenho, é garantida minha suposição de poucos casos de spam na categoria 'desconhecido'. Se o desempenho não for bom, você precisará usar um aluno não supervisionado (como kmeans, etc.) para agrupar e identificar grupos homogêneos separados em seus dados. Em seguida, identifique quais clusters contêm a maioria dos 2.000 e-mails de spam, e quais não, e rotule-os como spam e não spam, respectivamente. Em seguida, você pode prosseguir com a modelagem usando um aluno supervisionado como eu descrevi anteriormente.
fonte
O que o OP está falando é uma tarefa de classificação de uma classe, que é muito desafiadora.
Existem muitos trabalhos sobre essa tarefa em diferentes campos de pesquisa. Também escrevi um esquema eficiente de verificação de autoria intrínseca baseado no aprendizado de conjuntos . É muito fácil adaptá-lo para classificar spam / não spam, em vez de autores. Experimente e me avise se precisar de mais detalhes ...
fonte