No momento, estou com alguns problemas ao analisar um conjunto de dados de tweet com máquinas de vetores de suporte. O problema é que tenho um conjunto de treinamento de classe binária desequilibrado (5: 2); que deve ser proporcional à distribuição de classe real. Ao prever, obtenho uma baixa precisão (0,47) para a classe minoritária no conjunto de validação; o recall é de 0,88. Tentei usar vários métodos de superamostragem e subamostragem (realizados no conjunto de treinamento) que não melhoraram a precisão, pois o conjunto de validação também é desequilibrado para refletir a distribuição real da classe. Também implementei custos diferentes na máquina de vetores de suporte, o que ajudou. Agora parece que não posso mais melhorar meu desempenho.
Alguém de vocês tem algum conselho sobre o que eu poderia fazer para melhorar minha precisão sem prejudicar minha lembrança? Além disso, alguém tem alguma idéia de por que estou obtendo muito mais falsos positivos do que falsos negativos (o positivo é a classe minoritária)?
fonte
Respostas:
Porque positivo é a classe minoritária. Existem muitos exemplos negativos que podem se tornar falsos positivos. Por outro lado, existem menos exemplos positivos que podem se tornar falsos negativos.
Lembre-se de que Lembre-se = Sensibilidade= TP( TP+ FN)
A sensibilidade (taxa positiva verdadeira) está relacionada à taxa de falso positivo (especificidade 1), conforme visualizado por uma curva ROC. Em um extremo, você chama todos os exemplos de positivos e tem 100% de sensibilidade com 100% de RPF. Em outro, você não chama exemplo de positivo e tem uma sensibilidade de 0% com um FPR de 0%. Quando a classe positiva é a minoria, mesmo um FPR relativamente pequeno (que você pode ter porque tem um recall alto = sensibilidade = TPR) acabará causando um número alto de FPs (porque há muitos exemplos negativos).
Desde a
Mesmo com um FPR relativamente baixo, o FP sobrecarregará o TP se o número de exemplos negativos for muito maior.
Alternativamente,
P (O +) é baixo quando a classe positiva é pequena.
Conforme mencionado por @rinspy, o GBC funciona bem em minha experiência. No entanto, será mais lento que o SVC com um kernel linear, mas você pode criar árvores muito rasas para acelerá-lo. Além disso, mais recursos ou mais observações podem ajudar (por exemplo, pode haver algum recurso atualmente não analisado que é sempre definido com algum valor em todo o seu FP atual).
Também pode valer a pena traçar curvas ROC e curvas de calibração. Pode ser que, embora o classificador tenha baixa precisão, ele pode levar a uma estimativa de probabilidade muito útil. Por exemplo, saber que um disco rígido pode ter uma probabilidade 500 vezes maior de falhar, mesmo que a probabilidade absoluta seja bastante pequena, pode ser uma informação importante.
Além disso, uma baixa precisão significa essencialmente que o classificador retorna muitos falsos positivos. No entanto, isso pode não ser tão ruim se um falso positivo for barato.
fonte
Métodos para experimentar:
UnderSampling:
Sugiro usar técnicas de amostragem e treinar seu classificador.
O aprendizado desequilibrado fornece uma API de estilo de aprendizado do scikit para um conjunto de dados desequilibrado e deve ser um bom ponto de partida para a amostragem e os algoritmos experimentarem.
Biblioteca : https://imbalanced-learn.readthedocs.io/en/stable/
SVM baseado em classificação:
Isso mostrou melhorar o recall de sistemas de alta precisão e é usado pelo google para detectar anúncios ruins. Eu recomendo experimentar.
Documento de referência para SVM:
https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37195.pdf
fonte
A abordagem padrão seria ponderar seu erro com base na frequência da classe. Por exemplo, se você estivesse fazendo isso em Python com o sklearn:
fonte