web-dev-qa-db-fra.com

Comment calculer le score de confiance d'une prédiction de réseau neuronal

J'utilise un modèle de réseau neuronal profond (implémenté dans keras) pour faire des prédictions. Quelque chose comme ça:

def make_model():
 model = Sequential()       
 model.add(Conv2D(20,(5,5), activation = "relu"))
 model.add(MaxPooling2D(pool_size=(2,2)))    
 model.add(Flatten())
 model.add(Dense(20, activation = "relu"))
 model.add(Lambda(lambda x: tf.expand_dims(x, axis=1)))
 model.add(SimpleRNN(50, activation="relu"))
 model.add(Dense(1, activation="sigmoid"))    
 model.compile(loss = "binary_crossentropy", optimizer = adagrad, metrics = ["accuracy"])

 return model

model = make_model()
model.fit(x_train, y_train, validation_data = (x_validation,y_validation), epochs = 25, batch_size = 25, verbose = 1)

##Prediciton:
prediction = model.predict_classes(x)
probabilities = model.predict_proba(x) #I assume these are the probabilities of class being predictied

Mon problème est un problème de classification (binaire). Je souhaite calculer le score de confiance de chacun de ces prediction c'est-à-dire que je souhaite savoir - Mon modèle est-il sûr à 99% qu'il est "0" ou est-ce 58% qu'il est "0".

J'ai trouvé quelques points de vue sur la façon de le faire, mais je ne peux pas les mettre en œuvre. L'approche que je souhaite suivre est la suivante: "Avec les classificateurs, lorsque vous sortez, vous pouvez interpréter les valeurs comme la probabilité d'appartenir à chaque classe spécifique. Vous pouvez utiliser leur distribution comme une mesure approximative de votre degré de confiance qu'une observation appartient à cette classe. . "

Comment devrais-je prédire avec quelque chose comme le modèle ci-dessus afin d'avoir sa confiance sur chaque prédiction? J'apprécierais quelques exemples pratiques (de préférence à Keras).

4
yamini goel

Bien que les réponses précédentes représentent différentes approches pour gérer le concept de probabilité, la réponse la plus vraie/la plus proche pour avoir un score de confiance à une prédiction serait d'utiliser les réseaux bayésiens.

Pour les concepts de base sur les réseaux bayésiens, vous pouvez commencer ici: https://towardsdatascience.com/introduction-to-bayesian-networks-81031eeed94e

Pour un démarrage rapide dans TensorFlow, consultez le lien suivant: https://towardsdatascience.com/bayesian-neural-networks-in-10-mins-in-tfp-c735ec99384f

0
Timbus Calin

Dans Keras, il existe une méthode appelée predict() qui est disponible pour les modèles séquentiels et fonctionnels. Cela fonctionnera très bien dans votre cas si vous utilisez binary_crossentropy Comme fonction de perte et une couche Dense finale avec une fonction d'activation sigmoïde.

Voici comment l'appeler avec une instance de données de test. Ci-dessous, mymodel.predict() renverra un tableau de deux probabilités totalisant 1,0. Ces valeurs sont les scores de confiance que vous avez mentionnés. Vous pouvez également utiliser np.where() comme indiqué ci-dessous pour déterminer laquelle des deux probabilités (celle de plus de 50%) sera la classe finale.

yhat_probabilities = mymodel.predict(mytestdata, batch_size=1)
yhat_classes = np.where(yhat_probabilities > 0.5, 1, 0).squeeze().item()

J'ai fini par comprendre que les probabilités générées par la régression logistique peuvent être interprétées comme de la confiance.

Voici quelques liens pour vous aider à tirer votre propre conclusion.

https://machinelearningmastery.com/how-to-score-probability-predictions-in-python/

comment évaluer le score de confiance d'une prédiction avec scikit-learn

https://stats.stackexchange.com/questions/34823/can-logistic-regressions-predicted-probability-be-interpreted-as-the-confidence

https://kiwidamien.github.io/are-you-sure-thats-a-probability.html

N'hésitez pas à voter pour ma réponse si vous la trouvez utile.

0