0 前書き
中学1年生のjp_Pythoniaです。初めまして。前回書いた記事がバズったのと、情報量が多いので、分割版にしました。
機械学習の概念的なところ、基礎を8回に分けてやっていくシリーズの1番目です。
1 機械学習とは?
機械学習とは何か。トム・ミッチェルは、こう定義しています。
コンピュータ・プログラムは、ある課題 T について、 ある性能基準 P に基づき、
もし T についての性能が基準 P で測定して、経験 E と共に改善している場合に、
経験 E から学習したと言うことが出来る。
機械学習には、大きく分けて2つの種類があります。次の2つのセクションで、その2つ、「教師あり学習」と「教師なし学習」について解説していきます。
2 教師あり学習とは?
教師あり学習とは、最も一般的な機械学習問題です。
主な特徴として、
- 与えられるデータセットに正解がある
- 分類問題と回帰問題に分けられる
という2点があげられます。
2-1-1与えられるデータセットに正解がある
→教師あり学習では、与えられるデータセット全てに「正解」があります。
e.g.)
天候を予測し、明日は雨か晴れかを判断して出力するアルゴリズムを開発しました。
学習した天候のデータには全て、その日は雨だったか晴れだったかを書いてありました。
上記のような例の時、「教師あり学習」と呼びます。
なぜなら、アルゴリズムにとっての「正解」である、雨か晴れかのラベルは、初めからデータについていたからです。
2-1-2 分類問題と回帰問題に分けられる
教師あり学習には、さらに大きく分けて2種類のジャンルがあります。
それは、「分類問題」と「回帰問題」です。
2-2 分類問題とは?
先ほど示した、天候を予測するアルゴリズム。これは、分類問題に当てはまります。なぜなら、雨か晴れかを「分類」しているからです。
ちなみに、雨か晴れかのデータは、「離散値」とよばれます。
2-3 回帰問題とは?
逆に回帰問題とは、「連続値」を扱う種類の問題です。
e.g.)
明日の気温を予測するアルゴリズムを開発しました。
学習したデータは、天気の様子と、気温を結びつけたものです。
上記のような例の時、出力するデータの気温は、「連続値」なので、回帰問題と呼ばれます。
3 教師なし学習
教師なし学習教師なし学習を使用すると、結果がどのように見えるかをほとんどまたはまったく理解せずに問題に取り組むことができます。変数の効果が必ずしもわからないデータから構造を導き出すことができます。データ内の変数間の関係に基づいてデータをクラスタリングすることにより、この構造を導き出すことができます。教師なし学習では、予測結果に基づくフィードバックはありません。
https://www.coursera.org/learn/machine-learning/supplement/1O0Bk/unsupervised-learning より引用
上記の通り、教師なし学習には大きく2つの特徴があります。
- 教師あり学習とは違い、「正解」となるデータがない
- クラスタリング・アルゴリズムを用いる
3-1 クラスタリング・アルゴリズムとは?
クラスタリング・アルゴリズムとは、
- データラベルが全て同じ
- データラベルがそもそもない
- ラベルづけがされていない
データを扱う際に役立つアルゴリズムです。
クラスタリング・アルゴリズムは、与えられたデータに法則、ジャンルなどを見つけ、自らクラスターを生み出してそこに分類します。
4 線形回帰(モデル表現)
4-1 おっと...その前に
データセットを用意しました。こちらです。
ケース | 土地の面積 (x) | 土地の価格(y) |
---|---|---|
1 | 2104 | 460 |
2 | 1416 | 232 |
3 | 1534 | 315 |
4 | 852 | 178 |
・・・ | ・・・ | ・・・ |
8 | 680 | 143 |
今から使う文字の定義をしていきます。
- m ・・・ケースの数です。上記のデータセットでは8
- x ・・・土地の面積です。xi で、i番目の土地の面積を表します。x2 = 232
- y ・・・土地の価格です。yiで、i番目の土地の価格を表します。y4 = 178
- h・・・仮説(hypothesis)を意味する略語です。
4-2 仮説の表現方法を決める
仮説hを表現する表現式を作ります。それがこちら。
hθ(x) = θ0 + θ1x
ちなみにこれは、一見難しそうですが、中学生でやる一次関数の式、Y = B + AX と酷似しているのがわかるでしょうか。一次関数は、下のようなグラフですから
- b → θ0
- a → θ1
となっているだけだとわかります。
そしてhθ(x)が、直線を示しています。
一番詰まりやすいところですから、ここだけは暗記して欲しいです。
5 コスト関数(目的関数)
5-1 そもそも: 目的
さきほどのモデル表現に続き、目的関数を定義していきますが、そもそもこれらの目的は、与えられた(プロットされた)データセットに最適化された線を引くことです。例えば、こんな図があります。(データはプロット済みです)
この時、赤い線を求め、青い点との距離の2乗を最小化するのが目的です。
5-2 パラメータの選択方法
5-1で紹介した目的を達成するためには、最小化をするために働く式を使う必要があります。しかし、ただ式を見たところでよくわからないので、直感的な理解につながる説明をします。
そもそも、パラメータとは、θ0やθ1などの名前です。これにどのような数字をあてがうかで、上のグラフでいう赤い線の向きが変わっていきます。一次関数を中学生の時にやったことがあれば大丈夫です。
e.g.)
θ0 = 1.5で、θ1 = 0の時には:
となります。
θ0 = 1で、θ1 = 0.5の時には:
となります。
5-3 パラメータを選択する式
結局のところ、何がしたいかというと、与えられたθ1x (x軸)の値に基づいて、θ0 (y軸)の値を出せばいいわけです。
では式を作っていきましょう。
5-3-1 Step 1
(hθ(x) - y)2
上の式を解説していきます。
Step 1の式は、上のグラフの赤い直線hθ(x)から、yの値を引いたものを2乗しています。
5-3-2 Step 2
4-1 を覚えていますか? Xiでi番目のxの値を指定できたこと。
Step 1の式では、サンプルが一つも指定されておらずとても抽象的なので、全てのサンプルを取得するように付け加えていきます。それがこちら
mΣi=1 (hθ(x( i )) - y( i ))2
mΣi=1 は、i=1(ケースナンバー1)の時から、m(ケース全ての数)までを足し合わせ流という意味です。
また、(hθ(x) - y)2 → (hθ(x( i )) - y( i ))2 にかわったのですが、これは、i番目のxから、i番目のyを引きなさいという意味です。
5-3-3 Step 3
最後に計算を簡略化するため、1/2mをかけます。
1/2m mΣi=1 (hθ(x( i )) - y( i ))2
ただし、1/2,1/mは、結果が変わらないから簡略化しているだけなので、特に意味はありません。
5-4 結局コスト関数とは?
5-1 で書いた通り、θ0やθ1 の数を決めて、プロットしたデータにぴったりフィットする最小化された関数の一つがコスト関数で、パラメータの選ぶ式を紹介してきました。
さて、結局のところコスト関数とは、J( θ0 , θ1)です。ですから、コスト関数を示す時は、
J( θ0 , θ1) = 1/2m mΣi=1 (hθ(x( i )) - y( i ))2 と表せます。
よってこれからはコスト関数をJで表していきます。
6 コスト関数(目的関数) #2
6-1 簡素化
これまでは、hθ( x ) = θ0 + θ1xを使ってきましたが、簡素化して、
hθ( x ) = θ1x
と表現します。
それはつまり、θ0 = 0と言っているようなものです。
パラメータが一つだけなので、コスト関数Jの式は、
J( θ1 ) = 1/2m mΣ i=1 (hθ(x( i )) - y( i ))2
と表現できます。
6-2 理解を深める
6-1 の通り簡素化すると、一次関数のグラフ Y = AX + BにおけるB = θ0 = 0ですから、目的関数(コスト関数) Jは、原点を通ることになります。
ちなみに、仮説のhθ(x) は、xに対応する関数です。なぜなら、θ1がすでに定まっていたら、xに対応する式となるからです。
対して、コスト関数Jは、θ1 に対応する関数となっています。それは、6-1 を見れば理解できるはずです。
6-3 仮説とコスト関数のつながり
まず、データが3つ、それぞれ(1,1) , (2,2) , (3,3) の位置にあると仮定します。
仮説 hθ(x) の、θ1の値によって、θ0 = 0と置いているので、仮説の直線は変わります。
では、上記の仮説をもとに、目的関数Jにプロットする数値を計算していきます。
まず、紫色の線。緑色の丸がデータの場所なので、その差は、小さい順に0.5, 1.0, 1.5です。
では、その3つを、コスト関数Jの式に当てはめていきます。
J( θ1 ) = 1/2m mΣ i=1 (hθ(x( i )) - y( i ))2
これを計算すると、
J( θ1 ) = 1/6 (3.5) = 0.58... となります。
同様に、マジェンタ(pink)色の線では、
J(θ1) = 0
赤い線では、
J(θ1) = 2.33... となります。
そして、今得た3つの値をプロットします。
その結果がこちらです。
線の色と丸の色が対応しています。上記のグラフが、目的関数Jを示しています。
7 最急降下法(勾配降下法)
5-4で定義した、目的関数J。7では、Jを最小化する、最急降下法と呼ばれるアルゴリズムについて解説します。
7-1 イメージ
(https://linky-juku.com/simple-regression-analysis3/)より引用
(https://linky-juku.com/simple-regression-analysis3/)より引用
しかし弱点として、上のグラフのように、局所解と呼ばれるもの(最適解ではなく、望ましい答えではない)が答えになる可能性がある。
7-2 数学的な解説
使うのはこんな式です。
Step 1
:= という部分は、左辺に右辺を代入して更新するという意味です。
Step 2
α は学習率を指します。最急降下法は下の図のように幾つものステップで最小値にたどり着きます。α が大きければ、そのステップも大きくなります。
Step 3
覚えていますか。コスト関数。実は、J(θ0, θ1)は、コスト関数です。ご存知の通り。
ですから、このように変換できます。
J(θ0, θ1) =
1/2m mΣi=1 (hθ(x( i )) - y( i ))2 =
1/2m mΣi=1(θ0 + θ1 x( i ) - y ( i ) ) 2
そして、θ0, θ1 のパターンを考えていきます。
θ0 ( j = 0) : ∂/∂θ0 J(θ0, θ1 ) = 1/m mΣi=1 (hθ(x( i )) - y( i ))2
θ1 ( j = 0) : ∂/∂θ1 J(θ0, θ1 ) = 1/m mΣi=1 (hθ(x( i )) - y( i ))2
ok。
7-3 最急降下法(勾配降下法)で、大事なポイント
実は、最急降下法の式をご覧になっていただいたと思いますが、とても大事な要素があります。
それは、同時にθ0とθ1を更新することです。
θ0 := Temp0
θ1 := Temp1
上記の式では、一旦の計算を変数Temp0,1に代入した後、θ0とθ1に代入しています。
ではこうしないで、
のようにしたらどうでしょうか。
実は大きな問題があります。それは、2行目の式の時点で、θ0が変数Temp0に置き換わっているので、3行目の式の右辺では、新しい値となったθ0を式に使うことになってしまっている点です。
実際に問題が起きるかどうかに関わらず、同時更新は必須ですから、気をつけてください。
### 7-4 最急降下法を線形回帰で解く
前提として、最急降下法はコスト関数の一部です。
1.amazonaws.com/0/448030/6a44b9b9-434a-58ba-e8c4-29d043d2965e.png)
( https://www.coursera.org/learn/machine-learning/lecture/kCvQc/gradient-descent-for-linear-regression )より引用
さて、上記2枚の画像を見てもらえましたでしょうか。
ちなみに、右の図は、こちらのコスト関数の図を等高線で描き、2次元で見えるようにしたものです。
先ほどの図では、青い線を動かしたら、赤いばつ印が増えた結果を表しています。ご存知の通り、左が線形回帰で右がコスト関数です。線形回帰の仮説の線の方向を変えることで、コスト関数の結果も変わっていますね。こちらが、7-4で伝えたかったことです。
例えば、最急降下法において局所最適解に結びつかないようにするなどの使い道があります。
8 行列とベクトル
8-1 行列って何?
例えば、上のものが行列です。3 × 2の。
8-2 ベクトルって何?
ベクトルとは、横に1列しかなく、
上のように、n × 1の行を表します。
8-3 ルール
ルールはいくつかあります。
例えば、
y i = i th エレメントのこと (上の例ならa)
ただし、インデックスに割り振られた番号が、0から始まるか、1から始まるかに気をつけないといけない。
基本的には1始まりのインデックスのベクトルを使う。
基本的にほとんどの人はインデックスを参照するときに大文字を使う。小文字を使うのは格納された生のデータであることが多い
8-4 行列の足し算と引き算
行列の足し算、引き算をするときのルールは、
同じ次元の行列しか
足し引きできないことです。
上記を見ていただければわかると思いますが、足す要素2 つと、答えの要素はそれぞれ3 × 2になっています。そして、縦横の場所が一致している数字同士が足し合わされています。
8-5 スカラー乗算
スカラーなんて大げさですが、実数を意味しています。ですから、
てな感じでOKです。
8-6 行列とベクトルを掛け合わせる
こんな感じになります。
左から順に行列の名前を、A,B,Cとおきます。
Step 1: Aの上の1段の左をBの上の段に、Aの上の1段の右をBの下の段にかけます。 (ようするに 2 × 6 と5 × 9です。)
Step 2: 上と同様、3 × 6 と、4 × 9をしていきます。
ちなみに、Aは今回、2 × 2 の大きさでした。Bは 2 × 1, Cは 2 × 1 です。実はこれ、たまたまじゃないんです。しっかりルールがあります
A → m × n (2 × 2)
B →n × 1(2 × 1)
C → m × 1(2 × 1)
以後、このルールを使うので気をつけておいてください。
8-7 2つの行列同士を掛け合わせる
実は、線形回帰アルゴリズムにおいて、繰り返しのアルゴリズムを使わずに済む方法があり、このセクションはそれにつながるものでもあります。
今回やるのは、
のやり方です。まず、Bを2つのベクトルに分割します。下のように
それぞれ計算しました。
そして2つに分かれたCをまとめる
以上です。
8-8 掛ける順番は間違えないように
当然、A × B を B × Aなんかにしちゃダメです、なぜかは、8-6をみてください。
当たり前すぎることしか書かないのは嫌なので、掛ける順番が間違っているかどうかは自分で考えてくださいとだけ書きます。
9 ありがとう
ここまで読んでくださっていただきありがとうございました。
続編ができたらリンクを貼りますから是非読んでください。