ゼロから始める機械学習(1) そもそも機械学習とは何か？

今日から「ゼロから始める機械学習」というタイトルで連載を始めます。

これから機械学習を学び始めるシステムエンジニアの方が、前提知識無しで読んでいただけるよう心がけて執筆していきますのでよろしくお願いいたします。

初回はまず**そもそも機械学習って何か**について説明します。

#**機械学習という名前の由来**

なぜ機械学習という名前が付いているのか？機械という単語、学習という単語はそれぞれ何を指しているか説明します。

##**機械とは何か**
機械学習の**機械**が指しているのはコンピューターです。機械学習用に特別なコンピューターがある訳ではありません。性能の良し悪しはありますが、基本的にはあなたのが使っているパソコンと同じものです。

##**学習とは何か？**
コンピューターを使ってデータに潜むパターンを検出し、それを新たなデータに適用することで**おそらくだいたい正しい予測**を行うことを**学習**といいます。

データを元にパターンを検出する処理を、擬人化した表現で学習とよんでいます。これはこれまで主流だったコンピューターの使い方と異なっています。

###**これまでのコンピューターの使い方**
従来はやりたいことの手順をプログラムに書いてコンピューターに実行させるのが一般的でした。

このやり方の場合、入力と手順が正しければ必ず正しい答えが出てきます。

三角形の面積の場合、下記手順をプログラムに落として底辺、高さ、のデータを入力すれば必ず正しい面積を計算してくれます。

```math
三角形の面積 = \frac{底辺\times 高さ}{2}
```

###**機械学習のアプローチ**
しかし世の中には手順を説明できないことががたくさんあります。

例えばカードの不正使用にはいろいろな手口がありますし、新たなものも出てきますから「こういう使い方だと不正使用である」という手順を説明するのは困難です。

もう一つの例は迷惑メールの検知、迷惑メールにもいろんなものがありますから検知の手順を作するのは困難です。

手順が説明出来ないものはプログラムに落とせないので、コンピューターでこの手の処理を扱うのは難しいとされていました。

そこで発想を変えて手順がうまく説明できない処理を、過去のデータを元に傾向を見つけて、新しいデータが来たとき**おそらくだいたい正しい**予測をするというのが機械学習のやり方です。

データを元に傾向を見つける処理を擬人化した表現で**学習**と言っています。ここから学習の仕方を具体的にみていきます。

#**機械学習で出来ること**
前の章で機械学習では手順を説明できないことについて**おそらくだいたい正しい**答えを出すと書きましたが、何でもかんでも出来るわけではありません。

機械学習で出来ることをざっくり要約すると、仕分、数値予測、要約の３つです。以下、もうちょっと細かくみていきましょう。

##**分類**
データを元にあらかじめ定義された項目への分類を行います。

取引データを元にその取引が不正なものか、正常な取引かを仕分けする処理などがこれに該当します。

##**回帰**
データを元に数値を予測します。

取引データを元に将来の需要を予測する処理はこれに該当します。

##**クラスタリング**
データを元に似た傾向を持つものを集めたグループを作成します。

コンピューター側でデータ特性の似たものをグループ化するので出来上がったものが役立つ意味のある分類になっているかは人間が判断します。取引データを元にユーザーを異なる購買特性を持ついくつかのクラスターに分ける処理などがこれに該当します。

##**次元削減**
データの複数の属性をできるだけ情報を失わない形で要約します。

４教科（国語、社会、数学、理科）のテスト結果（４次元）を、理系特性という一次元の属性に要約する処理はこれに該当します。次元削減を行い情報を要約したデータを機械学習の入力として使う、という使われ方をされることが多いです。

*なぜそんなことをするのかは今後の連載で説明する予定です*


#**機械学習の手法**
機械学習には大きく分けて３つの手法があります

##**教師あり学習**
正解付きのデータを使って学習する方法です。

カードの不正利用を例にすると、過去の取引データのひとつひとつに正常、不正の情報をつけたものを入力に「こういう場合は正常、こういう場合は不正」というパターンをあぶり出します、あぶり出したパターンを使って不正なカード使用の検出を行います。

##**教師無し学習**
こちらはデータに正解はついていません。

クラスタリング、次元削減の処理ではこの手法が使われます。

*教師無し学習は具体的な活用方法含めて説明した方が分かりやすいので、
ここでは名前の紹介説明にとどめ、今後の連載で詳細説明する予定です*

##**強化学習**
こちらは囲碁チャンピオンに勝ったAlphaGoでも使われていた方法で、最近注目を浴びています。

AlphaGoは最初に過去のプロの対局情報を元に教師有り学習を行いました。過去のプロの対局情報をお手本に同じ手を打つように学習していくイメージです。ある程度学習がすんだら今度はAlpahtGo同士を戦わせました。これには一手一手の正解はありません、最終的に勝利したか負けたかという結果をフィードバックデータとして使って学習を行っていきました。これが強化学習と呼ばれるものです。

最新のAlphaGo Zeroは教師有り学習のステップ無しで、最初から強化学習を使って囲碁名人に勝ったAlphaGoを上回る強さを実現しています。

#**機械学習の手順**
ここでは機械学習を行う際の一般的な手順を説明します。

##**データ準備**
機械学習で扱える形にデータを整形するステップです。
コンピューターが扱うことができるのは数値データですから、まず機械学習の場合も入力前にデータを数値化する必要があります。画像データ、動画データ、言語データそれぞれ数値化のお作法があります、詳細は今後の連載で紹介していきます。
数値化したデータは学習用、評価用に分けられます、それぞれの使い道はこの後説明します。

##**学習**
機械学習の実装にはいろんな実装方法があります、サポートベクトルマシン、K-means、etc...、最近はやりのディープラーニングもその一つです。目的に応じて適切な手法を選択し、準備した学習用データを使って学習を行います。

*各実装方法の詳細にいては今後の連載で説明していく予定です*

##**評価**
学習が完了した後に、適切に学習が行われ、要件を満たす精度が達成できているかを確認します。

###**求める精度が出ているか？**
機械学習では必ず正しい答えを出すわけではありませんから*おそらくだいたい正しい*答えを導き出すので間違いが許容範囲に収まるかを確認することが重要です。また許容範囲は単に正解率９９％とひとつの数字では表せません。

ひとつの数字では表せないとはどういうことか？分類を例に説明します。

データを元にがんの陽性、陰性を分類する処理を考えましょう。この場合下記２つの間違いが発生する可能性があります。

1. 本当はがんなのに陰性と診断する
1. 本当は健康なのに陽性と判断する

がんの検査の場合、1.の間違いの最小化が大きな目的になると思います。

1の間違いを犯すと本当は治療を受けるべき人が見落とされてしまいます。

2.の間違いの場合、さらなる精密検査で偽陽性だったことが判明するので 1.と比べれば許容できます

*偽陽性と判定された人の精神的負担は大きいでしょうから、もちろん最小化したいですが 1.よりも優先度は低いでしょう*

このように機械学習の結果を判断するには複数の要素を考慮して評価する必要があります。

*この評価に使われる手法については今後の連載で説明していく予定です*

###**過学習が発生していないか**
学習データに特価しすぎた学習をしてしまうと、学習データでは高い精度を出すが、新しいデータを使うと大きく精度が下がってしまう場合があり、これを過学習と言います。

評価のフェーズでは学習で使わなかった評価データを使って過学習が発生していないか確認します。

##**実行**
実際の用途に機械学習を活用するフェーズです。実行フェーズに入っても定期的に評価を行い、目的とする精度を保てているかを確認する必要があります。

#**まとめ**
今回は機械学習とは何かをざっくり説明しました。次回から詳細を記していきたいと思います。