web-dev-qa-db-ja.com

ニューラルネットワーク予測の信頼スコアを計算する方法

ディープニューラルネットワークモデル(kerasに実装)を使用して予測を行っています。このようなもの:

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

私の問題は分類(バイナリ)の問題です。これらの各[prediction]の信頼スコアを計算したいのです。つまり、知りたいのです-私のモデルは、99%が「0」であるか、58%が「0」ですか。

私はそれを行う方法についていくつかの見解を見つけましたが、それらを実装することはできません。私が従うアプローチは次のとおりです。「分類子を使用すると、出力時に値を各特定のクラスに属する確率として解釈できます。それらの分布を、観測がそのクラスに属しているという確信度の大まかな尺度として使用できます。 」

上記のモデルのようなものでどのように予測して、各予測についての自信を得ることができますか?いくつかの実用的な例を(できればKerasで)いただければ幸いです。

4
yamini goel

以前の回答は確率の概念を処理するためのさまざまなアプローチを表していますが、予測に対する信頼スコアを取得するための最も正確な/最も近い回答は、ベイジアンネットワークを使用することです。

ベイジアンネットワークに関する基本的な概念については、ここから始めることができます。 https://towardsdatascience.com/introduction-to-bayesian-networks-81031eeed94e

TensorFlowのクイックスタートについては、次のリンクを参照してください。 https://towardsdatascience.com/bayesian-neural-networks-in-10-mins-in-tfp-c735ec99384f

0
Timbus Calin

Kerasには、シーケンシャルモデルとファンクショナルモデルの両方で使用できるpredict()というメソッドがあります。損失関数として_binary_crossentropy_を使用し、シグモイドアクティベーション関数を備えた最終的な高密度レイヤーを使用している場合、問題なく機能します。

これは、1つのテストデータインスタンスで呼び出す方法です。以下では、mymodel.predict()は、合計が1.0になる2つの確率の配列を返します。これらの値は、あなたが言及した信頼スコアです。さらに、以下に示すようにnp.where()を使用して、2つの確率(50%を超える確率)のどちらが最終クラスになるかを決定できます。

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

ロジスティック回帰によって出力される確率は信頼度として解釈できることを理解しました。

ここにあなたがあなた自身の結論に来るのを助けるためのいくつかのリンクがあります。

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

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

私の回答が役に立ったと思われる場合は、遠慮なく投票してください。