機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

【Python実装 - sklearn使用】digitsデータセットの3と8をSVMで分類

import matplotlib.pyplot as plt
from sklearn import datasets, svm
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.metrics import precision_score, recall_score, f1_score

# digitsデータをロード
digits = datasets.load_digits()

# 画像を 2 行 5 列に表示
for label, img in zip(digits.target[:10], digits.images[:10]):
    plt.subplot(2, 5, label + 1)
    plt.axis('off')
    plt.imshow(img, cmap=plt.cm.gray_r, interpolation='nearest')
    plt.title('Digit: {0}'.format(label))
plt.show()

# 3と8のデータ位置を求める
flag_3_8 = (digits.target == 3) + (digits.target == 8)
print('flag_3_8: {0}'.format(flag_3_8))

# 3と8のデータを取得
images = digits.images[flag_3_8]
labels = digits.target[flag_3_8]

# 3と8の画像データを1次元化
images = images.reshape(images.shape[0], -1)

# 3と8のデータのサイズ
n_samples = len(flag_3_8[flag_3_8])
print('n_samples: {0}'.format(n_samples))

# 訓練データのサイズ
train_size = int(n_samples * 3 / 5)
print('train_size: {0}'.format(train_size))

# 分類器の作成
classifier = svm.SVC(C = 1.0, gamma = 0.001)

# データを分類器に掛ける
classifier.fit(images[:train_size], labels[:train_size])

# テストデータのラベル
expected = labels[train_size:]

# 分類器でテストデータのラベルを予測
predicted = classifier.predict(images[train_size:])

print('Accuracy:\n',accuracy_score(expected, predicted))
print('Confusion matrix:\n',confusion_matrix(expected, predicted))
print('Precision:\n',precision_score(expected, predicted, pos_label=3))
print('Recall:\n',recall_score(expected, predicted, pos_label=3))
print('F-measure:\n', f1_score(expected, predicted, pos_label=3))

f:id:olj611:20210420202009p:plain

f:id:olj611:20210420234252p:plain

参考文献

Pythonによる機械学習入門

偉人の名言

f:id:olj611:20210420202516p:plain
つまづいたっていいじゃないか。にんげんだもの
相田みつを

動画

無し

目次へ戻る