見出し画像

教師あり学習

学習目標

教師あり学習に用いられる学習モデルを理解する。

  • 線形回帰

  • ロジスティック回帰

  • ランダムフォレスト

  • ブースティング

  • サポートベクトルマシン

  • ニューラルネットワーク

  • 自己回帰モデル(AR)

キーワード分類問題回帰問題半教師あり学習ラッソ回帰リッジ回帰決定木アンサンブル学習バギング勾配ブースティングブートスラップサンプリングマージン最大化カーネルカーネルトリック単純パーセプトロン多層パーセプトロン活性化関数シグモイド関数ソフトマックス関数誤差逆伝播法ベクトル自己回帰モデル(VARモデル)隠れ層疑似相関重回帰分析AdaBoost多クラス分類剪定


機械学習の種類

機械学習を大きく分けると以下の3つがあります。

半教師あり学習もある。例えば、教師ありデータで学習したモデルを教師なしデータに適用し、その推論結果を正解ラベルとして使うなど。その際、何らかの自信度をチェックし確率が高いものだけ採用する。

以下では、教師あり学習の代表的な手法を見ていきます。

線形回帰

線形回帰(Linear Regression)では、入力値と予測される値の間に線形の関係があると想定して学習を行います。

例えば、次のようなデータがあったとします。

入力値をxと求めたい値yとの関係が線形だと人間が判断した場合に、線形回帰を使うことができます。下図に、青い線で示しました。

つまり、ここでは$${y=wx+b}$$の関係を仮定しています。wが傾きでbが切片です。

この仮定が正しければ、多くのデータを少ない誤差で説明することができます。また、新たな入力値xからyの値を予測することが可能となります。

線形回帰モデルの学習では最適なパラメータ値(上例ではwとb)を学習データを使って見つけ出します。

入力値が複数個(n個)ある重回帰分析では独立変数が複数$${(x_1, x_2, \dots, x_n)}$$あり、線形回帰は、$${y = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b}$$のように拡張します。

ちなみに、統計学では疑似相関という言葉があり、相関がないのにあるように見えることを言います。例えば、アイスクリームが売れると海に行く人が増えるなど。そこには共通の原因(暑さ)があるのですが、データからは見えないかもしれません。よって、機械学習を行う時には、人間が十分な探索的データ解析(Exploratory Data Analysis)を行うのも大切です。

正則化

過学習を防ぐ目的で行う正則化の方法によってラッソ回帰(lass regression)とリッジ回帰(ridge regression)があります。

ロジスティック回帰

ロジスティック回帰(Logistic Regression)は分類問題で用いられる手法です。入力値$${(x_1, x_2, \dots, x_n)}$$からある事象が真(あるいは偽)である確率を計算します。

オッズの対数

確率の値は0から1ですが、線形回帰だと予測値が負の無限大から正の無限大になってしまうので、オッズの対数を考えます。

オッズは、$${\frac{p}{1-p}}$$で計算され値の範囲が0から正の無限大の範囲に広がります。さらに、オッズの対数$${\log \frac{p}{1−p}}$$を取ることで値の範囲が負の無限大から正の無限大に拡大されます。このオッズの対数をロジットと呼びます。

よって、線形回帰を行ってオッズの対数を予測することができます。オッズの対数の値が大きくなる(正の無限大に近づく)ほど確率が1に近くなり、逆にオッズの対数の値が小さい(負の無限大に近づく)ほど確率が0に近づくきます。

シグモイド関数

線形回帰を、

$$
y = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b
$$

とします。さらに、予測される確率を$${\hat{p}}$$とすると、予測されるオッズの対数と線形回帰の関係は、

$$
\log \frac{\hat{p}}{1 - \hat{p}} = y
$$

となります。これを変形すると、

$$
\hat{p} = \frac{1}{1 + e^{-y}}
$$

となり、右辺をyを入力値としたシグモイド関数と呼びます。

シグモイド関数をσ(y)と表すと、

$$
\hat{p} = σ(y)
$$

となります。下図にあるように、シグモイドは入力値を0から1の範囲に写像し確率の値の予測をすることができます。

仮に閾値を0.5とするとシグモイド関数の値が0.5以上ならば予測は真であると判断します。

予測をする事象によって閾値を調節します。例えば、スパム(迷惑)メールの予測では、通常のメールをスパムだと誤って予測しすぎるとそれこそ迷惑なので閾値を高く設定したりします。

以上をまとめると、ロジスティック回帰の式は、

$$
p = σ(w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b)
$$

となります。

シグモイド関数はロジット(オッズの対数)の逆関数でロジスティック関数とも呼ばれます。これがロジスティック回帰の名前の由来です。

ランダムフォレスト

ランダムフォレスト(Random Forest)は決定木を多数使う手法です。

決定木

決定木はデータを区分けして予測をしやすくしていく手法です。簡単な例として下表のように2つの入力値から出力が決まる問題があるとします。

よく見ると次のことに気づきます。

ケース1)入力2が3の時、出力値はBになっています。(3つのサンプル)

ケース2)それ以外は、入力1の値が出力値になっている。(2つのサンプル)

よって、ケース1の条件でデータを区切ると予測のしやすさが向上します。その次にサンプルが多い、ケース2の条件を加えると全てのサンプルデータの出力を説明できます。

これが決定木の基本原理です。上述の例のように、入力値や出力値が不連続なカテゴリ値でも使えるます。また、出力値が連続な回帰問題を扱うこともできます。

データを区切る時には、エントロピー(entropy)かジニ不純度(Gini impurity)を使います。両方ともデータ分布の予測の難しさを数値化したもので、その値を最も大きく減らせるような区切り方を探して予測しやすくなるようにデータを分けていきます。

剪定(枝刈り、プルーニング、pruning)

ただし、決定木は個々のサンプルに影響されやすく過学習しがちになる欠点があります。そのため、剪定(pruning)をして決定木によるデータの区分けが細かくなりすぎないようにすることもあります。

また、過学習を解決する方法として次に紹介するランダムフォレストがあります。特に入力値の種類が多い時に有効な手法です。

アンサンブル学習

ランダムフォレストでは、決定木をたくさん作ります。その際に、入力値として扱うパラメータをランダムに選び決定木を作ります。また、学習用のデータはランダムに選ばれたものを使います。以上によって、たくさんの決定木が作られます。

一つ一つの決定木の予測は正確さに書くかもしれませんが、多数の決定木で多数決(平均化)を行うことで全体としてより正解な予測ができるようになっています。また、特定の入力値に影響されにくいので過学習を防げる利点があります。

このように複数のモデルを学習して組みわせることをアンサンブル学習と呼びます。また、平均化を使ったアンサンブル学習を特にバギング(bagging)と呼びます。バギングはブートストラップ・アグリゲーティング(bootstrap aggregating)の略称です。

なお、バギングでは一つ一つの決定木の学習は完全に独立しているので、たくさんの決定木を並行して学習させることが可能です。

ちなみに、母集団から重複を許してランダムにサンプルすることをブートスラップサンプリングと呼びます。Scikit-LearnのRandomForestの実装のデフォルトではブートストラップサンプリングが使われますが、設定を変更すれば学習データ全体を使うようにすることもできます。

ブースティング

ブースティング(Boosting)はアンサンブル学習の一種です。多数の決定木を用いる点ではバギングと似ていますが、一般的にブースティングの方が精度が高いです。ただし、ブースティングでは決定木の学習を並行して行うことができないので、より時間がかかる傾向があります。

AdaBoost

AdaBoostはブースティングの一種でAdaという名前はAdaptive(適応的)という言葉が由来です。一つずつ決定木を学習させる際に、前回の決定木の間違いに応じて次回の決定木を訓練するための学習データの選定を調節していきます。

以上によって、説明できないデータがなくなるように決定木を追加していきます。

勾配ブースティング

勾配ブースティングはブースティングの一種で予測エラーが小さくなるように決定木を追加していく手法です。

以下、回帰問題を例に手順を説明します。

追加される決定木が予測する損失関数の勾配のマイナス値×α×αを予測値に追加していくことで誤差が少なくなる方向に予測が動いていくので精度が増していきます。

サポートベクトルマシン

サポートベクトルマシン(Support Vector Machine)あるいは表記によってはサポートベクターマシンと呼ばれ、よくSVMと略称で呼ばれます。回帰問題と分類問題を扱うことができます。

クラスが異なるデータ同士の距離が最大となるような境界線を求めることによって未知のデータの分類ができるという仕組みです。

例えば、下図の例だとデータを直線で区切れそうですね。

しかし、データを区切れる直線は無数にあります。

よって、SVMではマージン最大化を条件として学習していきます。マージンとは境界と境界に最も近いデータの距離のことです。これによって境界が一意に決まります。

一般的には、これよりもっと高次元なデータを扱います。また、初期の線形サポートベクターマシンは線形の境界しか扱えませんでしたが、非線形サポートベクターマシンが開発されると非線形の問題も扱えるようになりました。その際、カーネル関数を入力データに適用することで次元をさらに高いものへと写像し、そこでの線形境界を見つける手法が使われました。
なお、カーネル関数を取り入れた手法では、どのような写像が行われるか知らなくとも計算できるのでカーネルトリックと呼ばれています。
SVMでは次のカーネルがよく使われています:線形、多項式放射基底関数シグモイド関数など。

ニューラルネットワーク

ニューラルネットワーク(Neural Network)は人間の脳にある神経細胞(ニューロン)が形成する神経回路と呼ばれる複雑なネットワークのことです。

ニューラルネットワークをソフトウェアで模した人工ニューラルネットワークの試みの元祖が単純パーセプトロンになります。

出力層でシグモイド関数を使う場合は、ロジスティック回帰と同等になります。また、人工ニューラルネットワークでは、ロジスティック回帰のような層からの信号を増幅(あるいは低減)させるものを活性化関数と呼びます。多クラス分類ではソフトマックス関数がよく使われます。

単純パーセプトロンが線形分類しかできない問題を克服するために、多層パーセプトロンが開発され入力層と出力層の間に隠れ層が追加されました。隠れ層を増やすことでより複雑な問題を扱うことができるようになりました。ディープラーニングの学習のために、誤差逆伝播法(back propagation)が導入されました。

自己回帰モデル(AR)

自己回帰モデル(AR:Autoregressive Model)は時系列データに関する回帰問題を扱います。時系列分析では過去に観測された変数のデータが将来の変数の値にどう影響してくるのかを予測します。

$$
x_t = c + \sum_{i=0}^n w_i x_{t−i} + \epsilon
$$

ここで、tは時間です。また、cは定数で$${\epsilon}$$はノイズだとします。

入力変数が多変数の場合は、$${x_{t−i}}$$はベクトルとなるのでベクトル自己回帰モデル(VARモデル)と呼ばれます。




いいなと思ったら応援しよう!