LoginSignup
68
69

More than 5 years have passed since last update.

courseraのMachine Learning(機械学習)学んだことメモ(1)

Last updated at Posted at 2015-08-05

はじめに

機械学習のために以下のコースを受講中です

ただ見てるだけでは、忘れていくのでメモっていくことにしました。

モチベーションになったもの

学習中+数学を分かっていないので、色々間違えて記載してあるかと思います。
ご了承下さい。

理解したこと

けっこうちゃんと勉強すると、そんなに難しくない。(まだ、勉強中ですが)
機械学習の目的は、テストデータを元に、一番近い数式を導き出す。

たとえば、こんなグラフがあって。
Figure_1.jpg

ここに、一番近い直線のグラフを書きます。
Figure_1_2.jpg

直線のグラフは、$y=ax+b$ ですよね。
この時の、$a$ , $b$ の値を求めよう。ってことです。

そのための手法の勉強をひたすらしていくのが、courseraのMachine Learningの内容みたいです。

これは、ニューラルネットワークの場合も同じで、
各ニューロンの入力の重み付け(どの入力を重要とみなすか。)を同じ手法で、
最適化していくってことみたいで、はやりのディープラーニングにつながっていくようです。

線形回帰(Linear Regression Model)

線形回帰の目標は、グラフに打ち込まれたデータに最適なライン(数式)を導くってことです。
数式ができれば、予測も可能になります。

訓練入力$x$ 対応する出力$y$があります。
求める直線の式をいかに定義します。
Hypothesis:
$h_\theta(x) = \theta_0 x_0 + \theta_1 x_1 + ... +\theta_n x_n$ ($x_0 = 1$)

$n=1$であれば、$y=ax+b$と同じです。$\theta = [ \theta_0, \theta_1, ... \theta_n]$が、$a$,$b$に対応しており
つまり、$\theta$を求めるのが目的です。

コスト関数(目的関数) (Cost Function)

コスト関数$J(\theta)$は簡単に書けば

$J(\theta) = |予測値 - 実値|$ってことです。
したがって予測値が近ければそれだけ0に近似します。

CostFunction

J(\theta)=  \frac{1 }{ 2m}  \sum_{i=1}^{m} (h_\theta(x^{(i)})-y^{(i)})^2

上記コスト関数を最小にする$\theta$を探します。

最急降下法アルゴリズム(Gradient descent algorithm)

先の話で、コスト関数を具体的にどうやって最小に持っていくかという問題があります。
それをこのアルゴリズムで解決します。

値が平滑化するまで繰り返し

\\

  \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m}[(h_\theta(x^{(i)} - y^{(i)} )x_{j}^{(i)}]

\\学習率(learning rate): \alpha \\

正規方程式

こちらのほうが簡単に求められるようですが$\theta$の個数(features)が増えるにつけ上記の最急降下法を使ったほうがいいそうです。目安は$\theta $が1万を超えたあたり。

$\theta = (X^T X)^{-1} X^Ty$

code
theta = pinv(X' * X)*X' * X * y;

Oataveを使う

数式のグラフ化に便利
ベクトル演算が得意。

Octaveインストール

Mac限定です。

brew tap homebrew/science
brew update && brew upgrade
brew install octave

editコマンドでatomが使えるようにします。

~/.octaverc
EDITOR('atom')

Hypothesisをベクトル演算

元々の定義

h_\theta(x) =  \theta_0 x_0 + \theta_1 x_1 + ... +\theta_n x_n    
(x_0 = 1)

定義

\theta = \begin{pmatrix} \theta_0  \\ \theta_1 \\ \dots \\ \theta_{n} \end{pmatrix}, x = \begin{pmatrix} x_0  \\ x_1 \\ \dots \\ x_{n} \end{pmatrix}

転置行列に

\theta^T = \begin{pmatrix} \theta_0  & \theta_1 & \dots & \theta_{n} \end{pmatrix}

最終的にこうなる

h_\theta(x) = \begin{pmatrix} \theta_0  & \theta_1 & \dots & \theta_{n} \end{pmatrix} \cdot  \begin{pmatrix} x_0  \\ 
x_1 \\ \dots \\ x_{n} \end{pmatrix} = \theta^T \cdot x 

ロジスティック回帰 Logistic Regression Model

線形回帰の場合はデータのプロットに対応する関数を作るために作りました。未来予測など具体的な値を予測するために使います。
該当するデータを分類する分類問題を解くときに使うのがロジスティック回帰です。

Hypothesis

$h_\theta(x) = g(\theta^Tx)$

gはシグモイド関数です。

シグモイド関数 Sigmoid Function(Logistic Funtion)

g(z) = \frac {1}{1 + e^{(-z)}}

$z \to \infty $ の時 $g(z) \to 1$に
$z \to -\infty$ の時 $g(z) \to 0$に

つまり $ 0 \geqq g(z) \geqq 1$ の範囲になることが保証される。

コスト関数(目的関数) Cost Function

Cost(h_{(\theta)},y) = \begin{cases}  -log(h_{\theta}(x)) & (y=1)  \\  -log(1-h_{\theta}(x)) & (y = 0) \end{cases}

CostFunction:


J(\theta)=  \frac{1 }{ m}  \sum_{i=1}^{m} Cost(h_{(\theta)},y) = \frac{1 }{ m}[\sum_{i=1}^{m} y^{(i)} log(h_{\theta}(x)) +(1-y^{(i)}) log(1-h_{\theta}(x)) ]

この関数の最小にする$\theta$を探す。

最急降下法アルゴリズム Gradient descent algorithm

値が平滑化するまで繰り返し

  \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m}[(h_\theta(x^{(i)} - y^{(i)} )x_{j}^{(i)}]
\\
  学習率(lerning rate): \alpha

正規化

上記のまま利用するとあまりにもグラフがフィットしすぎるので、
コスト関数を弄ってペナルティを課す仕組みに変更します。

CostFunction:


J(\theta)= \frac{1 }{ m}[\sum_{i=1}^{m} y^{(i)} log(h_{\theta}(x)) +(1-y^{(i)}) log(1-h_{\theta}(x)) ]
+ \frac{\lambda}{2m}\sum^{n}_{j=1} \theta_j^2

Gradient descent algorithm:
値が平滑化するまで繰り返し

  \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m}[ (h_\theta(x^{(i)} - y^{(i)} )x_{0}^{(i)} ] \\
  \theta_j := \theta_j - \alpha \sum_{i=1}^{m}[ \frac{1}{m} (h_\theta(x^{(i)} - y^{(i)} )x_{j}^{(i)} + \frac{\lambda}{m}\theta_j]\\
学習率(lerning rate): \alpha,  \\
j = 1,2,3,\ldots,n

ページを分割することにしました。今回はここまでで、次はニューラルネットワークに入ります。

68
69
1

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
68
69