pythonを使って、手っ取り早くAI(人工知能)を体験したい

機械学習

結論

  • Scikit-learnを使用すると、手っ取り早くAI(人工知能)を体験できる
  • Scikit-learnには、モデル(AIプログラム)を作成するための様々なアルゴリズム(道具)が用意されている
  • Scikit-learnには、モデル(AIプログラム)を作成するためのデータが用意されている

経緯

AIプログラミングについて独学で学んでいました。プログラミングだけではなく、アルゴリズムや数学的な知識について学習していました。基本の「き」レベルの知識を習得できたころから、AIプログラムを作成してみたい欲求が出てきたので、いざ作ろうと思ったのですが、AIプログラムを作るための道具(フレームワーク)は、何を使用するのがシンプルなのか、判りませんでした。

いくつかの道具(フレームワーク)を使ってみて、初学の時点ではScikit-learnを使用するのが、手っ取り早くAIプログラムを作成することができると感じました。

Scikit-learnにあらかじめ用意されている乳がんの診断データを使用して、乳がんの診断データから陽性、陰性を判別するAIを作成したときのコードを掲載しました。

内容

プログラムの動作概要は下記のとおりです。

  1. 機械学習に必要なライブラリを読み込む
  2. 乳がんの診断データを読み込む
  3. 読み込んだデータを訓練データ、テストデータ、予測検証データの3つに分割する
  4. 訓練データでAI(モデル)を作成する
  5. テストデータで作成したAI(モデル)の精度を検証する
  6. 作成したAI(モデル)で予測検証データの陽性、陰性を判別する

プログラムはコメントやprint文を除くと18行になります。sklearnには道具やデータが用意されているので、上記の4.~6.の箇所は1行で作成でき、容易に作成することができます。

作成したプログラム

# ライブラリを読み込む
import numpy as np

# sklearnを読み込む
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC

# 乱数の種
# 実行結果の値を合わせるために指定する
random_seed = 777

# 乳がんの診断データを読み込む
cancer = load_breast_cancer()

# 入力データ:x (30次元)
# 正解データ:y (1次元)
x_orig = cancer.data
y_orig = cancer.target

# 最後のデータは、予測する際に使用するので、除外する。
x = x_orig[:-1, :]
y = y_orig[:-1]

# 最後のデータを保存する
x_last = x_orig[-1, :]
y_last = y_orig[-1]

# predict関数で扱えるデータは2次元なので、
# 1次元で保存された最後のデータを、2次元に変換する
x_last = np.array(x_last).reshape(1, 30)

# 入力データ、正解データを訓練データとテストデータに分割する
# 訓練データとテストデータの比率が、9対1となるように分割する
# x_train:訓練データ
# y_train:訓練データの正解データ
# x_test:テストデータ
# y_test:テストデータの正解データ
# train_test_split:訓練データとテストデータを分割する
# test_size:テストデータの比率
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1, random_state=random_seed)

# 分割後の情報を表示する
print('■ load_breast_cancerで読み込んだ乳がんの診断データ数')
print(f'全データの数: {x.shape[0]}')
print(f'訓練データの数: {x_train.shape[0]}')
print(f'テストデータの数: {x_test.shape[0]}\n')

# モデルを作成するときのアルゴリズムにサポートベクターマシン(SVC)を指定する
# kernel: linear、ply、sigmoidなどを指定できるが、rbfを指定する、詳細説明は割愛
# gamma、C:モデルのパフォーマンスに関わる値、詳細説明は割愛
algorithm = SVC(kernel='rbf', gamma=0.001, C=1, random_state=random_seed)

# fit関数で訓練データを学習する
algorithm.fit(x_train, y_train)

# テストデータを用いて、score関数で精度を測定する
score = algorithm.score(x_test, y_test)

# 精度を表示する
# 1に近いほど精度は高い
print('■ SVCで作成したモデルの精度')
print(f'score: {score:.4f}\n')

# 作成したモデルで予測してみる
print('■ 作成したモデルで最後のデータを予測してみる')
pred = algorithm.predict(x_last)
# 0:陰性、1:陽性
print(f'モデルが予測した結果: {pred}')
print(f'実際の結果: {y_last}')

実行結果

■ load_breast_cancerで読み込んだ乳がんのデータ
全データの数: 568
訓練データの数: 511
テストデータの数: 57

■ SVCで作成したモデルの精度
score: 0.8772

■ 作成したモデルで最後のデータを予測してみる
モデルが予測した結果: [1]
実際の結果: 1

コメント

タイトルとURLをコピーしました