Posts

Featured post

Boosting vs Bagging? 別再胡亂用了!

Image
許多初接觸數據科學的朋友心裡都有一個疑問:什麼時候應該使用 XGBoost 或隨機森林這樣的模型?有些朋友也可能被面試官考問如何區分Boosting跟Bagging這種問題。無論您是否有這痛苦的 經歷 ,懂得區分兩者的分別也是十分 重要的,尤其在 我們選擇那一個預測模型 。 在了解 Boosting跟Bagging 之前,首先需要瞭解Bias和Varaince的概念。 如果讀者們沒有聽說過,筆者 建議您在我的舊文先了 解一下 。 首先,Boosting跟Bagging都屬於Ensemble Method,原理將數個基礎模型(Base Model) 放在一起,給出更準確的結果,展示出 團結就是力量 。以Random Forest Classifier ( 隨機森林分類器) 為例,它的基本模型應該是(Decision Tree Classifier)決策樹分類器,我們也稱之為 " 弱分類器 (Weak Classifier) " 。在大多的情況下,Boosting或者Bagging模型表現都勝於單個模型,不過我們還是需要知道哪時候使用 ,才不會白費功夫 。 Bagging 我們先談 談 袋裝, 因為它比Boosting原理更直觀和容易理解。Bagging全名為 Bootstrapping Aggregatingm,當中的 Bootstrap 是根據 N 個 Data Point,用隨機抽樣的方式,從N個抽出K個 Data Point,並 建立一組又一組的樣本,然後 Weak Learner 可以從建立好的樣本中進行學習。 隨機森林就 是一個典型 Bagging的例子 。而決策樹扮演著Weak Learner的角色。如果您對決策樹沒有任何瞭解,下面是建議的閱讀( TODO : URL )。 訓練數據會被 隨機抽樣,抽出部分的紀錄和部分的特徵,建立一組組的樣本,而 每棵樹便會學習對的樣本,這些獨立學習好的樹,都會產出一個預測結果,取 平均值,便是一個綜合的 預測結果 。現在,你可能知道為什麼它會被稱之為 " 隨機 " 和 " 森林 " 。實際上,其原理是使每一個基礎模型學習方法都是相互獨立,以儘可能減少 Variance,但同時也犧牲Bias。簡單地說,Bagging主要用作來解決Overfitting...

(廢文) 從一張無聊的MEME看Simulation的強大之處

Image
不知為何最近我的社交群組都在流傳一個堪稱 ” 一分鐘淘汱掉 100 人 ” 的面試題: 筆者驟眼看了一眼題目,便笑而不語,這豈不是普通的機率問題,可是當我開始思考了 10 秒後,我不禁後悔了,這根本沒有想像中簡單!還好,老子還有一部強大的電腦幫我做運算開掛,不然我一分鐘我自己也算不出來。 於是,我利用一分鐘的時間用 Python 寫幾行簡短的程式碼做 Simulation ,等待數秒,結果就出來了,就是 10 個人。整個過程根本無需人腦的運算,只需要把問題設計好給電腦作運算就好了。 方法大概就是制作N個平行空間,為什麼是N?那是因為這個數量是我們自己控制的,然後,要在這N個平行空間,從中找出我們想要知道的答案,這就是 Simulation的威力! 每個平行空間都是隨機地安排,然後從這 N 個平行空間找到我們想要知道的答案。到底要怎樣才可以用神的視覺來作隨機的安排,首先,只考慮一個平行空間,會有 30 個學生,每位學生也有3組的語文,英文和數學的成績,那麼我就把他們的成績放在三組 Array 上,你可能會問:裡面應該裝些什麼呢?為方便計算,我會把滿分的成績用 1 來表示, 0 為沒有拿到滿分。然後,我們先專注語文的 Array ,首先,語文科滿分的只有 20 人,因此,在整條 Array 中 1 的數量應只有 20 ,而 0 則有 10 。以下就是一條任意排列: 可是要如何在程式中實現這種隨機的排列呢?其實很簡單,就是先建造一組連續數的陣列,而排列均是隨機的。在 Python 的世界,我會用 numpy 中的 random 模組去實現: 然後都把小於 19 的數學都換成 1 ,其餘都是 0 ,那就可以確保陣列裡有 20 個滿分的人。如此類推,數學和英文的 Array 也是用這個方法去作隨機的排列。好了,最後就是記錄每個平行空間有多少人能夠拿到三科滿分,也就是在三個 Array 中在同一個位置都出現三個 1 。終於回歸到面試問題的本身:至少有多少學霸拿到連中三元?筆者選擇用了 100 個平行空間,以下就是在每個平行世界的學霸數量: 在這以上一千個結果中,最少的可能值正正是 10 個人。 Mission Complete!  ...