前回のブログでAI(Artificial Intelligence) について書きましたので、今回は続いてマシンラーニングについて説明します。自分もまだ勉強中で基礎の知識しかありませんので、詳しく深いところまでは説明できませんが、もっと勉強してこれからのブログで整理しながら書こうかと考えてます。
定義
マシンラーニング(機械学習)は人が直接プログラミングせず、コンピュータが経験を重ねて学習できる”学習モデル”を構築する分野です。目標としてはデータを分析してモデルを調節しながら予測値の精度を向上させることです。
Tom Mitchell(トムミッチェル)教授の定義である、
A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.
Pによって測定されたタスクTのパフォーマンスが経験Eで向上の場合、コンピュータプログラムはあるタスクTのクラスとパフォーマンス測定Pに関して学習したと言われる。
が現在マシンラーニングの定義として一番採用されています。
マシンラーニングのカテゴリー
伝統的にマシンラーニングは”指導学習(Supervised learning)”、”非指導学習(Unsupervised learning)”、”強化学習(Reinforcemence learning)”の3つのカテゴリーに分けます。前回のブログで説明しましたが、簡略に説明すると
指導学習はデータセットにラベルがあり、データの特徴が分かる状態で学習します。その後、ラベルがないデータを分析すると答えを予測できるようになります。非指導学習はラベルがないデータセットを自ら学習しながら連関性を見つけ出し、分類します。強化学習はある時点で最適な行動を見つけ出すように学習します。結果によって得られる褒賞(reward)と懲罰(minus reward)によって行動を模索しながら、褒賞を向上します。
マシンラーニングのモデル
マシンラーニングは多数のモデルが使われてます。モデルはデータによって、目的によって適切に使われます。モデルの種類には大きく回帰(Regression)、SVM(Support Vector Machine)、ツリーなどがあります。今はまだ勉強中なので詳しくは説明できませんが、これから勉強した内容をブログに書こうと思っています。今回は回帰の種類である線形回帰(Linear Regression)、さらにその中の一種である単純線形回帰について説明します。
線形回帰分析(Linear Regression Analysis)
線形回帰分析とは従属変数yと1個以上の独立変数xの線形関係をモデリングする回帰分析種類の一つです。独立変数xの値によって従属変数yが変化する、簡単な数式ではy=xで表現できます。独立変数xが1個の場合には単純線形回帰、独立変数が2個の場合には多重線形回帰になります。
単純線形回帰
その前に少し数学的な話ですが、一次関数の基本について説明します。一次関数は y = ax + b(a、bは定数) で表現できます。ここでaは関数の線の傾き、bは切片で、独立変数xが0の場合y軸との交点座標です。つまり線形回帰は与えられた独立変数xと従属変数yでaとbを探しだし、一番最適な線を引く過程だと言えます。
仮のデータを利用して実際に線を引いて見てみます。
ゲームプレイ時間によって総30ステージの中クリアしたステージの数
ゲームプレイ時間 | 10 | 20 | 30 | 40 | 50 |
クリアステージ数 | 4 | 17 | 10 | 20 | 30 |
このようなデータがある場合ゲームプレイ時間をx、クリアしたステージの数をyにして座標平面上に表すと以下のようになります。
ここで各データでの誤差が最小限にできるように最適な直線を引くと、新しいデータ(独立変数x:プレイ時間)を入力してクリアステージ数を予測できます。
一番最適な線を引くためには傾きのaと切片のbが必要となり、そのために最小二乗法を使います。
※最小二乗法は数学なのでウィキペディアの説明を引用します。
最小二乗法(さいしょうにじょうほう、さいしょうじじょうほう;最小自乗法とも書く、英: least squares method)は、測定で得られた数値の組を、適当なモデルから想定される1時間数、対数曲線など特定の関数を用いて近似するときに、想定する関数が測定値に対してよい近似となるように、残差の二乗和を最小とするような係数を決定する方法、あるいはそのような方法によって近似を行うことである。
まずa(傾き)を求める数式は
(x-xの平均) * (yーyの平均)の合計 / (xーxの平均)^2の合計
です。
今のデータを使うと
ゲームプレイ時間(x)の平均:(10+20+30+40+50) / 5 = 30
クリアしたステージ数(y)の平均:(4+17+10+20+23) / 5 = 14.8
になります。
最終的に計算すると
((10-30)*(4-14.8))+((20-30)*(17-14.8))+((30-30)*(10-14.8))+((40-30)*(20-14.8))+((50-30)*(23-14.8))
(10-30)^2 + (20-30)^2 + (30-30)^2 + (40-30)^2 + (50-30)^2
= 410 / 1000
= 0.41
になります。
b(切片)は
yの平均 – (xの平均*a(傾き))
です。
今のデータを使うと
14.8 – (30*0.41)
= 2.5
になります。
したがって関数は
y=0.41x+2.5
になります。
この数式にx、yを代入して予測値を求めると以下のようになります。
ゲームプレイ時間 | 10 | 20 | 30 | 40 | 50 |
クリアステージ数 | 4 | 17 | 10 | 20 | 23 |
予測値 | 6.6 | 10.7 | 14.8 | 18.9 | 23 |
今の例はすごく簡単で独立変数xも一個しかないので一回の数式で終わりましたが、実際には独立変数はx以外にも複数あり、もっと複雑なケースが多いかと思います。その場合には平均二乗誤差を使って仮aとbの直線を引いて少しずつ変えながら誤差が一番少ない直線を見つけ出す方法を使います。それについてはまた次回にします。