例【注意事項の機械学習]はROC曲線のPythonをプロット

Pythonの描かれたROC曲線の例

ROCは、「受信者動作特性」(受信者動作特性)曲線を表します。

クロス縦プロットされ、それぞれ、各2つの有意な量値(TPR、FPR)を算出した正例サンプル予測として1つは、この順のいずれかでソートに従って学習者のサンプル予測結果、 。精度を使用してPRカーブ、垂直、水平異なるの再現率は、ROC曲線の縦軸は、「真の例レート」(真陽性率、TTR)で、横軸は、「偽陽性率の例」(偽陽性率でありますFPR)。

図示のように:

図は、次のPythonを使用して行うこと。

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 24 19:04:21 2020

@author: Bean029
"""

import numpy as np
import matplotlib.pyplot as plt
from itertools import cycle

from sklearn import svm, datasets
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import label_binarize
from sklearn.multiclass import OneVsRestClassifier
from scipy import interp
from sklearn.metrics import roc_auc_score

# Import some data to play with
iris = datasets.load_iris()
X = iris.data
y = iris.target

# Binarize the output
y = label_binarize(y, classes=[0, 1, 2])
n_classes = y.shape[1]

# Add noisy features to make the problem harder
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape
X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]

# shuffle and split training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5,
                                                    random_state=0)

# Learn to predict each class against the other
classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,
                                 random_state=random_state))
y_score = classifier.fit(X_train, y_train).decision_function(X_test)

# Compute ROC curve and ROC area for each class
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
    fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
    roc_auc[i] = auc(fpr[i], tpr[i])

# Compute micro-average ROC curve and ROC area
fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])

plt.figure()
lw = 2
plt.plot(fpr[2], tpr[2], color='darkorange',
         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc[2])
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

ROC曲線のトレードオフ曲線とPR

ROC曲線は、正と負のサンプルで十分、十分反映判断ROC曲線モデルの両方、比較的安定たくさんあります。そのため、同じモデルのため、PRCとROC曲線を使用すると、モデルの効果を確認したい場合は、次の2つのカーブを置くことができ、いくつかの問題を説明しますが、両方のいくつかの関連性を持つことができる総合的な評価を描かれています。教師付きバイナリ分類問題のために、正および負のサンプルで十分であり、直接ROC曲線、AUC、KS評価モデルの効果を使用することができます。閾値決意処理において、分類性能は、モデル精度、リコール又はF1に従って評価することができます。マルチ分類問題のために、私たちは総合的な評価指標のモデルとして、カテゴリごとに精度、リコールやF1を計算することができます。

ROC曲線下面積は、0.1と1の間の品質評価値は、直感的分類器より良い値とすることができるように。

ROC曲線は、真のYが軸正率偽陽性率とX軸の特徴です。

この手段チャートの左上隅であることを「理想」のポイント - 偽陽性率は0、1、真陽性率でした。これは非常に現実的ではないが、それは、曲線(AUC)下の大きな面積が通常よりよいであることを意味しません。

偽陽性率を最小限に抑えながら、真陽性率を最大化することが望ましいので、「スティープネス」ROC曲線は、も重要です。

ROC曲線は、一般的に分類器の出力のバイナリ分類を研究するために使用します。マルチラベル分類にROC曲線の面積を拡張し、ROCするには、二値化出力する必要があります。各タグは、ROC曲線を描くことができるが、ラベルインジケータはROC曲線をプロットするように行列の各要素が考えられていることにより、バイナリ予測(平均顕微鏡)であってもよいです。

 

公開された619元の記事 ウォンの賞賛185 ビュー660 000 +

おすすめ

転載: blog.csdn.net/seagal890/article/details/105081188
おすすめ