【Scikit-learn】ニューラルネットワークの識別率を計算

この記事では、Pythonと機械学習ライブラリ「scikit-learn」を用いて、ニューラルネットワーク(NN)で学習し予測した結果から識別率を求める方法について解説します。

ニューラルネットワークの識別率

前回の記事「【Scikit-learn】ニューラルネットワークで学習・予測」ではパーセプトロン方式で学習と予測を行いました。
今回は、それを用いてCSVファイルのデータを読み込んで学習・予測し、その識別率を表示させてみました。

関連記事
1 【Scikit-learn】ニューラルネットワークで学習・予測
2 ニューラルネットワークの原理・計算式・特徴

書式

sum(pred == data['x3']) / len(data[['x1', 'x2']])

※一致している要素の割合(正解率)を計算

ソースコード

サンプルプログラムのソースコードです。

# -*- coding: utf-8 -*-
import pandas as pd
from sklearn.neural_network import MLPClassifier

def main():
    # データを取得
    data = pd.read_csv("data.csv", sep=",")

    # ニューラルネットで学習
    clf = MLPClassifier(solver="sgd",random_state=0,max_iter=10000)

    # 学習(説明変数x1, x2、目的変数x3)
    clf.fit(data[['x1', 'x2']], data['x3'])

    # 学習データを元に説明変数x1, x2から目的変数x3を予測
    pred = clf.predict(data[['x1', 'x2']])

    # 識別率を表示
    print (sum(pred == data['x3']) / len(data[['x1', 'x2']]))
    
if __name__ == "__main__":
    main()

data.csv

x1,x2,x3
45,17.5,30
38,17.0,25
41,18.5,20
34,18.5,30
59,16.0,45
47,19.0,35
35,19.5,25
43,16.0,35
54,18.0,35
52,19.0,40

実行結果

サンプルプログラムの実行結果です。

0.4

識別率は40%となりました。
(今回は目的変数の推測値と実値が完全一致した場合のみ識別できたと判定)
データ数を増やせば高くなると思います。

関連記事
1 Scikit-learn入門・使い方
2 Scikit-learnをインストールする方法
3 Python入門 基本文法
関連記事