【機械学習】 scikit-learn で不正解データを抽出する方法【Python】

公開日: : 最終更新日:2020/12/25 機械学習 , , , ,

Python の scikit-learn ライブラリを使って機械学習でテストデータを識別(2クラス分類)をしたときに、正解・不正解データを抽出する方法について紹介します。

scikit-learn で正解率を出したいのであれば、混合行列(confusion matrix)を出力すれば良いのですが、これだと正解・不正解データの数しか出力されません。

これだと、不正解データ(正しく識別できなかったデータ)にはどのような傾向があるかなどの分析ができないため、正解・不正解データを抽出したいなぁと思って調べてみました。

classifier.predict について

scikit-learn の「classifier.predict」関数にテストデータを与えると、識別結果(学習した識別器が判断したラベルデータ)がリストで返ってきます。

今回は「classifier.fit」関数で学習データを用いて既に学習済みの場合を想定しています。

2クラス分類でラベル「same」「diff」の場合の結果が以下のようになります。

これが、与えた全てのテストデータの識別結果となります。

テストデータのうち、正解ラベルが same のものを抽出して識別した結果を抽出したい場合は、以下のようにします。

labels_test_data は、テストデータのラベル(正解ラベル「same」or「diff」が並んだもの)となります。

一方、テストデータのうち、正解ラベルが diff のものを抽出して識別した結果を抽出したい場合は、以下のようにします。

numpy.where を使う

whrere は Numpy ライブラリの関数で、条件を満たす要素の位置(インデックス)を返してくれます。

先ほど抽出した、正解ラベルが same のものと、diff のものを利用します。

例えば「正解ラベルが same のうち、識別結果が diff のもの」を不正解データと扱うことができます。

コードで書くと以下のようになります。

リストの要素の位置(インデックス)が返ってくることが分かります。

不正解データの抽出

以上を踏まえて、不正解データ(識別器が誤って識別してしまったデータ)の抽出を行います。

不正解データのパターンとしては、予測した結果のうち、

  • 正解ラベルが same のうち、識別結果が diff と誤って判断してしまった(False Negative; FN)。
  • 正解ラベルが diff のうち、識別結果が same と誤って判断してしまった(False Positive; FP)。

の2パターンが考えられます。

where で抽出した リストの要素の位置 を iloc で与えて行番号から抽出を行います。

iloc は、pandas で行番号・列番号を指定して抽出を行う関数です。

●False Negative; FN

df_2_class_test は元の(学習に使用した特徴量なども含めた)データです。

●False Positive; FP

正解データの抽出

正解データのパターンとしては、予測した結果のうち、

  • 正解ラベルが same のうち、識別結果が same と正しく判断した(True Positive; TP)。
  • 正解ラベルが diff のうち、識別結果が diff と正しく判断した(True Negative; TN)。

の2パターンが考えられます。

●True Positive; TP

●True Negative; TN

抽出結果

結果が以下のように出力され、それぞれに該当する行と列だけ抽出されていることが確認できます。

関連記事

【機械学習】決定木(decision tree)について。

教師あり学習の一つである決定木(desicion tree)について勉強したことを書いていきます。

記事を読む

機械学習の手法のまとめ。

機械学習は、「与えられた入出力事例をモデル化する行為」のことで、ディープラーニングなどで注目を集めて

記事を読む

【TensorFlow】GPUを認識しない時の対処方法【Python】

TensorFlow で GPU を認識させようとしたときにハマってしまったので、その対処方法のメモ

記事を読む

【Weka】フリーの機械学習ソフトをインストールする方法。

Weka は、GUIで使えるフリーの機械学習ソフトです。 https://ja.wikiped

記事を読む

【画像認識】 Google画像検索結果を取得する方法 【google image download】

今回は、深層学習(DeepLearning)で画像認識をするための画像データの収集を、Google画

記事を読む

【機械学習】 scikit-learn で精度・再現率・F値を算出する方法【Python】

今回は、2クラス分類で Python の scikit-learn を使った評価指標である、精度(P

記事を読む

【Weka】アソシエーション・ルール(association rule)【機械学習】

フリーの機械学習ツール Weka でアソシエーション・ルール(association rule)を使

記事を読む

【深層学習】 TensorFlow と Keras をインストールする【Python】

今回は、Google Colaboratory 上で、深層学習(DeepLearning)フレームワ

記事を読む

【Weka】欠損データを自動的に補完するフィルタを使ってみた。

機械学習で用いるデータについてです。データは完璧なことに越したことはないが、通常は、ある属性の値が入

記事を読む

【Weka】CSVファイルを読み込んで決定木を実行。

フリーの機械学習ソフト Weka を使って、CSVファイルを読み込んで決定木(Decision Tr

記事を読む

【TensorFlow】GPUを認識しない時の対処方法【Python】

TensorFlow で GPU を認識させようとしたときにハマってし

【耳コピ】音楽ファイルを楽器ごとに分離する方法【Spleeter:フリー】

今回は、mp3 などの音楽ファイルをボーカル、ベース、ドラムなどの楽器

【Chainer】手書き数字認識をしてみた【Deep Learning】

Chainerを用いて、ニューラルネットワークを構築し、手書き数字認識

【Spyder】引数のあるスクリプトを実行する方法。

Python の統合開発環境(IDE)である Spyder では、簡単

【Anaconda】Prompt 上で Git コマンドを実行する方法。

Anaconda のコマンドプロンプト(Anaconda Prompt

→もっと見る

PAGE TOP ↑