質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.86%

  • Python

    5900questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

python機械学習のROC曲線, AUC

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 354

mokomo10

score 0

Pythonによる機械学習入門を読み進んでいます。
p127 6.4.2の学習と評価について, classify_handsign_2.pyを実行するとそれぞれのテスト用画像のprecision,recall,f1-scoreなどが表示されます。
スクリプトを以下のように実行する。

>>>run classify_handsign_2.py 4 ./data/m01 ./data/m05 ./data/m06 ./data/m07 ./data/m02 ./data/m03 ./data/m04 ./data/m08 ./data/m09 ./data/m10 ./data/m11 ./data/m12 ./data/m13 ./data/m14 ./data/m15 ./data/m16

しかし、この場合のそれぞれのROC曲線,AUCはどのようなコードにすれば表示させることができるのですか?
厚かましいお願いではございま‌​すが、よろしくお願いします。
コードは以下の通りです。

import os
import sys
import glob
import numpy as np
from skimage import io
from sklearn import datasets

IMAGE_SIZE = 40
COLOR_BYTE = 3
CATEGORY_NUM = 6

## ラベル名(0~)を付けたディレクトリに分類されたイメージファイルを読み込む
## 入力パスはラベル名の上位のディレクトリ
def load_handimage(path):

# ファイル一覧を取得
files = glob.glob(os.path.join(path, '*/*.png'))

# イメージとラベル領域を確保
images = np.ndarray((len(files), IMAGE_SIZE, IMAGE_SIZE,
                        COLOR_BYTE), dtype = np.uint8)
labels = np.ndarray(len(files), dtype=np.int)

# イメージとラベルを読み込み
for idx, file in enumerate(files):
   # イメージ読み込み
   image = io.imread(file)
   images[idx] = image

   # ディレクトリ名よりラベルを取得
   label = os.path.split(os.path.dirname(file))[-1]
   labels[idx] = int(label)

# scikit-learn の他のデータセットの形式に合わせる
flat_data = images.reshape((-1, IMAGE_SIZE * IMAGE_SIZE * COLOR_BYTE))
images = flat_data.view()
return datasets.base.Bunch(data=flat_data,
             target=labels.astype(np.int),
             target_names=np.arange(CATEGORY_NUM),
             images=images,
             DESCR=None)

#####################################=
from sklearn import svm, metrics

## usage:
##    python classify_handsign_1.py <n> <dir_1> <dir_2> ... <dir_m>
##      n          テスト用データディレクトリ数
##      dir_1      データディレクトリ1
 ##      dir_m      データディレクトリm

if __name__ == '__main__':
argvs = sys.argv

# 評価用ディレクトリ数の取得
paths_for_test = argvs[2:2+int(argvs[1])]
paths_for_train = argvs[2+int(argvs[1]):]

print('test ', paths_for_test)
print('train', paths_for_train)

# 学習データの読み込み
data = []
label = []
for i in range(len(paths_for_train)):
    path = paths_for_train[i]
    d = load_handimage(path)
    data.append(d.data)
    label.append(d.target)
train_data = np.concatenate(data)
train_label = np.concatenate(label)

# 手法:線形SVM
classifier = svm.LinearSVC()

# 学習
classifier.fit(train_data, train_label)

for path in paths_for_test:
    # テストデータの読み込み
    d = load_handimage(path)

    # テスト
    predicted = classifier.predict(d.data)

    # 結果表示
    print("### %s ###" % path)
    print("Accuracy:\n%s"
        % metrics.accuracy_score(d.target, predicted))
    print("Classification report:\n%s\n"
        % metrics.classification_report(d.target, predicted))
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

http://ukichang.hatenablog.com/entry/2016/07/11/013215
https://qiita.com/kenmatsu4/items/0a862a42ceb178ba7155
詳しい書き方が書いてあります。

http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics
その他の評価指標もいろいろあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.86%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    5900questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。