機械学習 & ディープラーニング

参考書籍
人工知能とは
人間と同じような知的処理を行うことが出来る技術や機械。
人工知能脳の分類
- 強い人工知能
- 知能そのものを模倣することで、人間と同じような認知的状態を持った機械。ドラえもんとか。
- 弱い人工知能
- 人間の行動を模倣することで、人間の能力の一部を代替できる機械。オセロとか将棋のコンピュータプレイヤーとかがそれにあたる。自我などはない。
分野の種類
- 汎用人工知能
- 対象とする分野が広く、設計時に想定されてない状況にも対処できる。料理も子育ても掃除もできるとか。
- 特化型人工知能
- 何らかの特定のタスクのみに特化している。ルンバなど。
人工知能の発展段階
- レベル1
- 単純な制御プログラムのこと。制御工学やシステム工学と呼ばれる技術。
- レベル2
- 古典的な人工知能。入力と出力の組み合わせが多いため、レベル1よりは複雑な問いには答えられるが、知識の枠組みから外れると答えられない。
- レベル3
- 機械学習を取り入れた人工知能。データをもとに、ルールや知識を自ら学習していく。
- レベル4
- ディープラーニングを取り入れた人工知能。機械学習では通常、データの特徴をよく表す「特徴量」の導出方法を前もって組み込む必要があるが、ディープラーニングではデータを読み込むだけで特徴量を行ってくれます。
機械学習は学習ルールを教える必要がある。ディープラーニングは勝手に学習すべきことすら見つけて学習する。
機械学習(ML)とは
適切な処理を行えば、入力されたデータを元に数値を予測したり最適化したり出来るため、様々な分野で活用されている。
コンピュータがより高度な認識能力を持つためには、どのような基準をもとに振る舞えば良いか決める必要がある。その基準をパラメーターという。
例えば、大人か子供かを判定するのに、身長によって判断しているとする。この場合、身長がパラメーターにあたる。
機械学習は入力されたデータをもとに、もっとも正しい振る舞いをするぱらを自動的に決定できるため、人工知能発展の鍵と見られています。
機械学習以前は、暗記学習が主流だった。しかし、これは未知のデータに対しては答えが出せない。
しかし、ビックデータのお陰で、大量のデータに低コストにアクセスが可能になったことで、状況が変わった。ビックデータを使って試行錯誤することで、未知のデータに対しても答えが出せるようになった。しかし、必ずビックデータが必要というわけではない。
機械学習プロセス
学習モデル。
あるデータを入力すると、より適切な意思決定のためのデータを出力してくれる人工知能の脳。
最初に行うのは、期待される出力データ(ラベル、教師信号)と学習モデルが計算した結果を比較し、学習モデルを修正する作業。修正を繰り返した後に、最終的な学習モデルを保存すると、学習処理を終えたことになる。なお学習モデルは、単にモデルとも呼ばれる。
数字の分類モデルの例。
用意するのは、大量の手書き数字データ(0-9)の画像データ。この画像データは、画像とその画像が表す数字(正解)がセットになっている。これらを学習モデルに入力すると、最初はでたらめな値が出力される。0の手書き数字の画像を入力しても、1が出てくることがある。このでたらめな出力と正解を比較し、学習モデルを修正する。修正を繰り返すことで、次第に出力値が正解の数字になっていく。
機械学習が扱う問題(分類と回帰)
- 分類
- どのデータがどの種類に属するかを見る。入力されるデータがいくつかのグループに分けられることを前提としている。グループ内での細かな違いは無視する。
- 回帰
- データの傾向を見ることが目的。分類とは反対に入力されるデータを1つのグループとして暑かった上で、そのグループ内での違いを分析することになる。
こうやって分けれそうを見つけるのが、分類。
このデータにはこういう傾向があるぞが、回帰。
具体例。
地図上にA店とB店というチェーンの小売店が2店舗あるとする。地図内に存在する家族をランダムに抽出し、「A店とB店のどちらをどれくらい利用するか」を調査する。
まずは分類を行ってみる。分類では、2つの小売店のうち、利用する割合によって、各家族を「A店派」「B店派」で分ける。どの家族も言えから近いスーパーを利用していることが分かった。
これを分類するために、地図上に線を引く。この線はA店派、B店派をできるだけ引き離すように書く。この線を参照すれば、調査を行わなかった家族であっても、A店派かB店派の予測がしやすくなる。
次に回帰。回帰では各家族におけるA店とB店を利用する割合をそのまま使う。これを地図上にプロットする。やはり、自宅に近いスーパーを利用する確率が高いとわかった。この傾向をよく反映するように先を引く。今回の場合であれば、A店側をA100とし、B店側をA0つまり、B100とする。この線のどこに近いかどうかで調査を行なわなかった家庭であっても、A店とB店の利用割合を予測できる。
ディープラーニング(DL)とは
学習モデルを正解しやすいように人間がデータを加工するのではなく、学習モデルが自ら特徴量を抽出して学習していくという点で大きな違いがある。
従来の機械学習には大きな欠点があった。それは手元のデータをいきなり入力できず、モデルが学習しやすいように、あらかじめ人間がデータを加工しなければならないという点。ここでの加工とは、特徴の強弱を表す数値(特徴量)を数学的に算出すること。手書きの文字認識であれば、画像の「線の曲がり具合」「字の輪郭」「先の繋がり方」音声であれば「声の高さ」「声の大きさ」など。
しかし、この特徴量を算出することは簡単ではない。たとえ数値化に成功しても、そのモデルがその特徴を使ってうまく判別してくれるかが分からない。
そこで登場したのが、ディープラーニング。
ディープラーニングは、脳の神経回路を模したニューラルネットワークと呼ばれる学習モデルを用いる機械学習のこと。入力と出力の間にある隠れ層が深いことから、そのように名付けられている。
ディープラーニングは、最適な特徴量を自動的に抽出できるため、これまでの機械学習を上回る結果を出した。
機械学習の基礎知識
教師あり学習の仕組み
人間がデータのラベルを通じて教師の役割を果たし、機械にお手本を教えてあげる手法。
正解となる答えをラベルといい。答えが含まれたデータをラベルつきデータ(もしくは訓練データ)と呼ぶ。
最終的にラベルのないデータ(テストデータ)を正解させる。
- 分類
- 答えが「犬・猫」、「小学生・中学生・高校生・大学生」などのカテゴリになっていることが特徴。ここでいうカテゴリは、連続した数値ではない(離散値)、大小の順序がないという条件を満たす。
- 数字の分類は、一見数字が連続しているように見えるが、手書きの1桁の数字を当てる分類の場合、認識画像の数値が正しいかに興味があって、大小は興味がない。したがって答えはカテゴリ分けであると言える。
- 回帰
- 答えが連続した数値(連続値)になる。株価予測などはこれにあたる。
誤差を小さくしていくことで、正解できるデータの数を増やす。
分類では、交差エントロピー誤差、回帰では平均2乗誤差と呼ばれる誤差が使われる。
教師なし学習の仕組み
データ構造や法則をアルゴリズムによって解析し抽出する手法。人間が正解を教えることなく学習を進行させる。
教師あり学習のゴールは、「未知のデータに対して正しい回答する」に対して、教師なし学習は、「データの特徴を捉える」がゴールとなっている。
なんとなく人間はものを区別してみている。例えば、野菜の色などで分けたり、そういった特徴を捉える能力をアルゴリズムにより再現することを目指す。
クラスタリング
クラスタリング手法
- 階層的クラスタリング
- 特徴の似ているクラスタ同士を1つずつ結合させていき、最終的に1つの大きなクラスタになるまで繰り返す手法。
- 非階層的クラスタリング
- はじめにクラスタ数を設定する、そのクラスタ数で最もよくデータを分けることが出来るようにクラスタリングを行う手法。K平均 k-means法が代表的
次元削減
データの次元を減らして、可視化を行う。
データから重要な部分だけ抜き出し、あまり重要ではない情報を削減する。
次元とは例えば、データの項目数。例えば、ある中学生のデータとして、英語・数学・国語・理科・社会の成績という5つの項目があるならば、5次元データとなる。
次元削減の一例としては、データの可視化が挙げられる。我々は多次元データを直感的に理解するには、データの次元を人間が理解できる3次元以下に落とさなければ可視化できない。
例えば、横軸に数学の点数、縦軸に国語の点数として2次元グラフを各ことで、このデータが文系と理系の2クラスタから構成されてると推測できる。しかし、本来ふさわしいのは英語と国語の合計点や英語:国語:社会を2:2:1の割合で加えた点数かもしれないなど。教師なし学習で次元削減を行うとデータの特徴がわかりやすい軸を求めることができ、データの可視化を行うことが出来る。
強化学習の仕組み
最適な行動を学習する。
与えられた環境とのやり取りから、自らの成果を最大化するように何度も試行錯誤を繰り返し、最適な挙動をするように学習すること。教師あり、なしとは異なる問題設定を持っている。
教師あり学習では、明確な正解があったが、強化学習では、その行動がどれだけよかったかを報酬として与え、その報酬が高くなるように仕向ける。これにより最適な行動を学習させる。
統計と機械学習の違い
統計は、なぜこのようなデータが出るのか?を教えてくれる。データを説明するための分野。
機械学習は、これからデータがどのように変わっていくかを教えてくれる。データを予測することにフォーカスした分野。
なぜこうなったかの理由がほしいなら、統計。今日なにするべきかを知りたいなら機械学習。
機械学習のプロセスとコア技術
機械学習の基本ワークフロー
そもそも、機械学習に向いてるかは考えましょう。
全体設計
問題の定式化
ここを間違えると、手戻りすることになるので重要。
機械学習でどんな情報を得たいかを具体的に掘り下げる。
ネット通販の収益を増やすには -> 商品をおすすめしたい -> 顧客がある商品を買う可能性を予測
システム設計
どうやってデータを取得する。最終的にどういった形で利用するか。
データの収集
どっからデータ持ってくるか。
機械学習の設計とシステムの運用
機械学習アルゴリズムの選択
よさそうなアルゴリズムを選択する。
データの整形と特徴量のエンジニアリング
どのようなデータを入力するかは重要。アルゴリズムが受け取ることが出来るデータの形式は決まっているため、別の形式で取得される場合には、変換する必要がある。
また、機械学習では、データの一つ一つの項目のことを特徴量と呼ぶ。取得可能な特徴をそのまま全て使用するとかえって制度が悪くなる場合もあるため、余分な特徴量の削除や別の形式に変換する。または新たな特徴量を組み合わせによって作るなど。
モデルの学習
収集した学習データを利用して、機械学習モデルを学習させる。
予測結果の検証と評価
予測結果が出たら、検証及び評価する。必要に応じて特徴量エンジニアリングまで立ち戻る。どのくらいの精度が出ればOKとかを決めておこう。
ハイパーパラメーターのチューニング
予測結果の検証と評価を受けて、性能向上のためのアルゴリズムに指定する値の一種であるハイパーパラメータを調整する。
システムの運用
性能が十分に出たらシステムに組み込む。ただし、機械学習システムは運用開始後も継続的な性能検証が不可欠。収集されるデータの性質が変わればサイドモデルの学習が必要になることがある。
データの収集
がんばる
データの整形
カテゴリデータの整形
カテゴリ変換したあとの数値の大小は比較できない。なぜなら番号を割り振っただけで数値に意味はないから。
- ラベルエンコーディング
- 各カテゴリに一つの数字を割り当てる
- カウントエンコーディング
- そのカテゴリデータが出現した回数を割り当てる。
- One-Hotエンコーディング
- 列の名前をカテゴリ名にし、一致した列には1、それ以外の列に0を当て始める。この場合、カテゴリの個数分だけ列の数が増えることになる。
数値データの整形
- 離散化
- 連続した値をある区分に分けること。遊園地の来場者数を予測するとき、データの値に来場者の年齢があるとして、この年令を年代別にわけるのが離散化。来場者の年齢をそのまま使うと、1歳の差で別の値とされるので、データの特徴として表す値として扱いづらい。そこで年代別に大きく区分すれば、年齢の僅かな違いを吸収できる。
- 対数変換
- 値のlogを取ること。正の値を持つ数値データにおいて、長い裾を短く圧縮し、小さい値を拡大することが出来る。機械学習では正規分布に近いデータが効果を発揮しやすいため、対数変換は有効な手段の一つ。
- スケーリング
- データによって値の取りうる範囲が決まってない場合がある。例えば、遊園地の来場者数は上限が決まっていない。しかし、線形回帰やロジスティクス回帰などのアルゴリズムは値の大きさに影響されやすいため、値の範囲を変換する必要がある。そこで代表的なスケーリング方法にmin maxスケーリングと標準化がある。これを使ういことで最大を0最小を0に設定すること、データの範囲を0~1にすることができる。標準化は値の平均を0、分散を1にすること。
モデルの作成と学習
モデルとは
入力されたデータからある出力(入力データに対する分類や予測)を導き出すための数理モデルのこと。「何かを入れると何かが出てくる箱」がイメージしやすい。箱は入り口の形や大きさ異なっていて、それによって居れられるものが決まる。同様に箱から出てくるものも形は決まっている。数学における関数にあたる。
最初はモデルに入力をしても、デタラメな答えが出てくる。これらのモデルに対してよりよい出力が出るように修正することを学習と呼ぶ。
訓練誤差
入力データにフィットするような直線モデルのパラメーターに探すには、どのような処理が必要か。
まずは、モデルに適当なパラメーターを入れて出力を計算すると、必ず出力データは正解と大きな違いが見られる。この差のことを訓練誤差という。
モデルとデータの差が十分に小さくなったら、学習が終了。
繰り返し、学習する(イテレーション)
- バッチ学習
- 1回の学習で全部のデータを読み込む。
- ミニバッチ学習
- 1回の学習で設定したバッチサイズを学習する。
- オンライン学習
- データを一つひとつ学習する。
バッチ学習とオンライン学習
バッチ学習は、全データを一括で処理する手法であるため、モデルの更新に時間がかかる。一方でオンライン学習はデータを少しずつ処理しつつモデルを拘束で更新していくため、モデルの更新をひんぱんに行う必要のある状況で役立つ。
バッチ学習
全てのデータを使ってモデルの学習を行なう必要がある。そのため計算に時間がかかるため、モデルの学習と予測は切り離して行われる。このように予測を切り離して学習する方法がオンライン学習と呼ばれる。
また、バッチ学習では、新しいデータをモデルに適用したい場合、新旧データを全てを入力として学習をやり直す必要がある。これではリードタイムがかかりすぎるため、例えば状況が刻々と変わる株式市場では、バッチ学習は不利といえる。
オンライン学習
モデルに少数のデータ(ミニバッチと呼ばれる小さな単位か1つのデータ)を投入し続けて、次々に学習させる手法。これは学習サイクルが速く、新しいデータが手に入るとすぐにそのデータが学習されたモデルが手に入る。そのため、状況が常に変わるトレードシステムにも適している。また計算資源が限られている場合にも有効。モデルにそのデータが学習されていれば、過去のデータを保存する必要がないため。
オンライン学習の欠点は、以上なデータが入力されるとモデルの予測能力が低くなること。これは新しく与えられたデータは例外なく正しく分類としてパラメータを更新するため。これを防ぐには、異常検出アルゴリズムを使うなどして、異常なデータの入力を監視する必要がある。
また、オンライン学習では、新しいデータにモデルを適用させる割合を意味する学習率が重要。学習率が高いと新しいデータに適用されるが、古いデータの情報は失われやすい。学習率が低いと古い情報が保たれやすい一方で新しいデータへ適応しにくくなる。
バッチサイズが大きすぎる場合に、データを小さく分割した上で、オンライン学習をすることがある。これをアウトオブコア学習という。
テストデータによる予測結果の検証
汎化性能
機械学習において重要なことは、データを学習することで、未知のデータの予測や分類が行えるようになること。この未知のデータに対する予測や分類の精度のことを汎化性能と呼ぶ。
学習では、学習データに対する性能を基準にパラメータを更新し進めていきますが、学習が終わった段階ではまだ未知のデータに対する性能が保証されていないため、汎化性能を検証する必要が出てくる。
汎化性能を見る上で大事なのが、学習に利用したデータを検証に使わない。この検証用のデータのことをテストデータと呼ぶ。
勉強した問題がそっくりそのままテストに出ても、本当の学力が分からないのと同じ。
ホールドアウト検証
データ数が非常に多い場合に使用される手法。
ホールドアウト検証は、データを学習用データとテスト用データにある割合で分割して検証する。最も単純な検証方法。
学習に使用するデータ数はモデルの性能に直結するためなるべく多いほうが良い。検証に使用するデータ数が少なすぎると未知のデータのいろいろなパターンを模倣することができなくなる。データ数が膨大な場合、後述の交差検証をするとコンピュータの処理速度などにより学習・検証に時間がかかるため、一度の学習・検証で済むホールドアウト検証が用いられる。
テストデータの選び方に偏りが出ると、正確な検証ができない可能性がある。
K分割交差検証(K fold クロスバリデーション)
全てのデータが検証データとして利用されるよう、学習データとテストデータを入れ替えるなどし、複数の組み合わせを用意する。ホールドアウトより計算コストが高くなることがあるが、最も使われてる検証方法。
leave-one-out交差
全データから1データずつ抜き出してテストデータとし、残りの全てを学習データにする手法。
データ数に応じたパターン全てを学習・検証する。
学習結果に対する評価基準
機械学習の性能評価
このモデルによる事業への利益を見込めるかの性能評価する。
回帰モデルの性能を評価する
回帰モデルの性能は、出力と正答の数値の差分である「予測誤差」によって評価できる。
正答値と予測値、その誤差。
- R2 (決定係数)
- 0から1の範囲内の値をとり、1に近いほど分析の精度が高い
- RMSE (平方平均二乗誤差)
- 正規分布の誤差に対して正確な評価ができる
- 局所的な誤差に左右されやすい
- MAE(平均絶対誤差)
- 多くの外れ値が存在するデータセットで評価をする場合に利用される
分類モデルの性能を評価する
混合行列という表にして評価することが基本。
例えば、○と✗のラベルを分類する問題であれば、出力と正解が取りうるパターンは2x2で4パターンとなる。
ハイパーパラメータとモデルのチューニング
ハイパーパラメータは、モデルを何次式にするのか(直線、二次曲線、三次曲線)といったモデルの大枠を決める値を意味する。
ハイパーパラメータが適切でないと、モデルは性能を十分に発揮できない。この性能が十分ではない状態によくあるのが、未学習と過学習がある。
- 未学習
- 十分に学習が行われていないことで知能が低い状態
- 過学習
- 学習データに対する精度の向上を重視しすぎたことで、未知のデータに対する精度が下がってる状態
ハイパーパラメータを人がチューニングすることはかなり難しいため、オートチューニング手法が様々ある。一番単純な手法は、全てのハイパーパラメータ候補の組み合わせを試行し、もっとも性能のよいものを選択する方法。この方法はグリッドサーチという。
グリッドサーチは網羅的だが、計算コストが高いため、ランダムサーチ・ベイズ最適化やメタヒューリスティクス最適化などが用いられることもある。
能動学習
教師データへのラベル付け作業は大変。けど、さぼると予測精度が落ちる。しかし、能動学習を使うことで予測精度を落とさず、ラベル付けするデータを少なく出来る。
ラベル付けデータの作成は複雑
機械学習(特に教師あり学習)を行なうためには大量のラベル付きデータが必要だが、ラベル付けの作業は複雑。そういう時は教師データの数を絞って学習する能動学習を採用すると効率的になる。
なぜ、ラベル付けが大変か?
画像を見て、それが何か判定したいとする。画像には正解情報が付与されていないため、画像1つ1つの正解を人が判定し、その上で教師データを作成する。その際、人間が頑張るしかない。つまり、辛い。
ラベルを選ぶ基準
教師データを効率的に作成するには、大量のデータからラベル付けすべきデータを源泉する必要がある。何を基準に厳選すればいいのか。答えは紛らわしいデータをラベルを作成する。
明らかに区別がつく大量データよりも、区別が難しい少数のデータのラベルを作成して学習したほうが精度向上につながる。これは人の学習においても言える。
冒頭の章にあったA点派とB点派を判別する例でやるとするなら、AとかBって明らかにわからない微妙な無派閥に見えるデータを置くなどだ。
ラベル月データの作り方
能動学習では、以下の3つの用語が出てくる。
- 学習者 learner
- 判別者 oracle
- 質問 query
学習を行なう学習者が、データの正解ラベルを知る判別者に対し、正解ラベルを問う質問を行ってレベル付するという流れ。ちなみに判別者は人間で質問を行なうことはラベル付けすることと同義だ。
まぎらわしいラベル付けデータを作る手法として、以下の3つがある。
- Membership Query Synthesis
- Stream Based Selective Sampling
- Pool Based Sampling
相関と因果
データから相関関係を導くことは簡単。因果関係を導くのは難しい。
データを利用する機械学習に置いては、両者の区別は非常に重要。
相関関係と因果関係
相関関係。
- 正の相関関係
- ある変数が大きい時に他の変数も大きい。
- 負の相関関係
- ある変数が大きい時は、他の変数が小さい。
因果関係。
ある変数を変化させたときに、保9日の変数も変化する関係。
相関関係とは別もの。
身長が高い人ほど体重が重いという相関関係においては、身長を伸ばせば体重が重くなるの因果関係は正しいかもしれない。しかし、体重増やせば身長が伸びる因果関係は正しくない。体重が増えても身長は伸びず、ただ太っていくだけ。
統計学(や機械学習)では相関関係を分析することができますが、相関家計だけで因果関係を結論づけることは無理がある。
疑似相関
本当は因果関係がない要素の間に、見えない外部要因の影響で因果関係ができてるように見えること。
この見えない外部要因を交絡変数、交絡因子、共変数と呼ぶこともある。
スキーをする人が多い時期は、暖房器具を買う人が多いは記事相関といえる。ここでの交絡変数としては例えば気温がある。もし気温が低いならスキーに関係なく暖房器具を買う人は増える。
疑似相関に騙されない因果分析の方法
データを分析した結果、原因とされるもの(”原因”)と結果とされるもの(”結果”)が因果関係にあると判断するためのガイドラインがある。主に生物学や医学の研究で使われているもので、機械学習や統計にも役に立つ。
- 強固性
- 一致性
- 特異性
- 時間的先行性
- 量・反応関係
- 整合性
- 妥当性
- 実験
- 類似性
もっとも確実な方法として、ランダム化比較試験がある。
ABテストと呼ばれることが多い。例えば、「朝ごはんを食べていること」と「成績」の間に強い相関が見られたとする。「朝ごはんを食べると成績が成績が上がる」という結論を導くために、朝ごはんを食べるグループ(介入グループ)と朝ごはんを食べないグループ(比較グループ)をランダムに分けた上で、成績に差があるかどうかを実験を行なう必要がある。また、朝ごはんを食べるか否か以外は、各グループの特徴を同じにする必要がある。このように”原因”の生むだけを変化させて、”結果”を観察する実験がランダム化試験。
実験を行なうことが困難な場合は、いま持っているデータを使って、実験に近い分析(疑似実験)を行なう。この分析手法の1つが回帰分断デザイン。この手法では、境界線の前後では”原因”以外の要素がほぼ変わらないことを利用する。”原因”だけ変化させて、”結果”を観察するランダム化比較事件と同じような状況が再現できるため有効に働く。
他の手法に中断時系列デザインもある。
フィードバックループ
機械学習システムで注意する必要があるのが、システムの振る舞いを完全に制御できない点。モデルを随時更新するようなシステムでは、フィードバックループが起こり、よきせぬ動作を引き起こすことがある。
機械学習を使ったシステムの落とし穴
機械学習は、コードの書き方だけではシステムの振る舞いが規定できない。機械学習のふるまいはデータに大きく依存する。そのため、誤りを含んだデータをモデルが学習すると、モデルの出力が意図しないものになる可能性がある。
機械学習システムでは、システムのうち何かしら一つの要素を変更すると、他の全ての要素も変わってしまう。Cahnging Anything Changes Everything (CACE)、つまり、あちらを立てればこちらが立たないが起きる。
例えば、寿司のネタを判別するマンのマグロの精度が悪い。そこでマグロを判定精度上げると、ほかがおかしくなるとかが起きる。
フィードバックループ
システムの振る舞いが環境に影響を及ぼし、次に観測するデータが環境から影響を受けて変化してしまう現象。急に変わる場合には分かりやすいですが、だんだんと変わる場合には気づくのが難しい。
警備システムで治安の悪いところを自動判別して、警備を強化するような仕組みがあったとして、治安が悪いところにどんどんパトロールが増えるので検挙率が上がりやすくなる。そして、また警備の数を増やす。そしてっていうことを繰り返すなど。
隠れたフィードバックループ
目に見えないフィードバックループはやっかい。これを隠れたフィードバックループという。これは複数の機械学習システム間で起きる。
別の会社の機械学習を使ったトレードがバグっていて、その結果に引っ張られて変なデータを学習してしまうなど。
機械学習アルゴリズム
回帰分析
回帰とは、データに最もフィットする線を引くこと。
単回帰
単回避は、原因一つと結果一つの関係を直線で表す。
例えば、バネにおもり(重さx)をつるして、バネの長さ(y)を図る実験。
重回帰
単回帰と異なり、原因(説明変数)が複数あると考えられる場合、重回帰を用いる。
小売店の売上に影響する説明変数として、店舗面積、駅からの距離、駐車場の大きさ、従業員数など様々なものが考えられる。
これを使う時に注意が必要なのは、多重共線性です。これは、例えば降水量と降水日のように、相関の強い変数を両方入れて重回帰を行なうと、正しく回帰できなくなること。相関の強いペアがある場合は、どちらかを抜く。
多項式回帰
関係が直線ではないと考えられる場合、多項式回帰を用いる。この際、数式で最大何乗まで考えられるかを次数という。次数を増やすと、より複雑な曲線を表現できますけど、回帰結果の曲線は不安定になるので注意が必要。
ロバスト回帰
最小二乗法の欠点として、外れ値があった場合に、回帰結果が的はずれなものになってしまうというものがある。最小二乗法では誤差の二乗を計算するため、誤差が大きいと誤差関数に与える影響は非常に大きくなる。そこで外れ値の影響を小さくするために用いるのがロバスト回帰。
ロバスト回帰の代表的な方法としては、RANSACがある。RANSACでは、データをランダムに抽出して回帰を行い正常値にあたるデータの割合を求める。これを繰り返し、もっとも正常な割合が高い直線を回帰直線とする。
過学習を抑える正則化
重回帰では、相関の強い説明変数のペアがあると正しく回帰がうまくできなくなると説明しました。多くの要素が影響してるからといって、なんでもかんでも説明変数に入れてしまうのはよくないということ。多項式回帰では、説明変数の1乗、2乗、・・・300乗を考えて回帰を行なうと、回帰結果の曲線が不安定になる点も確認した。異常はいずれも説明変数の選び方が適切ではなかったために生じた現象。単純な最小二乗法では、変数の選択を間違えると、回帰係数が大きくなる傾向にある。回帰係数が非常に大きいと、説明変数xが少し変化しただけで予測結果yに大きな影響を与えてしまう。これを防ぐために、罰則項(正則化項)を導入する。罰則項とは「回帰係数が非常に大きいことに対するペナルティを与える項」。単純な最小二乗法では、誤差関数を誤差の二乗和として誤差関数を最小化していました。説明変数選びが悪いとどんどん回帰係数が大きくなる。これに対して罰則項を使ってブレーキをかけれる。
サポートベクターマシン
データを最も引き離す境界線を引くための手法で、ディープラーニングブームを使わない機械学習の中では主流の方法。カーネル法を使うことで、曲線の境界線を引くことも出来る。
サポートベクターマシン(SVM)とは、教師あり学習に置いて回帰・分類・外れ値検出を行なう方法。実はSVMの考え方は2店舗派閥の例です。データを最も引き離すような境界線を引くことが分類だと説明した。あれこそがSVMの考え方。
機械学習の手法では、説異名変数はしばしば入力あるいは特徴量と呼ばれます。特徴量とは、「データの特徴をよく表す量」という意味です。また結果となる変数(目的変数)は出力と呼ばれます。
サポートベクター(ベクトル)とは、境界に最も近いデータの点のことです。新しいデータを入力されたときのご判定を防ぐため、境界に近いデータであっても境界からできるだけ離すことが重要となる。サポートベクトルと境界との距離をマージンといい、SVMではこのマージンを最大化している。
SVMの仕組みは、特徴量の数が3つまでであれば簡単に図示することができます。1つ1つのデータは点で表されます。境界は、特徴量の数が2つなら2次元平面上の直線として、3つなら3次元空間上の平面として表される。4次元以上は逗子は不可能。そのような4次元以上の空間における分類境界は、超平面と呼ばれる。
直線・平面・超平面を境界としてデータを分離しますが、このことを線形分離といいます。しかし、実際のデータにおいては、線形分離が可能なケースというのは多くないのです。何らかのノイズによって境界が不明瞭な場合やそもそもデータが線形分離が可能な形をしていない場合があるためです。このような場合に使う手法として、ソフトマージンSVMとカーネル法がある。
ソフトマージンSVM
ソフトマージンSVMは、誤差を認めるとよりよい線形分離ができるような「惜しい」データに用いる。これまでにあったようなSVM(ハードマージンSVM)とは異なり、(反対側を含めた)マージンにデータをが入ることを許すのが特徴。
実際の機械学習では、このソフトマージンSVMが使われるのが一般的。
カーネル法
カーネル法は、派閥の境界がそもそも曲がった形(非線形)になっている場合に用いる。派閥の境界が曲がっていた場合は、データから新しい特徴量を作ったり、うまく線形分離になるようにプロットしなければなりまぜん。この作業を「線形分離可能な高次元特徴空間に写像する」と表現する。
決定木
ソフトマージンSVM
システム開発と環境構築
言語を選ぶ際のポイント
- 人工知能ライブラリの充実度
- 学習のしやすさ for 人間
- コミュニティの大きさ
主要な言語
- Python
- 人工知能ライブラリが色々ある
- 文法がシンプル
- コミュニティが大きい
- 記述しながら実行してトライ&エラーが出来る(インタプリタだから
- R
- 統計と人工知能ライブラリが充実
- 最先端のアルゴリズムやノウハウに触れれる
- データサイエンティストの第一言語
- Java
- purattof-に依存しない
- 幅広い分野とのコラボレーション
- コミュニティが大きい
機械学習用のライブラリとフレームワーク
機械学習の流れとライブラリ
データにも色々ある。テーブルや画像、文章など。そこから機械学習を用いて結果を出し、可視化まで様々なライブラリがある。
Pythonでは、Scikit-learnが強いらしい。
- 科学計算
- Numpy, Pandas
- 文章データの前処理
- mecab, NLTK
- 画像データ
- OpenCV
- 可視化
- matplotlib