機械学習って結局なにをやってるのか(教師あり学習編)
最近ちょっと会社でも機械学習についてちょっと関わっているので、自分の理解のためにもまとめておきます。対象となるのは「数学はそこまで苦手ではないけど、難しい数式読むのはめんどくさい」って人になるかなと思います。
機械学習にもいろいろありますが、ここでは「教師あり学習」を中心に説明します。
※ 誤りがありましたらご指摘いただけるととても助かります。
機械学習とはなにか
いろいろな説明がありますが、「いままで人間の感覚で判断していたものをコンピュータに判断させる」という理解で良いと思います。
人間が判断する際に使っていたデータや、その判断結果をコンピュータに学習させることで、コンピュータが人間に近い判断をしてくれるようになります。
具体的な例をあげると
- 住宅の条件(間取り、築年数、駅までの距離など)から住宅価格を決定する
- 画像に写っている動物を当てる
- タイタニック号でどういった人物(性別・年齢・チケットの料金・子供の有無など)が生き残ったか
などがあります。タイタニック号はKaggleのチュートリアルとしてとても有名かと思います。
機械学習の種類
機械学習といっても教師あり学習・教師なし学習・強化学習などいろいろあります。
ここでは、教師あり学習のみ扱います。
教師あり学習
教師あり学習とは「入力データ」と「正解データ」を用いてモデルを作成し、入力を与えられたときの出力を予測するというものになります。ここで言うモデルは入力値が与えられたときになんらかの出力を出すものです。学習フェーズでモデルを作成し、予測する際や運用フェーズにはそのモデルを使用します。
分類と回帰
教師あり学習の中でも「分類」と「回帰」というものに分かれます。
分類
カテゴリなどの離散値を予測します。
例えば、
- メールがスパムか否か
- 画像に写ってる動物か犬か猫か
- タイタニックで生き残るか死ぬか
などが分類になります。
回帰
連続値を予測します。
例えば、
- 住宅価格
- 株価
などです。分類と違って値そのものを予測します。
分類のやり方
分類のやり方を説明します。訓練データに対して、ある特徴量1、2があってそれぞれの出力が下記のようになったとします。
このとき、この「結果1」、「結果2」を分ける直線が引けそうです。
もしこの直線が引ければ、新たな結果のわからないデータが与えられたとき、特徴量1が◯以下かつ特徴量2が△以上なら「結果1」になると予測することができます。この直線を引くことが、教師あり学習においてモデルを作成するということになります。
実際は特徴量がもっと多かったり、きれいな直線が引けるとは限らないのですが、n次元でも問題なくこの考え方は適用できる上、直線が引けない場合にも使えるアルゴリズムが存在します。
今回はこの直線(n次元空間だと超平面という)を引ける「線形分離」できる問題のみ考えます。
パーセプトロン
前項で紹介した、線形分離を行うためにパーセプトロンという手法を紹介します。特徴量が2つだけの場合は、下記のような式になります。
sum = w1 * x1 + w2 * x2 + b (1) sum > 0 → 結果1 sum ≦ 0 → 結果2
x1, x2が特徴量
w1, w2が重み
bがバイアス項になります。
特徴量は、入力される情報で、タイタニックの例では年齢・性別・出発した港などになります。
重みは学習によって決定していく値です。
バイアス項については(1)式の値を調整するもので、(1)式が0より上がちょうど境目になるように決定されます。
パーセプトロンの感覚的理解
(1)式のwはどのような意味を持つのかをちょっと考えてみます。
タイタニックを例にします。
特徴としてはチケットの料金・出発した港とします。
例えばタイタニックの例の場合、チケットの料金が生存確率に関係していて、出発した港はほとんど生存結果に関係がありませんでした。
つまり
x1 → チケットの料金
x2 → 出発した港
としたとき、x1の情報のほうがx2より結果に関係してくるということなので
w1 > w2になりやすいです。
これは実際に学習させていってパラメータを見ると確認することができます。
重みの決定方法
さて実際の重みの決定方法ですが、パーセプトロンだと確率的勾配降下法というのがよく使われます。詳しい説明は省きますが、全体で正解データと誤差が少なくなる(正解ラベルがより多い)ように値を調整していきます。