1
0

More than 3 years have passed since last update.

機械学習はじめの一歩 part2 ~単回帰分析とは~

Last updated at Posted at 2020-01-07

はじめに

あけましておめでとうございます。mizutakawaterです。卒論に飽きたらこの記事を書き進めています。
少し間が空いてしまいましたが、「本当の初心者でもわかりやすい機械学習入門」の第2弾です。

前回のリンクはこちら
機械学習はじめの一歩 ~pythonによる実装もやってみたい人へ~

前回の復習

前回は「教師あり機械学習の回帰」の基礎の基礎を学びました。
復習なので簡単に振り返ってみましょう。

A~D君がいます。彼らの身長、体重は以下のようになっています。
A君: 40kg, 150cm
B君: 50kg, 160cm
C君: 60kg, 170cm
D君: 70kg, 180cm

では、体重が55kgのE君の身長は何cm(と予測できる)でしょうか。

という問題を基に考えてみましたね。

正解は以下のようにたまたま4人の分布が一直線上に並ぶ直線があって

y(身長) = x(体重) + 110

そこに体重(前回はxとしました)55kgを代入するというものでした。

そしてこの直線の式を求めること(目的関数)が教師あり機械学習の回帰のほぼゴールということでした。

思い出してきましたか?

今回のゴール

では、今回は4人の分布が一直線上にないときに、目的関数(上記でいうy = x + 110)をどうやって求めるのか??ということを学びましょう。
これが分かれば、ある程度複雑でも集まったデータを基に、ほしいデータを予測することができるようになります!

例えば、以下のような身長、体重の4人のデータを与えられたときに、体重55kgの人の身長を予測できるようになります!

question1

ここに、
question2

こう直線が引けるようになります!!なんだかデータ分析ぽくなってきました〜

では早速やっていきましょう!!

実践

直線の式の求め方

上記で述べたような直線を引けば良いということはみなさん、直感的にはわかると思います。では、正確にこの直線の式を求めるにはどうしたら良いでしょうか。。

正解は
各点からの直線の距離の合計が最も小さくなるように直線を引けば良い
です!

感覚的には、各点からの平均値を取っているという感じに近いでしょうか。(正確な表現ではないかもしれませんが、、)

こんな感じ!

question3

上のグラフで

error1 + error2 + error3 + error4 = 最小値

となるように直線を引けばOKです。もうここまでくればただの数学ですね。
ちなみに、
error1 + error2 + error3 + error4
損失関数と言い、損失関数の最小値を求めることが目的関数を求めることに繋がるということです。

wikipediaで、損失関数と調べると

数学的最適化および決定理論では、損失関数またはコスト関数は、イベントまたは1つ以上の変数の値を、イベントに関連する「コスト」を直感的に表す実数にマッピングする関数です。最適化の問題は、損失関数を最小化しようとします。目的関数は、損失関数またはその負のいずれかであり、その場合、最大化されます。
(https://en.wikipedia.org/wiki/Loss_function)

やばくないですか?漏れがないように書いてくれてるんだろうけどさすがに謎すぎ

損失関数の最小値の求め方(例題)

上の例題だと少し計算が難しくなってしまいそうなので、もっと簡単な例題で考えて見ましょう。

(x, y) = (1, 2)(3, 4)(5, 5)
という点があったとして、損失関数が最小になるように下のような直線を引くときの計算を見ていきます

question4

計算部分はもう数学アレルギーな人は飛ばしてもらって構いません。最後の囲みのところだけ理解してもらえればOK!

方針としては

①損失関数の値が最小となるようなa,bの値を求めたい
②損失関数をa, bに関して偏微分する
③その2式を連立してa,bを求める
④y = ax + bに代入する

では計算していきましょう!!
求めたい目的関数(直線の式)を
$$y = ax + b$$
と置きます。

上記のグラフより
e1, e2, e3と交わる直線上の点(x, y)はそれぞれ
$$(1, a+b), (3, 3a+b), (5, 5a+b)$$

なので、
$e1 = (a+b-2)^2+ (1-1)^2$
$e2 = (3a+b-4)^2+ (3-3)^2$
$e3 = (5a+b-5)^2+ (5-5)^2$

つまり
$$e1 = (a+b-2)^2$$
$$e2 = (3a+b-4)^2$$
$$e3 = (5a+b-5)^2$$

ここで、損失関数をL(a, b)とおくと、
$L(a, b) = e1 + e2 + e3
=(a+b-2)^2 + (3a+b-4)^2 + (5a+b-5)^2$

となります。

L(a, b)をまずaについて偏微分すると
$$
\frac{∂L(a, b)}{∂a} = 2(a+b-2)×1 + 2(3a+b-4)×3 + 2(5a+b-5)×5\
= 70a+18b-78  ・・・①
$$

次にbについて偏微分すると
$$
\frac{∂L(a, b)}{∂a} = 2(a+b-2)×1 + 2(3a+b-4)×1 + 2(5a+b-5)×1\
= 18a+6b-22  ・・・②
$$

となるので、①、②を連立して

$$
a=0.75, b≒1.4
$$

よって上のa, bが損失関数L(a, b)を最小にする値となります。
つまりこのa,bをx,yの係数に持つ直線が、各点(1,2)(3,4)(5,5)それぞれにもっとも近い
(←ここをしっかり理解しましょう!上の細かい計算はプログラムが勝手にやってくれます笑)

y = 0.75x + 1.4

が上の赤線の式となります。つまり、目的関数!!!

まとめ

これで、データ分布が一直線上にないときに、目的関数をどうやって求めるのか??ということが分かりました。
まとめると

①目的関数を設定する(y = ax + b)
②そこから損失関数(e1 + e2 + e3)を求める
③損失関数が最小となるパラメーターを求める(a, b)
④最初に設定した目的関数に代入(y = 0.75x + 1.4)

最初に示した、身長、体重の問題でもこれと同じように計算すれば目的関数を求めることができ、体重55kgの人の身長を予測することができます!!!

用語紹介

ここで、機械学習らしい単語を紹介すると、上の①~④の考えが、「教師あり機械学習」の最も基本的なアルゴリズムである「線形単回帰」(最小二乗法)とよばれるものです。なんだか、いかついですね
 
そして、今回は説明変数(覚えてますか?予測に使われるデータのことです)が一つだったので、これを単回帰分析と呼びます!(やっとでてきた今日のテーマ)

これが理解できれば、「このデータを最小二乗法で分析しといて〜」って言われたときに「任せてください!」って言えちゃいます。

これが複数の説明変数(身長と体重から50m走のタイムを予測するとか)になると重回帰分析(聞いたことある人いるかも)と呼ばれますが、考え方は全く同じで計算が少し複雑になるだけです。計算が複雑になっても、理屈をわかっていれば計算はコンピューターがやってくれます笑

わかったこと

  • 機械学習は単なる数学

プログラミング、AIが近年ほぼ同時期に、同じだけ叫ばれて、機械学習をプログラミングの一種と思っている人も少なからずいるみたいですが別物でした。機械学習は数学で、それに適したものがプログラミングということですね。

次回

今回は理論だけで長くなってしまったので、pythonによる実装までいきませんでした。すみません、、
次回は、

  • 説明変数が多いときにどうやって目的関数をもとめるか

をプログラミングを主役にして学んでいきましょう!理屈がわかったので次回はコンピューターにガンガン計算してもらいましょう〜

ここわかりずらいとかあれば教えてくださいお待ちしております。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0