Pythonで人工知能を開発したい人向けに、これだけは知ってほしいという知識をまとめました。本ブログだけで、PythonでAIを実装出来るはず。

まあ簡単に言うと、データをきれいにして、サーキットラーンというライブラリにデータ食わせれば、なんか予測モデルが作れるというお話です。

サーキットラーン(scikit-learn)には、いろいろな機械学習(AI)のアルゴリズムが入っています。その中でSVM(サポートベクターマシン)は、一番よく利用されています。なぜなら、比較的少ないデータでも精度の高いモデルを作ることが出来るからですね。また画像のような特徴量(説明変数)がかなり多いケースでも、高精度の分類モデルを作れます。2値分類では、最強のアルゴリズムです。

ちなみに実装するのは面倒だけど、とりあえずAIの概念を知りたいという方は、こちらの記事から気に入った本を読んでみるといいことがありますよ。

※環境はPython2.7を想定。

1.Pythonの基礎編

Python機械学習でよく利用する関数一覧。

1.1 Print文

#文字列の表示
print "hello world"

#数字の表示
print 12345 

1.2 if文

#条件分岐
abc = 8
if abc >= 10:
print "abcは10以上です"
else:
print"abcは10未満です"

1.3 for文

 ループ処理。配列の要素を順番に取り出す時に利用する。
#iは変数
for i in  [25, 36, 18, 60, 46, 32]:
 print i 

1.4 csv読み込み

csvファイルの読み込みは、numpyで読み込む方法と、pandasで読み込む方法の2つある。

◆numpyの場合
N次元配列になるので、列毎に同じ型かつ同じ要素数でないと読み込みエラーになる。
#numpyをインポート
import numpy as np
 
#delimiterで区切り文字を指定。skiprowsでヘッダ行を飛ばす。
csvdata = np.loadtxt("inputdata.csv",delimiter=",", skiprows=1)  

◆pandasの場合
表形式になるので、列毎に異なる型で異なる要素数でも読み込みOK。こちらを推奨します。
#pandasをインポート
import pandas as pd

#csv読み込み
csvdata = pd.read_csv('inputdata.csv')

# 特徴量Xと教師ラベルyを分割して格納
X = csvdata.iloc[:, 0:-1].values
y = csvdata.iloc[:, -1].values

※教師ラベルがcsvデータの右端列にあるケース

1.5 文字列フォーマット

x = "SUZUKI"
y = 26

#formatメソッドで変数を出力
print "I am {0},{1} years old.".format(x,y)

2.データの前処理

予測モデルの精度は、品質の高い学習データが必要。
属人的な業務になりがちだが、最低限必要な処理を一覧化。

2.1 欠損値の削除

#dropnaメソッドで欠損値を含む行を削除。axis=1で行を指定。
csvdata.dropna(axis=1) 

2.2欠孫値の補完

欠損値を削除すると、データ件数が足りなくなることがある。
その場合、欠損値を平均値や最頻値で補完する。
元データが数値データなら平均値で補完、分類ラベルなら最頻値で補完する。
#sklearnのImputerクラスのインポート
from sklearn.preprocessing import Imputer
 
#欠測値のインスタンスを作成(平均値補完)
#strategyの引数を'median'で中央値、'frequent'で最頻値で補完
imr = Imputer(missing_values='NaN', strategy='mean', axis=0)

#データを適合 
imr = imr.fit(csvdata)

#平均値で補完を実行
imputed_data = imr.transform(csvdata.values)
print imputed_data

2.3 カテゴリデータの変換

文字列のカテゴリデータは、数値に変換が必要。
#性別のカテゴリデータと対応する数値データのディクショナリを作成
human = {'man': 0, 'woman': 1, 'children': 2}
 
#カテゴリデータを整数に変換
csvdata['column'] = csvdata['column'].map(human)

2.4 データのスケーリング

データを正規化して、0から1の範囲にスケーリングする。
機械学習アルゴリズムは、誤差の最小化やマージンを最大化している。
そのため、各特徴量の影響度を共通化することで、より精度の高いモデルを作成しやすい。
(決定木やランダムフォレストではスケーリング不要)
#各データに対し、平均を引いて標準偏差で割る
csvdata_new = preprocessing.scale(csvdata)

参考記事:実務で使うとこだけ!python機械学習(AI)のデータ処理(pandas/scikit-learn)

3.scikit-learnでモデル作成

scikit-learnは、機械学習のディファクトスタンダード。
こいつが使えれば、機械学習の初心者卒業。
というかscikit-learnが使えれば機械学習ではほぼ困らない。

3.1 SVMでモデル作成

SVMは、線形SVMと非線形SVMの2つある。
線形SVMは、直線でしか分類できない。非線形SVMは曲線で分類できる。
迷ったらより表現力の高い非線形を選べば良い。

非線形SVMのパラメータには、コスト関数Cとカーネルの幅の広さgammaの2つある。
Cは誤分類のペナルティ、gammaはカーネルの滑らかさ。
共に値が大きいほど学習が進むが、その分過学習のリスクが高まる。
fitメソッドでモデル作成。
#sklearnのsvmとtrain_test_splitクラスのインポート
from sklearn import svm
from sklearn.model_selection import train_test_split

#分類器とパラメータの定義
estimator = svm.SVC(C=3.0, gamma=0.1) 

#データを学習用のデータとテスト用のデータに分割する
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=8)

#SVMでモデル作成
estimator.fit(X_train, y_train)

3.2 SVMモデルのパラメータ調整(Grid Search)

パラメータのCとgammaには、どんな値を設定すればいいのか。
最適なパラメータは、Grid Searchで求めることが出来る。
総当たりで一番精度の高いパラメータを教えてくれる。
#sklearnのgrid_searchクラスのインポート
from sklearn import grid_search

#グリッドサーチでパラメータ最適化
parameters = { 'C': [0.1, 1, 10, 100], 'gamma': [0.001, 0.01, 0.1]}

#スコアの良い物を探索
gscv = grid_search.GridSearchCV(svm.SVC(), parameters, cv=5)
gscv.fit(X_train, y_train)
 
#一番スコア良いパラメータを表示
reg_max = gscv.best_estimator_
 
#Bestパラメータを使って再学習
reg_max.fit(X_train, y_train)
 
#正答(青)&良い(赤)の結果をPLOT
plt.plot(X_test, y_test, 'bo-',X_test, reg_max.predict(X_test), 'ro-',X_test)
plt.show()

4.scikit-learnでモデル評価

4.1 モデルの評価(Confusion Matrix、正解率)

scikit-learnのpredict関数で予測データを作成。Confusion Matrix(混合行列)で評価。
#予測データ作成
y = estimator.predict(X_train)

#Confusion Matrix
print confusion_matrix(y_train, y)

#正解率
print accuracy_score(y_train, y) 

4.2 モデルの評価(交差検定)

scikit-learnのcross_validationで交差検定を行う。
train_test_split関数で学習データとテストデータに分割する。
モデル評価で最も参考にすべき指標。正解率だけだと過学習の可能性があるため。
#sklearnのcross_val_scoreクラスのインポート
from sklearn.model_selection import cross_val_score

#交差検定(データを10分割)
print cross_val_score(estimator, X_train, y_train, cx=10) 

参考記事:交差検定(クロスバリデーション)など機械学習の評価方法まとめ

もっと詳しくAI開発(機械学習)を知りたい方へ

もっと詳しく機械学習を知りたい方向けに、参考資料をまとめてみました。

①本:python機械学習プログラミング

米国Amazon.comでランキング一位の本です。日本でもベストセラーで星4.4の高評価を得た1冊です。入門書としても非常にお勧めできる本です。私もぼろぼろになるまで読みました。


②関連記事:機械学習の勉強方法

本ブログの記事です。機械学習の勉強方法を4STEPで解説しています。
AIエンジニアが教えるゼロから機械学習の勉強法

③オンライン動画:udemy「Pythonで機械学習:scikit-learnで学ぶ識別入門」

機械学習の基礎とプログラミングを動画で教えてくれるコースです。本を読んで勉強することが苦手な方におすすめです。

「udemy」というオンライン動画は、受講者が1500万人程いて、「機械学習」や「データサイエンス」のコースが豊富です。また大学の先生や実務経験豊富な方が講師をされており、教材の品質も非常に高いです。コースの大半が2000円以下で受講できます。

私も「Pythonで機械学習:scikit-learnで学ぶ識別入門」コースを受講し、仕事が終わった後に少しずつ受講して勉強しました。内容も大変分かりやすく、大学の先生でここまで分かりやすい説明をしてくれる方もいるのかと感動しました。自信を持ってお勧めできるコースです。



AIブームに乗るためにも、AI開発の知識は必須です。基礎を固めて少しずつ仕事で活かしていくことで、熟練度が上がっていくのだと思います。

合わせて読みたい:AI人材になるにはスキルよりまず職種を選択しよう

◆Pythonソースコード全文