2016-04-29 23 views
5

私はテンソルフローによって提供されたCIFAR-10サンプルの修正版からROC曲線をプロットしようとしています。 [Tensorflowとscikit-learnでROC曲線をプロットする方法は?

[[-2.57313061 2.57966399] [0.04221377 -0.04033273] [-1.42880082 1.43337202]:これは、代わりに10

のネットワークの出力がlogitsと呼ばれている2つのクラスのために、今だと形を取ります-2.7692945 2.78173304] [-2.48195744 2.49331546] [2.0941515 -2.10268974] [-3.51670194 3.53267646] [-2.74760485 2.75617766] ...]

まず、これらのlogitsは実際には何を表しているのですか?ネットワークの最終層は、WX + b形の「ソフトマックス・リニア」です。

predictions = sess.run([top_k_op]) 
predictions_int = np.array(predictions).astype(int) 
true_count += np.sum(predictions) 
... 
precision = true_count/total_sample_count 

これは正常に動作します:

モデルはグラフが初期化された後、次に

top_k_op = tf.nn.in_top_k(logits, labels, 1) 

を呼び出すことで、精度を計算することができます。

しかし、ここからどのようにしてROC曲線をプロットできますか?

私は "sklearn.metrics.roc_curve()"関数(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve)を試していましたが、私は "y_score"パラメータとして何を使うべきか分かりません。

助けていただけたら幸いです!

+0

ROC曲線を計算してプロットするコードについては、こちらをご覧ください(リンク先はhttp://stackoverflow.com/questions/35811446/classification-accuracy-after-recall-and-precision/37275638#37275638)。 –

答えて

1

ここ「y_score」(正がユーザーy_trueアレイ1とラベルされた場合)陽性として分類される各サンプルの確率に対応する配列であるべきである

実際、もしネットワーク利用ソフトマックスとして最後の層である場合、モデルはこのインスタンスの各カテゴリの確率を出力する必要があります。しかし、あなたがここに書いたデータはこのフォーマットに適合しません。そして、私は例のコードをチェックしました:https://github.com/tensorflow/tensorflow/blob/r0.10/tensorflow/models/image/cifar10/cifar10.py これはsoftmax_linearというレイヤーを使用しているようですが、私はこの例ではほとんど分かりませんが、Logistic Functionのようなもので出力を処理して確率に変えてください。

tensorboard --logdir=/tmp/tensorboard_roc 

tensorboard_roc

:その後、tensorboardを開始

y_score = np.array(output)[:,1] 
roc_curve(y_true, y_score) 
0
import tensorflow as tf 
tp = [] # the true positive rate list 
fp = [] # the false positive rate list 
total = len(fp) 
writer = tf.train.SummaryWriter("/tmp/tensorboard_roc") 
for idx in range(total): 
    summt = tf.Summary() 
    summt.value.add(tag="roc", simple_value = tp[idx]) 
    writer.add_summary (summt, tp[idx] * 100) #act as global_step 
    writer.flush() 

それからちょうどscikit学習機能にあなたの本当のラベル 'y_true' と一緒にそれを養います詳細とコードについては、私のブログにアクセスできます:http://blog.csdn.net/mao_feng/article/details/54731098

+0

私のモデルではこのコードを使用しましたが、テンソルボードでは(0,0)からの直線のみが表示されます。 – Kyrol

関連する問題