2015/12/13

機器學習速遊筆記


機器學習速遊
 http://datasci.tw/event/machine_learning/
http://www.slideshare.net/tw_dsconf/ss-56071386

機器學習的定義:
從資料中計算出某種經驗

機器學習和AI的差別:
AI從遊戲規則中計算
機器學習從觀察別人進行遊戲/自己進行遊戲中學習


機器學習的符號定義:
X 題目
x1,x2,x3,...

Y 答案
y1,y2,y3,...

D 考古題庫
{(x1,y1),(x2,y2),(x3,y3)...}

f 宇宙法則
f(xi) = yi

g 機器學習的輸出
X -> Y (給他題目,他會給你一個他覺得的答案)

e error measure
用來計算 g 離 f 神多遠的函數

Ein in-sample error
寫考古題時的錯誤

Eout out-of-sample error
實際上考場時的錯誤

H 假說
所有可能的 g

A 機器學習的演算法
H,D,e -> g
根據考古題庫D,從 H 中挑選出一個離 f 最近的 g 的方法


判斷一個問題適不適用機器學習?滿足以下三點就適用。
1. 覺得資料背後有規則
2. 但是看不出來規則
3. 手上有資料


機器學習的應用
回答是非題:二元分類
在教育上預測學生能不能答對某個題目
使用 3000個學生 900萬筆記錄
H:假設學生的強度 > 題目的難度,學生就會答對

回答選擇題:分類
OCR
圖像辨識
人臉辨識

回答填空題:預測一個數值 regression
netflix 預測某人會給某電影打幾分
H:某人的喜好和電影的特性的接近程度

分群:把一群資料分成幾群
Supervised 和 Unsupervised 的差別
Supervised 事先知道有幾類
Unsupervised 事先不知道有幾類

Semi-supervised 有些知道有些不知道
照片人臉自動標示

Reinforcement Learning
跟訓練狗狗坐下很像
沒有考古題庫 D
事後給獎賞或懲罰

問題:遇到一個問題時應該選擇用是非、選擇還是填空模型?
回答:可以優先選擇填空

問題:什麼時候該用Supervised?什麼時候用 Semi-supervised
回答:先用 Supervised 因為比較簡單

問題:如果沒有音樂領域知識是不是會對解決音樂問題的影響
回答:有 但是剛好 netflix 不需要音樂內容

問題:網路廣告是不是 Reinforcement Learning
  回答:是,你點了一個賣鞋子的網站,機器得到獎勵,就會開始丟鞋子廣告。如果你點了廣告,機器得到獎勵,機器就會給你更多的鞋子廣告。如果你都沒點廣告,機器得到懲罰,就不會再給你鞋子廣告了 。

問題:機器學習 和 資料探勘 有沒有差異
回答:在這個場子應該回答沒有
資料探勘和機器學習的目標不同
但是 tool 相同

一些觀念
機器學習的目標:最小化 out-of-sample error
最早的分類法PLA:在空間上找到一條線切割出兩個空間(知錯能改演算法)
我們注重 generalization ,模型舉一反三的能力,而不是 memoraze 死背的能力,考試滿分不代表實用性高,Ein滿分不代表Eout表現就好,通常比較簡單的 H ( 比方說line ) 比較容易舉一反三。

機器學習的幾個基礎方法
linear regression:
H : y = wx
e : (wx - y)^2
利用微分後等於0,算出計算最佳 w
一步登天演算法

logistic regression:
給xy,y=0 or 1, 問給 x 會發生y的機率是多少?
H : y = θ(wx)
e : 一個很長很複雜的式子
直接解不好解,所以用 gradient descent 方法解 w

linear models summarized
H : y = wx
透過微調 H 做出 linear classification、linear regression、logistic regression
達人的秘訣:先用linear model!

問題:liear regression 的用處
回答:
只要是 regression 問題就可以用
一開始學的時候覺得很沒用,可是後來覺得很有用,liear regression 是作為初步觀察,和結合多個模型的工具。

問題:linear regression 和 logistic regression 是從統計來的,在機器學習上跟統計有什麼不一樣?
回答:
統計:用樣本反推母體
機器學習:用 g 反推 f

統計在意反推的信心水準
機器學習在意 g 的效能

統計在計算上比較沒有研究
機器學習在計算效能上研究較深

問題:機器學習是持續在學習,所以 g 會一直在動?
回答:對

Nonlinear Transform
當一個線性模型表現不好的時候,表示data的邊界可能不是一條線
可以透過特徵轉換把非線性問題轉成線性問題
Feature Transform
H : y = wϕ(x)
ϕ = 特徵轉換 Feature Transform
ϕ 其實是包含了領域知識 the force
但是要小心 over fitting

circular Separable (一個特徵轉換的例子)
H : y = wz
z = x^2, 1
對z作線性模型等於對x作圓形模型
若使用2次方程 z = x^2 , x , 1 ,表示 H 包含所有2次曲線

問題:是不是先畫個圖看看再怎麼決定ϕ
答案:可以,但是有風險,你可以先對資料做分析再做決定

問題:如果資料比較交錯,比方說區分奇數偶數
答案:覺得有規律就可以解

問題:不平衡的資料 (y 大部分都是0) 要怎麼辦?
答案:
從錯誤衡量方法上作修改
比方說廣告點擊率1%
你預測所有人都不會點廣告,可以得到99%的正確率
所以應該調整 error function 來修正這個結果

問題:自己找 feature 能不能做得比deep learning 好
答案:deep learning 比較好,但是這是不同的路,說不定未來可以混用。

decision tree:
是用很多條線切割平面的方法
實務上的實用性是人類可理解
可以處理很多型態的資料
是非線型模型,但比其他非線性模型快

Overfitting:
問題:
太強大的 H 使得機器連雜訊都學起來造成 Overfitting
一點點小小的 error 就可以把模型搞爛

觀念:
雜訊越多,Overfitting 就越容易發生
資料量越大 就可以用越複雜的模型,想畫一條10次方程式應該要有很多很多個資料點才能畫得精準

解決方法:
判斷目前是 underfitting 還是 overfitting 然後修改 H 的複雜度。

降低資料中的noise
data manipulation
手動修改資料或把noise資料移除
不用期待太高

增加資料量
data Hinting
能不能弄多一點資料?
用既有資料,對資料做一些修改再丟回去資料裡

Regularization
修改error funciton, 使得 w 的維數自動降低
舉例:
Eaug(w) = Ein(w) + λ/N * wTw
λ代表模型複雜度參數
N代表資料量,資料量越大就可以越不用在意模型複雜度

最佳化 Eval 而不是 Ein
Validation
保留一部分資料作為 out-of-sample data
Eout 會很接近 Eval

很多個 H 利用 Validation 選出一個最好的 H,然後再把全部的 data 丟給 H

V-flod Cross Validation
把資料分成 V 群,作 V 次 Validation

問題:資料降維算不算降低模型複雜度?
答案:算



學習的原則:
KISS:
盡量用簡單模型
Sampling Bias:
手上的資料有偏見,做出來的 g 就會有偏見
validation set 最好可以接近 test set

舉例:
Netflix 比賽,test 只用使用者的最後幾筆資料
但是 在 validation 的時候不小心用了 隨機資料

Visual Data Snooping
你對 H 的選擇,和機器對 w 的選擇,加起來才是模型複雜度
所以你如果刻意降維,也許也會 overfitting ,你對資料的理解有可能是錯的。
盡量用領域知識選feature,不要用資料觀察選feature
最好連人都不要去看validation set

問題:PCA 算不算Data Snooping,這樣做好不好
回答:好,但是要清楚 input 還是原本那個


現代版機器學習
Support Vector Machine
最佳線性分割線 error function: 胖胖的分割線

Soft-Margin Support Vector Machine
最佳線性分割線 error function : 胖胖的分割線+分類錯誤
模型內建 Regularization

Linear SVM
http://www.csie.ntu.edu.tw/~cjlin/liblinear

Kernels SVM
www.csie.ntu.edu.tw/~cjlin/libsvm

常用的 Kernel:
Gaussian Kernel
Gaussian SVM: 比較相似度的方法
非線性模型裡面表現得很好

linear classification model 裡面最好的方法
non-linear classification model 不錯的方法

有全自動的 tool 是台灣人開發的


Random Forest (RF)
手上的資料分T群(可重複抽)
做出T個 decision tree
T顆樹一起投票決定最終結果
模型內建特徵選擇,每切一刀就是在選一個特徵

也可以利用RF來找出重要特徵(non-linear case)

Random Test:
某個維度的重要性 = 效果(某維) - 效果(某維+雜訊)

投票的效果是產生平滑的邊界

Adaptive (or Gradient) Boosting
Gradient Boosted Decision Tree (GBDT)
decision tree 的 regression 版

Deep Learning
從類神經網路開始
類神經網路的實務上問題:幾個神經元?幾層?
超多層的類神經網路:太神啦
還是要問怎麼決定幾個神經元?幾層?

用領域知識來決定網路結構
舉例:用 convolutional NNet 作視覺

regularization:
容許部份神經元死掉

避免掉入local 最佳解:
選一個好的初始位置
pre-training

計算上:
用GPU

問題:PLSPM 好不好用? https://en.wikipedia.org/wiki/Partial_least_squares_path_modeling
回答:沒聽過