*

【機械学習】Stanford University Machine Learning / Week1【学習メモ】

0.何の学習メモ?

・スタンフォード大学がCourseraをプラットフォームにして提供している機械学習のコース(詳しくはここ)の学習メモ
・学習メモだけあって雑然としてます

I.イントロ

機械学習の定義

Tom Mitchell (1998) Well-posed Learning Problem: 良設定学習問題
A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.
そのコンピュータープログラムは、いくつかのタスクTといくつかのパフォーマンス評価Pに関連する経験Eから学ぶ、と言われる。Pによって評価されたTのパフォーマンスが経験Eによって向上する場合。

例:
・経験:メールをユーザーがスパムか否か振り分ける
・タスク:スパムを振り分ける
・評価:正しく振り分けられた数(確率)

機械学習アルゴリズム

・教師あり学習(Supervised learning)
・教師なし学習(Unsupervised learning)

(その他:強化学習(Reinforcement learning)、レコメンドシステム(Recommender systems)

教師あり学習

・正しい答えが与えられている

・回帰(Regression)問題:連続(Continuous)(or 実数(Real))値を予想。例、向こう3ヶ月の価格の推移
・分類(Classification)問題:離散(Discrete)値を予想。例、悪性(malignant)or良性(benign)

・分類に使う特徴や属性が無限にある場合はどうするのか?→サポートベクターマシン(Support Vector Machine)

教師なし学習

・答えは与えられていない

・クラスタリング:凝集性(Cohesive)があるデータは何か?
例:
ニュースの分類(Google News)、遺伝子タイプの分類、Organize computer clusters、Social Network Analysis(誰と仲がいい?等)、Market segmentation、Astronomical data analysis(銀河の成り立ち等)

・カクテルパーティー(Cocktail party)問題
-2つ以上のマイクの音データを基に、音源ごと(話者とかBGM)にデータを分ける。
-Octaveでコーディングすると、上記は下記コードで済む(らしい)
[W,s,v]=svd(repmat(sum(x.^*,1),size(x,1),1).^*x)^*x');
(svdは、singular value decomposition。なんのこっちゃ)

機械学習のコーディング

・Octaveでプロトタイプを作成→そこからPythonやC++で実装
(これがいい、と講師の人は言ってる。”trust me on this one”らしい)

II.1つの変数の線形回帰(Linear Regression with One Variable)

モデル紹介

例:
・ある住宅の敷地面積から、その住宅の価格を予想したい
-教師あり学習、線形回帰

今後使用していく記号とか

・与えられるデータは、Training set
m=訓練(Training)の例の数
x‘s=input(特徴)
y‘s=output(目標変数)
(x,y)=ある訓練データの一例
(x^{(i)},y^{(i)})=i番目の訓練データ

機械学習のモデル

Training Set

Learning Algorithm

h(hypothesis)

xhy
→”h maps from x’s to y’s”と呼ぶ
→今回の例だと、xは住宅の敷地面積、yは推測された価格
(“hypothesis”という表現に違和感を感じるが、機械学習の初期からこう呼ばれているらしい)

hの表現方法

・1つの変数の線形回帰(Linear regression with one variable)
(・一変量線形回帰(Univariate linear regression))
h_\theta (x)=\theta _0 + \theta _1 x
h(x)と略す場合もあり)

\theta _i=パラメータ(Parameter)
→このパラメータを何にするか?

費用関数(Cost funciton)

・費用関数:J(\theta _0,\theta _1)=\frac{1}{2m} \sum_{i=1}^{m} \left(h_\theta (x^{i})-y^{i} \right)^2
(二乗誤差関数(Squared error functionとも))

・上記費用関数を\theta_0\theta_1で最小化(minimize)する。

費用関数に対する直感(Intuition)的な理解

・簡素化して考えてみる
h_\theta (x)=\theta _1 x
\displaystyle {\mathop{minimize}_{\textstyle \theta _1}}=J(\theta _1)=\frac{1}{2m} \sum_{i=1}^{m} \left(h_\theta (x^{i})-y^{i} \right)^2

・データが(1,1),(2,2),(3,3)だった場合:
\theta _1=1
J(\theta _1)=0
\theta _1=0.5
J(\theta _1)=0.58
\theta _1=0
J(\theta _1)=2.3
・・・を続けていくと、\theta _1=1を頂点とした下向きの放物線となり、\theta _1=1が最適解だとわかる。

・簡素化せずに考えてみる
\theta _0\theta _1の2変数になるので、縦軸をJとするとグラフ化するとお椀みたいな形になる。
→とは言え、3Dグラフを描画するのは大変なので、コンター図(Contour figures, contour plots, 等値線)で表す。そうすると、楕円みたいなのがいくつも重なるようなグラフになる。同じ直線上だとJは同じ値。
→これだとビジュアル的に、等高線的な感じで一番尖っているところらへんがJが最小。
→とは言え、変数が増えるとビジュアル的には表せなくなるので別の方法で変数の値を決める必要がある。
→勾配法(Gradient descent algorithm:直訳すると勾配降下法)

勾配法

・適当な\theta _0\theta _1で始める
\theta _0\theta _1J(\theta _0,\theta _1)が最小になってくれるように動かしていく
→開始位置が適切で無いと局所最適解(local optima)になってしまう可能性がある
→アルゴリズムは下記の通り。収束(convergence)するまで続ける。
\displaystyle \flushleft{repeat until convergence \{ }
\displaystyle \theta _j :=\theta _j - \alpha \frac{\partial }{\partial \theta _j} J(\theta _0,\theta _1) \flushright{(for j=0 and j=1)}
\}

\alphaは学習レート(learning rate)で値が大きいほど、一度に進む距離が大きい。
\theta _0\theta _1の値について同時に(simultaneously)更新する
→つまり、同時に更新しないと、それぞれの更新式でお互いの値を使う事になるので意図しない結果になる場合がある

・微分係数項(derivative term)\frac{\partial }{\partial \theta _j} J(\theta _0,\theta _1)は何をしているのか?
→単純化すると分かりやすい。\frac{d}{d \theta _1} J(\theta _1)
→費用関数の接線(tangent)
→下に凸な放物線を考えた場合、最小値(頂点)より左なら接線はマイナス(negative)、右ならプラス(positive)の値を取る。\alphaはプラスの値なので、値の更新の度に最小値に近づこうとしているのがわかる。
→ただ、\alphaの値が小さいと計算は遅くなり、大きいと最小値からどんどん離れていってしまう(overshoot)可能性がある(離れる度に接線の角度も大きくなっていくから)。
→局所最適解(最小値)にたどり着くと、接線の角度は0になるので、更新が止まる。
→最小値に近づくにつれ、接線の角度も小さくなり探索範囲も狭くなるので、特に\alphaを計算の度に設定し直す必要は無い。固定値。

費用関数に勾配法を適用する

・合わせると以下の様な式になる。偏微分も済んでいる。
\displaystyle \flushleft{repeat until convergence \{ }
\displaystyle \theta _0 :=\theta _0 - \alpha \frac{1}{m} \sum_{i=1}^{m} \left(h_\theta (x^{(i)})-y^{(i)} \right)
\displaystyle \theta _1 :=\theta _1 - \alpha \frac{1}{m} \sum_{i=1}^{m} \left(h_\theta (x^{(i)})-y^{(i)} \right)\cdot x^{(i)}
\}

・凸関数(Convex function)の場合は、局所最適(local optima)は無く、大域的最適(global optima)になる

・上記の勾配法は、Batch Gradient Descentと呼ばれる種類。
→Batch:各ステップで、全訓練データを使用する。今回の例だと、\sum_{i=1}^{m} \left(h_\theta (x^{(i)})-y^{(i)} \right)がそれ。

・ってか、こんな面倒なステップ(反復アルゴリズム:iterative algorithm)やらなくても偏微分で傾き0の所が最適解じゃん?
→確かにそれでも解けるが、データセットが大きくなった場合は、今回のような勾配法を活用した方がいい

Week2では?

・最適解となる\theta _0\theta _1の値をピッタリ導出する方法の有利(advantage)と不利(disadvantage)な面

・複数の特徴(feature)がある場合の計算
→線形代数(Linear Algebra)を用いる。マトリクスとベクトル。
→例えば、入力の坪数、寝室数、etcといったデータがひとつにまとまってるのがマトリクス。出力結果のまとめりがベクトル。

関連記事

small-icon.hover

【機械学習】Stanford University Machine Learning / Week4【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラットフォームにして提供している

記事を読む

small-icon.hover

【機械学習】Stanford University Machine Learning / Week3【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラットフォームにして提供している

記事を読む

small-icon.hover

【機械学習】Stanford University Machine Learning / Week2【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラットフォームにして提供している

記事を読む

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

small-icon.hover
【機械学習】Stanford University Machine Learning / Week4【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

small-icon.hover
【機械学習】Stanford University Machine Learning / Week3【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

small-icon.hover
【機械学習】Stanford University Machine Learning / Week2【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

small-icon.hover
【機械学習】Stanford University Machine Learning / Week1【学習メモ】

0.何の学習メモ? ・スタンフォード大学がCourseraをプラ

ダウンロード
【WebSocket】Safariからlocalhostに対してハンドシェイクする際の注意点

この記事の対象者 とりあえずlocalhostで色々と試したい

→もっと見る

PAGE TOP ↑