scikit-learn(サイキット・ラーン)は標準的な機械学習ライブラリである。インストールは次のようにする:
pip install scikit-learn # または conda install scikit-learn
簡単な例として,多層パーセプトロン(multi-layer perceptron,MLP)による数字の識別(分類)を試す。データとしては,有名な MNIST ではなく,scikit-learn にサンプルとして入っている8×8ピクセル1797個の画像を使う。ピクセル値は0から16までの整数である。元々の出所はこちらで,MNIST の元となった NIST のデータベースからの抜粋である。
import numpy as np
from sklearn.datasets import load_digits
digits = load_digits()
print(digits.DESCR) # 解説を表示
digits
に入っている画像をいくつか表示させてみよう:
digits.images[0]
import matplotlib.pyplot as plt
plt.imshow(digits.images[0]) # あれっ,色が着いちゃった
plt.gray() # グレースケールに直す
この digits.images[0]
とまったく同じものが digits.data[0]
にも入っている。前者は8×8行列,後者は64要素の配列である。これが digits.data[1796]
まで続く。このそれぞれがどの数字に対応するかの正解が digits.target
に入っている。
まずはこれら1797組をトレーニング用とテスト用に分ける。以下では行列を大文字,ベクトルを小文字で表し,データを X
,ターゲット(正解)を y
としている。全体の3割をテスト用にする:
from sklearn.model_selection import train_test_split
X = digits.data
y = digits.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
実際に分類してみよう。幅20の隠れ層を1層だけ使う。
from sklearn.neural_network import MLPClassifier
model = MLPClassifier(hidden_layer_sizes=(20,), max_iter=500)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
正解率(accuracy)を求める:
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_pred)
混同行列を求める:
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_pred)
Last modified: