(第1回)pythonでAIプログラムを作成【Anaconda】

目次

AIとは
実行環境
AIプログラム作成の大まかな流れ
機械学習
学習モデル作成

AIとは

昨今話題を耳にする機会も増えているAI、みなさんはどのようなイメージをお持ちでしょうか。
SFもののファンタジー創作に登場するような、自分で考え、学習し、判断を下して実行するロボットのキャラクターを想像するでしょうか。
現実はそこまでの域までは到達していませんが、近い将来そんなロボットが登場するかもしれません。

AIとは、上記のロボットの頭脳にあたる部分であり、複雑な思考を実現したプログラムです。
従来のプログラムと異なり、入力Aに対しBを出力といった決まった動作ではなく、
プログラム自身が判断した結果が出力され、判断基準もプログラムが学習して決定します。

今回はAI技術に触れてみたいと思います。

実行環境

以下の環境でAIプログラムを作成します。

OS実行環境使用言語
Windows 10Anaconda for WindowsPython

AIプログラム作成の大まかな流れ

プログラム作成
機械学習
入出力

AIプログラムの事を学習モデルと呼びます。
学習モデルは以下のように作成します。
まずは普通のプログラム同様、プログラムを作成しコンパイルします。

次に、コンパイルしたプログラム(学習モデル)に学習データを与え、
入力と出力のパターンを覚えさせます。この工程を機械学習と呼びます。

与えた入力と出力のパターンから、学習モデルは法則性を見つけ出し、
入力に対して学習モデル自身が出力を判断できるようになります。
機械学習を行った学習モデルに入力を与えると学習モデルが判断した結果が出力されます。

近年目にする機会も多い画像認識も膨大な画像データから機械学習を行った学習モデルの一つです。

機械学習

機械学習についてもう少し細かく見ていきます。
少量の学習データを与えただけでは学習モデルは大雑把な判断しかさせる事ができず、とんちんかんな出力を行いますが、
数万件以上の膨大なデータを与えるとかなり正確な判断を下すようになります。

学習も1回だけでなく、違う学習データを与え、繰り返し学習を行わせる事で精度を上げる事もできます
(反復学習と呼びます。与える学習データによっては反復学習時にかえって精度が落ちるため、
学習データの選別(データクレンジング)や後述のバイアス値の調整をする必要があります)。

機械学習2

また、学習の方法も様々で、作成する学習モデルによって異なります。
学習には重みというバイアス値を与える事ができ、入出力値間の法則性を判断する境界を変更する事ができます。

今回はサンプルとして、特徴をいくつか与えると結果を予測して出力する学習モデルを1つ作成しました。

学習モデル作成

Jupyter例

プログラムの作成はAnacondaJupyter Notebookを使用しました。
ブラウザ上のエディタでソースコードを作成し、Pythonプログラムを実行します。
py形式で作成したプログラムをダウンロードし、コマンドプロンプトから実行する事もできます。

今回は以下のプログラムを作成しました。

①学習モデルを作成し出力するプログラム
②学習モデルと学習データを呼び出し、学習を行わせるプログラム
③学習モデルを呼び出し、入力値を与え、結果を学習モデルに問い合わせるプログラム

学習モデルはプログラム内でファイルとして出力されます。
Pythonには便利なライブラリが豊富に存在し、機械学習や学習モデルの出力を容易に行う事ができます。
今回はscikit-learnというライブラリを使用しています。

from sklearn import svm                # 機械学習に使う 
from sklearn.externals import joblib   # 学習モデルファイルの入力・出力に使う 

#------------------------------------------------------------------------- 
#   中略 
#------------------------------------------------------------------------- 

# 機械学習 
clf = svm.SVC(gamma = 0.1, C=100)      # 機械学習の設定。gamma・Cは重み(バイアス値) 
clf.fit(test_x, label_i)               # 機械学習。test_x:特徴データの配列  label_i:正解ラベルの配列 

# 学習モデルの外部出力 
joblib.dump(clf,'test_learn_model.pkl',compress=True)
入出力

③に入力値(色・形・高さ・幅)を与えた結果が下記になります。
②で与える学習データや重みを変えるとこの出力結果は全く異なるものになります。

次は画像認識を行う学習モデルを作成してみたいと思います。

事業だけでなく、身近な何気無い分野にまで導入されてきているAIですが、
私も理解を深め、情報を発信していきたいと思います。