前提
機械学習について学習しなくては行けない理由ができた。だから、いろんなサイトを検索した結果、まずはcourseraのMachine Learning講義を受けてみた。
タダだから皆さんもぜひ。
受けるだけではいけないから、感想兼知識整理としてこの記事を投稿する。
1週目
What is Machine Learning?
機械学習の定義
ある課題Tについて、ある性能基準 P に基づき、もし T についての性能が基準 P で測定して、経験 E と共に改善している場合に、 経験 E から学習したと言うことが出来る。
機械学習の分類
教師あり学習と教師無し学習の主に2つだけ。
教師あり学習
データセットに正しい答えが与えられている学習。
回帰問題
一種の連続的な属性の値を予測すること。
例としては、敷地面積から、土地の価格を予測することなどがある。
分類問題
離散的な値を予測すること。
例としては、腫瘍の大きさから、癌か否かを予測することがある。
別に二値である必要はなく、癌の種類が3つあってそのどれに当てはまるかを予測する場合も分類問題に当たる。
教師無し学習
クラスタリングとほぼ同じかな。
ラベル(正解)の与えられていないデータセットをクラスタリングする(規則性を見つけてグループに分ける)ことで正解を予測する。
非クラスタリング
カクテルパーティーアルゴリズムが挙げられる。
2つのマイクを用意し、福数人の会話を録音すると、大きさは異なるが同じ波形のデータペアが見つけられる。
これにより、雑音を取り除き、一人一人の声を抽出できる。
これも教師無し学習。
プログラミング言語 Octive
オープンソースソフトウェアであるのはもちろんだが、特に機械学習においてはかなり簡略化されたコードで書けるため、試作する上では非常に重宝する。
試作をOctiveで作り、それを他の言語に移植するのが吉。
##Model representation
代表的なシンボル(お作法)
m
訓練サンプルの総数
x
入力変数。特徴量とも呼ぶ
y
出力変数。目標変数とも呼ぶ。
i
訓練データの順番。
h
仮説(hypothesis)。ただ、昔の呼び方が定着してしまったため、分かりにくい。
データセットをアルゴリズムにつっこうんだ時とき、導き出される関数のこと。
つまり、y=h(x)となる。ちなみに、この関数の定数はθを用いる。
線形回帰
結局何を求めているかというと、
h(x)=ax+bのとき、yーh(x)が誤差であるわけだが、
J(a, b)=1/2m*Σ(y-h(x))^2が最小となるようなa,bを求めているのだ。
これを最小二乗法という。また、J(a, b)を目的関数という。
最急降下法
アルゴリズム
repeat until convergence{
Θ := Θ + α*(J(a,b)の導関数) (Θはaかb)
//αは学習率を指し、大きいほどθの変化がでかい
}
:=は代入を表す。
こうするとどんどんa,bが変化していくのだが、例えば(a,b)=(1,3)でa := 1 +J(1,3) =3となったとき、b:=3+J
(3,3)にしてはいけない点だ。
必ずb:=3+J`(1,3)とし、同時進行性を持たせること。
この式は傾きに着目している。
例えば、変数を減らしてJ(a)=(a-2)^2+3の二次関数だとする。ちなみにmin J(a)はa=2のとき。
最急降下法のスタートがa=5のとき、a=5の点でのJの傾きは正である。よって、
a := a + αJ(a)の式において、αJ
(a)>0であるため、代入されるaは5より小さい。
するとどうだろう。aはa=2に近づいたことになる。これが最急降下法の原理である。
学習率αが小さいと、計算に時間がかかるが、大きすぎると最小値を飛び越してしまう。注意が必要。
ただ、αを変化させる必要があるかと言えばNoである。なぜなら、最小のaに近づくにつれて傾きは小さくなるため、勝手にJ`の項が小さくなるからである。
よくできたアルゴリズムである。
これは、すべてのデータセットを毎回代入することから、バッチ勾配降下法という。
一瞬だけ用語整理
勾配降下法∋最急降下法=バッチ勾配降下法
行列
縦3、横4の行列を3*4行列と呼ぶ。
また、n*1行列をベクトルと呼ぶ。
行列同士のかけ算
mn行列とn1ベクトルのかけ算なら行うことができる。答えはm*1のベクトル
A = [[2, 3, 5],
[1, 3, 6]]
B = [[1],
[2],
[3]]
A*B = [[2*1 + 3*2 + 5*3],
[1*1 + 3*2 + 6*2]]
つまり、行列の順序を入れ替えると計算が行えない
これを用いるととんでもないことが起きる。
例えば、y = 10 + 8xであり、x = 5, 6, 2などを代入したいとする。
ループでやっても勿論良いのだが。
A = [[1, 5],
[1, 6],
[1, 2]]
B = [[10],
[8]]
とするとどうだろうか。簡単に計算結果がベクトルとして得られるのだ。
かけ算の注意点
AB != BA
(AB)C = A(BC)
単位行列
スカラー量同士のかけ算においての1のような行列のこと。
正方行列で、
I = [[1, 0, 0]
[0, 1, 0]
[0, 0, 1]]
などを指す。
単位行列をIとしたとき
AI = IA = A となる
ただし、Iの次元はそれぞれ異なるが、、、
行列の逆数
Aが正方行列(mm行列)であるとき、
AB = IとなるようなBをAの逆数と言う。
手計算ではかなりしんどい
また存在しない場合もある。
行列の転置
行列Aに対して、行と列を入れ替えたような行列BをAの転置と呼ぶ。