Estou trabalhando em um projeto no R onde tenho cerca de 1200 e-mails de uma empresa, a maioria rotulada como classe ou classe, que são os tipos de solicitações. Cerca de 1000 e-mails são rotulados como classee 200 são rotulados como classe. Meu objetivo é usar o aprendizado supervisionado para criar um modelo que classifique novos e-mails.
Porém, depois de muito pré-processamento (análise, remoção de palavras-chave, etc.) e tentativa de algoritmos típicos (SVM, árvores de decisão etc.) em uma matriz de termos de documentos, minha matriz de confusão continha muitos falsos positivos e falsos negativos, mas apenas alguns falsos negativos com SVM.
Eu estou querendo saber como eu poderia melhorar meus resultados? Preciso usar oversampling ou representação de recurso de dois gramas? Eu acho que o problema é que os tópicos das duas categorias são muito próximos.
fonte
Respostas:
(Todos os emails são em francês ou em inglês)
Métodos de pré-processamento:
-> Em seguida, documente a matriz de termos, com TF-IDF
As duas classes são de um suporte técnico, duas categorias "complexo" e "fácil", "complexo" são tópicos sobre finanças (em teoria), problema "simples" com o software (em teoria), mas na prática eles têm muitas palavras em comum. E nas outras aulas eu não as levo em conta, apenas me concentro nas duas por enquanto
Na verdade, o tipo de algoritmo de classificação que usei não é tão relevante porque tentei com 5 algo e nenhum deu bons resultados
Exemplo (matriz de confusão) Árvore de decisão:
pred:
335 10
59 | 12
331 1
83 1 1
330 2
83 1
1 | 83
12 320
fonte
Como você está lidando com apenas 2 classes, você pode criar um
commonality.cloud()
de ambas as classes (eu uso essa função no R, não conheço outras línguas).Ele mostrará as palavras que são comuns em
class1
eclass2
. Essas palavras talvez não ajudem o algoritmo a distinguir as classes, para que você possa remover essas palavras e fazer alguns testes.fonte
Você pode tentar um classificador bayesiano em vez de SVM ou Árvores de Decisão. Seu problema é uma generalização do problema do filtro de spam, ou seja, a classificação de emails em 'Spam' (classe 1) ou 'Não é spam' (classe 2). A maioria dos filtros de spam usa a classificação bayesiana em vez do método de aprendizado supervisionado mais comum.
fonte
Você poderia estudar os recursos: notei que você removeu os números. Pode ser que você tenha feito isso porque é pouco provável que colidam, mas você também pode resolver isso introduzindo classes de palavras (@ number @ ou @ big_number @, etc).
Você pode tentar usar as classes de palavras em outros grupos de palavras também. Se isso funcionar, isso pode indicar que o seu aparelho sofre com esparsidade (o que não me surpreenderia). Você pode usar um seletor de recursos para esse fim, por exemplo, classificando suas dimensões no ganho de informações.
As formas mais avançadas de combater a escassez incluem: o algoritmo de Rocchio ou o word2vec.
fonte