レッスン1 / 1問目

『単回帰分析』

全体像と学習の目的

このレッスンでは単回帰分析を学習していきます。

ここで単回帰分析を学習する目的は、ディープラーニングや重回帰分析など他の機械学習を行う上での基礎となるためです。

Pythonには機械学習を行なうためのscikitlearnというライブラリが用意されており、それを使えば簡単に単回帰分析を行うことができますが、ここでは単回帰分析の仕組みや考え方、数学知識(微分)などを基礎から理解することを目的とします。

そのためまずは単回帰分析、数学の微分について理解しNumPyを用いて単回帰分析を実装していきます。

今回学習する単回帰分析は機械学習の中の教師あり学習の中の回帰問題に属します。(下記赤枠部分)

本レッスンでは以下の内容について見ていきます。

  1. 単回帰分析とは
  2. 単回帰分析の流れ

順番に見ていきましょう。


単回帰分析とは

では単回帰分析のについて見ていきましょう。

まず単回帰分析がどのようなものかを理解するために以下のようなデータを用意しました。

以下はあるお店の広告宣伝費と来店者数のデータです。

広告宣伝費と来店者数の回帰分析のグラフ

このデータをグラフにします。すると以下のように広告宣伝費が増加するにつれて来店者数が増加していることがわかります。x軸が広告宣伝費、y軸が来店者数となります。

広告宣伝費と来店者数の散布図

ではここで簡単な問題を解いてみてください。

【問題】

このグラフにおいて広告宣伝費が600,000円の場合の来店者数がだいたいどのくらいになるか予測してください。(〇〇円~〇〇円という形で予測してください。)

答え:450~750人の間であれば正解です。



特に難しい点はなかったかと思います。

実は今みなさんが行ったように広告宣伝費xと来店者数yの関係性を導き出す分析がまさに単回帰分析です。

みなさんはグラフを見て広告宣伝費に対応する来店者数を導き出しましたが、 頭の中では以下の赤線部分ようにこれまでのデータの傾向からだいたいこのあたりが予測値だと判断したのではないでしょうか。

広告宣伝費と来店者数の単回帰分析のグラフ

単回帰分析において重要となるのは上図の中心にある緑色の直線です。この直線を回帰直線と呼び、単回帰分析ではこの回帰直線を使い入力値xからyの値を導き出します。(ここではxは広告宣伝費、yは来店者数となります。)

この回帰直線が「y = ax + b」の一次関数となっていることはお分かりいただけると思いますが、一次関数ではこの直線のパラメータ(aとb)が決定すると、回帰直線(緑色の直線)が完成します。つまりこのパラメータを適切な値に設定することが単回帰分析での目的となります。

単回帰分析のグラフ

このようにデータxとyの関係性を「y = ax + b」のような関数で表す方法が単回帰分析です。
また、直線を用いた回帰を「線形回帰」と呼びます。

単回帰分析の流れ

ここまで単回帰分析の概要について説明をしてきました。
ここからは実際に単回帰分析を行っていくための全体の流れをお伝えします。
全体の流れとしては以下の通りです。

  1. モデルの定義(「y = ax + b」などの式を決定する)
  2. 最小二乗法により最適なパラメータ導き出す(「y = ax + b」のaとbを決定する)

では順番に見ていきましょう。

モデルの定義

上記で見た広告費から来店者数を予測する例題では「y = ax + b」の回帰直線を使いました。

実はこの関数の形(y = ax + b)は自動で決まるものではなく人間が最適な関数を決定します。 広告宣伝費と来店者数の回帰分析のグラフ

このグラフを見て「y = ax + b が当てはまりそうだな」というように人間が判断をします。ここでのポイントは関数は自動的に決まるものではなく人間が決めるものであるということです。

今回はこのまま「y = ax + b」とします。

最小二乗法により最適なパラメータ導き出す

ではもう一度前回の例題で扱ったグラフを見てみましょう。

先ほどの例題ではこの回帰直線が既に存在していたため皆さんは広告宣伝費xから来店者数yを導き出すことができました。

しかし一からこの回帰直線を求める場合、「どのようにしてこの直線のパラメータを求めればよいのか」という問題があります。この「直線のパラメータを求める」という点が単回帰分析においての目的でありポイントとなります。(パラメータとはy=ax+bにおけるaとbを指します。)

ではここから「y = ax + b」のパラメータを求める方法を説明していきます。 まず上図の回帰直線はなんとなくすべてのデータの中心を通っているように見えます。これは言い換えると 「全てのデータとの誤差が最も小さい座標を通る直線」であるといえます。

単回帰分析の二乗誤差のグラフ

さらに言い換えると「全ての誤差の合計が最も小さくなる直線」となります。

ではこの「全ての誤差の合計が最も小さくなる直線」を一から求めてみましょう。例題として以下のデータを使用します。
(わかりやすいようにデータの数を減らします。)

二乗誤差のグラフ

このデータからすべてのデータの誤差が最も小さくなる点を求めます。
これを求めるには誤差を徐々に小さくしていくという方法を用います。

ではまずは基準となる適当な直線を引きます。

二乗誤差のグラフ

次に適当に決めた直線の値と各データとの誤差を求めます。

二乗誤差のグラフ

以下のように傾き(パラメーター)を変えて誤差を縮めていきます。

二乗誤差のグラフ

さらにパラメーターを調整し最も誤差が小さくなる値を求めます。

二乗誤差のグラフ

上記のようなイメージで徐々に誤差を縮めていき、最適なパラメーターを求める方法を最小二乗法と呼びます。

数式を用いて最適なパラメータを導き出す

上記で最小二乗法のイメージをなんとなくつかんでいただけたと思います。ではここからは最適なパラメーターを数式で求める方法を見ていきましょう。

上記で使用したグラフを見ながら数式化していきます。

二乗誤差のグラフ

繰り返しになりますが、上記の青点は教師データです。つまりプログラムに学習させるデータであり、このデータの傾向やパターンを求めることが単回帰分析の目的です。そのため、各青点(教師データ)と最も誤差が小さくなる直線のパラメータを求めます。


まずは適当な直線を引きその直線と実際のデータとの誤差の合計を求めます。

二乗誤差のグラフ

上記のグラフにおいて誤差1~誤差3までを合計した値が誤差の合計となります。

二乗誤差のグラフ

このグラフにおいて青色の点が実際の教師データであり、緑色の線は予測値です。

この実際のデータと予測値との差の合計が誤差となります。

以下は実際のデータをyとし予測値をy ^(ワイハット)とした際の誤差を求める数式です。

(y1- y ^1 )+ (y2- y ^2 )+ (y3- y ^3 ) =誤差の合計

では上記のグラフをこの数式に当てはめてみましょう。各座標はそれぞれ以下の通りです。

  • y1=400
  • y ^1=880

  • y2=420
  • y ^2=580

  • y3=750
  • y ^3=350

数式に当てはめます。

(400-880)+ (420-580)+ (750-350)

=-480-160+400=240

240という結果が出ました。
しかしこの結果は誤差の合計として正しくありません。なぜならy1 y ^1の誤差が-480、y2 y ^2の誤差が-160、y3 y ^3の誤差が450であるためそれぞれが正の数と負の数で相殺されてしまっているためです。

正しい誤差は480 + 160 + 450 = 1,040でなければなりません。

そのため正の数と負の数の符号を数を統一するために以下のように誤差を求める式をそれぞれ2乗します。

(y1- y ^1 )2+ (y2- y ^2 )2+ (y3- y ^3 )2

この式にもう一度値を当てはめていきます。

(400-880)2+ (420-580)2+ (750-350)2

=480+160+400=1040

誤差1,040を求めることができました。

これが誤差を求める数式です。

(y1- y ^1 )2+ (y2- y ^2 )2+ (y3- y ^3 )2

今回の例題ではデータが3つしかなかったためy₁、y₂、y₃として一つずつ数式で表すことができましたが、実際のデータの量は膨大です。例えばデータが1,000個ある場合y₁~y₁₀₀₀といった形になります。 そのため「何個目のデータ」かを表すのに「n」を使用し、「yn」とします。

(yn- y ^n)2

また、「 (y1- y ^1 )2+ (y2- y ^2 )2+ (y3- y ^3 )2・・・・・ 」というように全てのデータの合計を表すには「∑(シグマ)」を使います。シグマは総和を表す記号です。シグマはここでは「1番目のデータの誤差 + 2番目のデータの誤差 + 3番目の誤差・・・」というようにすべての誤差の合計を表します。

n=1 3 (yn- y ^n)2

このΣ(シグマ)の下に付いている「n=1」はnが1から始まることを表します。また、シグマ記号の上についている3はnの終わりを表します。つまりnは1から始まり3で終わるという意味となります。

上記のように記述した場合、nに1~3が順番に代入され、「(y1- y ^1 )2+ (y2- y ^2 )2+ (y3- y ^3 )2」というように総和を計算する数式となります。

シグマの数式

ではこれで誤差の合計を表す数式が完成しました。この数式は各誤差を二乗しているため二乗誤差と呼びます。そしてこの二乗誤差が最小となるパラメータを求めることが今回の目的です。このように、パラメーターを最適化するために使われる関数を損失関数(Loss function)と呼びます。

つまりこの単回帰分析では最適解を求めるための指標とする損失関数二乗誤差を採用しているといえます。これら「損失関数」と「二乗誤差」は重要なワードですのでここで意味を押さえておきましょう。

以下は損失関数の完成形です。(損失関数をLで表し、シグマ記号上のnの終わりを表す数値をN(データ数)とします。)

L=n=1 N (yn- y ^n)2

損失関数を最小化する

次は下記二乗誤差の数式を最小化し、最適なパラメーターを導き出します。

L=n=1 N (yn- y ^n)2

この数式ですが、実は二次関数になっていることにお気づきでしょうか。
二次関数はグラフにすると以下のように放物線になるという性質がありました。

二次関数 y = x²のグラフ

二次関数のグラフ

このグラフに損失関数を当てはめていくためにまずは損失関数を展開します。「モデルの定義」で関数「y=ax+b」を使用することを決定しました。そのため以下のように y ^を展開します。

展開前

L=n=1 N (yn- y ^n)2

展開後

L=n=1N (yn- ( axn+b) )2

y ^を「y = ax + b」の式に展開することができました。しかしこれではaとb、2つのパラメーターが存在するため計算が煩雑になります。

そのためここではデータの中心化という作業を行います。
例えば以下のようなデータがあった場合を考えます。

データの中心化

このデータを以下のように中心に寄せる作業をデータの中心化と呼びます。

データの中心化

これにより切片がなくなるため「y = ax + b」の一次関数から「y = ax」の式に変換され、数式が簡略化されます。

中心化は以下の式で行うことができます。

x - xの平均 y - yの平均

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

データの中心化例題

このデータを中心化するにはまずはxとyの平均値を求めます。(計算は省略)
xの平均値が2、yの平均値が3となります。そしてx, yそれぞれの値から平均値を引いた値を求めます。

xの計算
1 - 2 = -1
2 - 2 = 0
3 - 2 = 1

yの計算
2 - 3 = -1
3 - 3 = 0
4 - 3 = 1

それぞれの座標は(-1, -1), (0, 0), (1, 1)となります。

データの中心化解答

これで中心化が完了しました。

では練習問題として以下のグラフを中心化してみてください。

データの中心化練習問題

答えは上記で見た例題と同じになります。

yの計算 1 - 2 = -1 2 - 2 = 0 3 - 2 = 1

xの計算 2 - 3 = -1 3 - 3 = 0 4 - 3 = 1 座標 (-1, -1) (0, 0) (1, 1)

データの中心化解答

データの中心化を行うことにより以下の数式の「ax + b」が「ax」となりました。

中心化前

L=n=1N (yn- ( axn+b) )2

中心化後

L=n=1N (yn- axn )2

では二次関数のグラフに上記損失関数を当てはめていきます。

二次関数のグラフ

y軸が損失関数、x軸がパラメーターaとなります。

この曲線において谷底の部分が最も誤差が小さくなる点です。谷底は一次関数のグラフでは以下の状態となります。

二乗誤差のグラフ

ではこの誤差の合計が最も小さくなる点である谷底を求めるにはどうすればよいのでしょうか。

実はここで数学の微分が登場します。
上図の放物線の「谷底」を言い換えると、「傾きが0の点」であるといえます。(一次関数では傾きが0の場合、下記赤線のような横一直線のグラフになります。)

二次関数のグラフ

微分を使うとこの傾き0の点を求めることができます。

そして微分により直線のパラメータが決まり機械学習モデルが完成するという流れになります。




まとめ

このレッスンでは単回帰分析の機械学習モデルを作成する流れをお伝えしました。単回帰分析で肝となるのは微分によって適切なパラメータを求める点です。

次のレッスンから微分を学習していきましょう。

以下は本レッスンの重要な点です。

  • 単回帰分析とは入力値xと出力yの関係性(パラメータ)を導きだす分析である
  • 適切なパラメーターを求めるために損失関数(二乗誤差)を用いる
  • 損失関数(誤差)を最小化するために数学の微分を利用する

練習問題

Lesson1

回帰は「教師あり学習」、「教師なし学習」、「強化学習」のうちどれに属するか

教師あり学習です。

Lesson2

単回帰分析はxとyの何を導き出す分析であるか答えよ。

xとyの関係性やパターン

Lesson3

本レッスンで使用した最適なパラメーターを求めるために用いる関数をなんと呼ぶか。

損失関数です。機械学習モデルの予測精度を測る指標として使用します。

Lesson4

本レッスンでは実際の教師データと予測値の誤差を最小化してくことでパラメータを最適化する方法を学習しました。それぞれの誤差を二乗した値の合計を求める損失関数をなんと呼ぶか。

二乗誤差。損失関数には他にも交差エントロピー誤差や絶対誤差といったものがあります。

Lesson5

データの中心化を行うとどのような利点があるか

求めるパラメーターが一つになるため数式が簡略化される。



お疲れさまでした。判定ボタンを押してレッスンを完了してください。

Last updated:2020/1/22

main.py
設定
g
n
i
d
a
o
L