Estou treinando um classificador binário SVM usando o Scikit learn.
Devido à natureza do meu problema, preciso evitar falsos negativos. Como nada é gratuito, estou bem em obter uma taxa mais alta de falsos positivos, a fim de reduzir o número de falsos negativos. Como podemos fazer isso (idealmente com o Scikit learn)?
Em outras palavras, como podemos minimizar os falsos negativos usando um classificador SVM? Existe alguma maneira de ajustar hiper parâmetros para favorecer falsos positivos em vez de falsos negativos?
machine-learning
cross-validation
svm
python
scikit-learn
Pierre-Antoine
fonte
fonte
Respostas:
A implementação do Scikit learn do classificador binário SVM não permite definir um limite de corte, conforme os outros comentários / respostas sugeriram. Em vez de fornecer probabilidades de classe, aplica-se diretamente um ponto de corte padrão para fornecer a associação de classe, por exemplo, 1 ou 2.
Para minimizar os falsos negativos, você pode definir pesos mais altos para amostras de treinamento rotuladas como classe positiva; por padrão, os pesos são definidos como 1 para todas as classes. Para mudar isso, use o hiperparâmetro
class_weight
.Idealmente, você deve evitar escolher um ponto de corte e simplesmente fornecer as probabilidades de classe para os usuários finais que podem decidir sobre qual ponto de corte aplicar ao tomar decisões com base no classificador.
Uma métrica melhor para comparar classificadores é uma função de pontuação adequada, consulte https://en.wikipedia.org/wiki/Scoring_rule e o
score()
método no módulo classificador svmsklearn.svm.SVC
.fonte
Como muitos modelos preditivos, o SVM produzirá pontuações de probabilidade e aplicará o limite à probabilidade de convertê-lo em rótulos positivos ou negativos.
Como @Sycorax mencionado no comentário, você pode ajustar o limite de corte para ajustar o trade-off entre falso positivo e falso negativo.
Aqui está um exemplo em R.
Observe que quando mudamos
cut_off
, a matriz de confusão (falso positivo, falso negativo etc.) mudafonte