Coursera Machine Learning 総復習用メモ

# はじめに
もうすぐ[Coursera Machine Learningコース](https://www.coursera.org/learn/machine-learning/home/welcome)を終えることができそうです。
week11 のラストで、この動画で学んだことの一覧が映されてました。

```
Supervised Learning
	Linear regression
		Hypothesis
		Parameter
		Cost
		GradientDecent
	logistic regression
	neural networks
	SVMs

Unsupervised Learning
	K-means,PCA,Anomaly detection

Special application/special topics
	Recommender systems
	large scale machine learning

Advice on building a machine learning system
	Bias/Variance
	Regularization
	deciding what to work on next
	evaluation of learning algorithms
	learning curves
	error analysis
	ceiling analysis
```

そこで自分の復習のために、[スライド](http://qiita.com/tackey/items/89c4a94f1c0c36d3c4d3)を見直しながらメモを取ったので共有します。
なお、私の理解度に応じてメモの量が変わっているように思います、ご了承ください。



# 教師あり学習
## 線形回帰
- 仮説：hθ(x)=θ0+θ1*x
- パラメータ
- コスト：Jθ(x) = 1/2m Σ (hθ(x)-y)^2
- (バッチ)勾配降下法：(すべてのトレーニングデータで)傾きに学習率αをかけたもので調整
- 複数のfeature
- Feature Scaling
- Mean normalization
- featureの選び方：x^2、ルートx
- 正規方程式：勾配降下法を使わずに、iterateせず計算でパラメータを算出

## ロジスティック回帰
- Classification:SpamEmail,OnlineFraud。分類問題は0~1,ロジスティック回帰がよく当てはまる。
- htheata(x) = g(θ’*x)
- g(z) = 1/(1 + e^-z)
- hθ(x) = 1/(1+e^-θ’*x)
- シグモイド関数、ロジスティック関数と呼ぶ
- Decision Boundary/Non-linear decision boundaries
- コスト：y=1の時は-log(hθ(x)),y=0の時は-log(1-hθ(x))。まとめると、J(θ) = -1/m*Σ(y * loghθ(x) + (1-y)log(1-hθ(x)))
- θ = θ - α*Σ(hθ(x)-y)x
- 他にConjugate gradient,BFGS,L-BFGSなどの最適化アルゴリズムがある
- Multiclass classification。それぞれの確率を求め、最大の確率のものと予測

## ニューラルネットワーク
- 例：画像のピクセルから車かどうかを判定する
- 脳のニューロンからきてる。
- Input layer,Hidden layer,Output layer
- bias unit,activation unit
- matrix of weightsΘ
- フォワードプロパゲーション
- OR/XOR/XNOR/AND
- 手書き文字分類(の動画)
- Multiple output units/One-vs-all。Pedestrian,car,motorcycle,truck.
- コスト
- バックプロパゲーション：最急降下法だと、コスト、傾きを計算する必要。
- unrolling parameters:複数のΘをベクトルに変換
- Gradient Checking:実装がうまくできてるかの確認。あるθでの傾きは、(J(θ＋ε)-J(θ-ε))/2ε　に近いはず。
- Random initialization: Θはすべてゼロで始めてはいけない。
- 例：自動運転



## SVMs
### ロジスティック回帰から考える
- hθ(x)=1/(1+e^-θ’*x)
- y=1 に対しては hθ(x)=1が求められ、その場合はθ’*x>>0
- y=0 に対しては hθ(x)=0が求められ、その場合はθ’*x<<0
- コストは-y*log(1/(1+e^-θ’x))-(1-y)*log(1-1/(1+e^-θ’x))。y=1の場合と0の場合について考える。(図示)
- 決定境界はマージンが大きくなるように定まる。
- Cの値が大きければ、外れ値の影響を大きく受ける

### カーネル
- landmarkを選ぶ
- C=1/λ
- Large σ^2:higher bias
- Small σ^2:higher variance

# 教師なし学習
例：マーケットセグメンテーション、ソーシャルネットワーク分析、コンピュータクラスタ、銀河データ分析

## K-means
- K個のクラスタに分ける手法。

1. 重心を適当に決める
2. データ1つ1つに対し、最も近い重心の番号を振る
3. 重心をそのデータの平均値に移動する。
4. 2と3を繰り返す。

- ランダムイニシャライゼーション
    - ランダムに選んだデータを重心としK-meansを行い、最終的に算出されたコストが最も小さいものを選ぶ
- クラスタ数の決め方
    - Elbow method(コストが下がりにくくなったKにする)
    - 目的によって決める(例：Tシャツのサイズ)

## 次元削減
- 2次元を1次元にしたり。
- 目的
    - データの圧縮(メモリ/ディスクの削減。学習スピードアップ)
    - 2次元なら図示可能(例：国のGDP等)

### PCA(主成分分析)
- 次元削減する際に、どんなN次平面に投射するのがProjectionErrorを最小化できるか。
- PCAと線形回帰は異なる

1. はじめにfeature scaling,mean normalization実施
2. 共分散行列の計算(covariance matrix): Σ= 1/m * Σ(X*X’)
3. 固有ベクトルの計算(eigenvector):[U,S,V] = svd(Σ)
4. Uを用いる:Ureduce=U(:,1:k)

- 次元削減したものを再構築(reconstruction)

- 主成分の数 k の決め方
    - Sを使う。分散が99%以上維持される最も小さなkにする
- 「overfittingを解消するためにfeatureを減らす」ことを目的としてPCAを使わないこと。正規化項を加えよう。
- PCAを実装する前に、まずはraw dataで実装しよう。
		
## Anomaly detection
- ノーマルでない確率を求める
- 例：飛行機エンジンのエラー、Fraud、製造、データセンター

### ガウス分布
- 平均　μ
- 分散　σ^2
- その事象が起きる確率p(x)を求め、εより小さい(起きづらい)ければanomaly
	
### データの数
- normal 10000,anomalous 20　なら

1. train: normal 6000,cv: normal 2000 anomalous 10,test: normal 2000,anomalous 10
2. train: normal 6000,cv: normal 4000 anomalous 10,test: normal 4000 anomalous 10

### 評価方法
- Precision/Recall
- F1スコア

- εはcvで決めても良い。

### Anomaly detectionと教師あり学習のどちらを使うべきか
- positive exampleが少ない場合
- negative exampleが大き場合
- anomalなもののパターンが多い場合(これまでのpositiveからどんなものか規則性がわからない。今後起きるanomalが予測できない)

### featureの選び方
- ガウス分布になってない場合
- 二つのfeatureのp(x)がどちらも大きくてもanomalousな場合
- CPU load/network traffic

### 2つのfeatureに相関のようなものがある場合
### original model/multivariate gaussian
		

# Special application
## レコメンド
- 例：映画レーティング
- Userの好みθと映画X
- romance,actionもあった(がそんなものはそもそもわからない)
- Xのそれぞれの距離から似ている映画を探す
- mean normalization:何も見てない人に何を推薦すべきか
		
## 大規模データの機械学習
- It’s not who has the best algorithm that wins. It’s who has the most data.
- バッチ最急降下法(xすべて)
- 確率的最急降下法（x 1つ1つ）
- ミニバッチ最急降下法(x 幾つか)
		
###収束してるかチェック
- バッチ：Jtrain
- 確率的：例えば1000個の平均

### 学習レートαを徐々に減らすやり方
		
### Online learning:データが届いたら即学習、捨てる

###Map-reduce:計算を分割できるならコンピュータ、Coreに分担させて、結果を結合


# 機械学習システムを構築するにあたって
## バイアス・バリアンス（underfitting,overfitting）
- overfittingかunderfittingかを知ることで、何をすべきかを考えます。
    - overfitting:feature多すぎてtrainデータに当てはまりすぎて新たなデータを正しく予測できない

## 正則化(regularization)
- パラメータにペナルティを与えてsimpleなhypothesisに。λ。

## 学習アルゴリズムの評価、次に何をすべきか
### 選択肢例は下記
- Get more training examples
- Try smaller sets of features
- Try getting additional features
- Try adding polynomial features
- Try decreasing λ
- Try increasing λ

### 仮設の評価:テストセット
### モデルの選定
- train,validation,test
- featureはいくつがいいか
- バイアス/バリアンスの診断
- underfitting,overfitting
- 正則化とバイアス/バリアンス
    - λの数値をいくつにするか
- 学習曲線
    - JtrainとJcvを、横にデータセットの数、縦にerrorで描く。
- ニューラルネットワークも小さければunderfitting、大きいとoverfittingしたりする
		
		
## error analysis
- 例：スパムメールの分類(w4tches,Med1cine)
- 簡単に実装し、学習曲線でデータを集めるべきか、featureを増やすべきか考える。
- 分類ミスが起きていたら、ミスしたメールを実際に見て。タイプを見たり、どんなfeatureが正確性をあげるか考える。
- 実際にやってみて、エラー率が下がるか検証する
- 歪んだクラス(skewed classes)
    - 例：がん患者の判定率
    - Precision/Recall
    - F1スコア

## ceiling analysis(week11未視聴)
		

# 終わりに
Andrew Ng 先生ありがとうございました。