第四天,繼續努力!
The history of ML:Decision tree
Decision tree 是一種很直覺的機器學習演算法,可以被用在linear regression or classification,但是他有點笨,應該說是需要你盡全力定義你的問題,過程是這樣的:想像你有一堆資料,然後你需要提出問題把資料分成2堆,之後再提出一個問題把其中一堆再分成2堆,以此類推一直分成2堆......
例如:想預測鐵達尼號上會從活下來的人的機率:
第一個問題:Is sex male?
分成64%:male,36%Female
從第一個問題中的64%問第二個問題: 這些乘客的class(座艙等級)
分成14%是最低等級,50%是高的兩種等級
但等等!覺得哪裡有問題?
第一個問題將資料切成兩類很簡單,但第二個問題要怎麼去切分出data呢?(one class to left, two class for right),答案是演算法會試著去找出特徵和閥值對(threshold pair).在classification時使用: Column metric to use is the gini impurity, but there is also entropy.過程中遞迴演算直到設定的最大深度,或是data最pure的狀態.而在regression使用MSE,所以其實每一次分類就是一個logistic regression.
因此我們可以想辦法增加decision tree深度,廣度,直到每一個分支都只有純粹的0或1,以例子來說就是存活或者死亡,然而這樣會有問題,也就是說這樣盡全力去想問題分類的過程中其實只是overfit你的全部data而已,在碰上沒遇到過的data,model generalize的能力就很差.
因此有一些方法去解決:例如節點的最小樣本數,節點的最大數等等,或是從tree -> forest.
The history of ML: Kernal method:
Kernal method 這個研究領域,研究非線性模型,如非線性SVM(最大邊際分類).
SVM的核心就是非線性函數+Sigmoid output去尋找max margin.
甚麼意思呢?想像你在2D平面上分開相隔很遠的藍點和紅點,你可以很輕易地用一條線.但若是混和在一起雜亂的藍紅點呢?是否不好一條線分開,可能要用圈,曲線,或是你可以將他投影到高維度空間!用一個面或曲面把它們分開.這就是SVM的精神.盡可能找到最大的邊界把資料分得越開,這樣可以容許誤差,也就能分得更精準.
因此kernal是需要決定的,他負責將data投射到feature dimension上,有點像是NN中激勵函數做的事情一樣,把線性變成非線性.但是在NN中把資料投射到高維度的決定因素是每層中有幾個神經元.
The history of ML:Random forest
在2000年之後因為硬體進步,電腦的計算能力開始變強,ensemble出現了!
ensemble可以想像成是:如果一個學習能力弱的model學不好,那我們就結合一大群來組成一個學習能力強的model,這歸功於硬體的進步.
例如DNN透過dropout來隨機關閉一些neuron,在每次訓練時都等於是不一樣的model,集合所有model的能力就是ensenble的概念.或者你可以想像從數千人的反應中解決一個複雜問題時,參考多人的意見可以更好地回答複雜問題,而不是僅僅由單個人進行解答。這種概念應用在機器學習上,其中最出名的ensenble learning的方式就是random forest.
明日分享~