一位老師,一位領導,一個讓全體學生考上目標學校的故事
今天,小夕給大家講一個故事...
從前,有座山...
山裡,有座學校...
學校里,有一位老師,一位領導,還有五隻可愛的小仙(學)女(生)。
這5個學生的名字是:小兔,小青,小路,小音,小夕。她們的高考目標依次為清華、清華、清華、清華、浙大。但是不管她們的目標如何,在家長的逼迫下:
1. 假設過了浙大的線,但是沒過清華的線,那就上浙大。(所以想考清華的學生會很難過)
2. 假設如果過了清華的線,那麼就必須要上清華,哪怕目標是浙大,也不能報。(所以想考浙大的學生會很難過)然後老師的培養目標呢,並不是讓所有的學生都上清華,而是讓每個學生都達成她們心中的目標!想上浙大的學生,就不能考的太高,以免上了清華。想上清華的學生,就要考的足夠高,以免上了浙大。
1. 這個老師很奇怪,他每天會制定一個精力分配計劃表,比如老師每天都有100份精力,他要給各個學生分配精力。開學第一天,由於他對這些學生都不熟悉,於是他給這5個學生平均分配精力,即每人都能得到20份精力。
2. 這個老師白天怎麼上課呢?他會重點關注和培養今天的精力分配計劃中那些精力分配很多的學生。他這一天,會講很多次課,每節課結束的時候呢,都會安排一個隨堂考試。並且根據這場考試後各個學生的成績單,來評價一下這場考試的成功率。
2. 但是注意啊,怎麼衡量這個考試成不成功呢?重點來啦,這個老師很奇葩!他主要是看今天重點關注的學生能不能考上目標學校!比如今天老師的100份精力中,92份給了小夕,剩下的8份平分給了小兔等4人。那麼!今天!只要小夕能達成目標(即恰好考上浙大),那麼其他4人都沒有達成目標也沒事( ̄? ̄),這時的考試成功率是92%。但是如果這場考試中小夕沒有達成目標(即不小心考上了清華),其他4人都達成了目標(即考上了清華),就認為這場考試的成功率只有8%!(我彷彿聽到有人說這個老師是不是智障...)
2. 然後呢,按照上面講的這麼不公平的考試結果評價準則,選出今天考的最成功的一場!然後將這一場考試作為今天最終的考試結果,並且徹底忽略掉今天的其他考試。並將這場考試的考試卷和成功率連夜彙報給上級。
3. 上級是一個夜貓子,而且秉公執法卻不做複查的人。於是,他會在明天到來之前,根據今天老師遞交的考試結果中的成功率,來給這場考試的考試卷打個分數。日後拿出這張考試卷時,看到打的這個分,就知道這場考試卷的含金量是多少啦。
4. 老師也不敢睡覺,連夜等待上級給這場考試打的分數。等來上級打的這個分數後,老師趕緊拿著這個分數和今天的精力分配計劃表來制定明天的精力分配計劃表。
4. 怎麼制定呢?上級打的分數決定了精力分配計劃表的變動大小,如果上級給打了0分,就意味著計劃表不要變動了。上級給打的分數越高,明天的計劃表就要改動越大。那麼怎麼改呢?這時,老師終於開始考慮全體學生了,老師會將今天這場考試中達成目標的學生的精力分配減少(比如今天在小夕身上分配92份精力,小夕達成了目標,那麼根據上級的打分,明天分配的精力要降低20%,所以明天給小夕的精力暫時記為92*(1-0.2)=73.6。),將今天這場考試中未達成目標的學生的精力分配增加(比如今天在小兔身上分配2份精力,那麼根據上級的打分,明天分配的精力要增加20%,所以明天給小兔的精力暫時記為2*(1+0.2)=2.4。)。
4. 然後都算完後,發現明天給各個學生的精力之和不等於100了,那就歸一化一下,保證精力之和是100。
5. 於是,明天又是嶄新的一天。。。除了精力分配計劃表改變了以外,其他並沒有影響,完全重複前面的過程。
5. 就這樣過了很多很多天。。。
6. 什麼時候結束呢?
6. 那就是根據上級對每天的每場考試的打分,來累加每個學生在前面每天的考試結果啦(即加權的考試結果,對於上級打分低的考試,考試結果就不太重要;對於上級打分高的考試,考試結果就很重要)
6. 如果有一天,累加每個學生的考試結果後發現,誒?所有學生的累計考試結果全都達成了目標!!!即累加起來後,發現學生全都考上了目標學校!!!好了,你們畢業惹~
7. 這時,又跑過來一個沒有考試目標的學生,叫小好,她問老師,「老師老師,你說我將來會上清華還是浙大呢?」
7. 老師:「很簡單,你去把這一摞卷子全都做一遍,這是我們的往日考試卷。然後你全做完後,我給你按照上級以前對每張卷子含金量的打分,給你累加一下,得到最終的考試結果。這個最終的考試結果就代表了你將來會上的學校。」
是的,上面的過程,就是機器學習的AdaBoost演算法/分類器。包括了Adaboost的訓練過程和分類過程。
Adaboost是集成機器學習中的典型演算法,是Boosting思想的一個具體實現。通過訓練並組合很多弱分類器,來加權決定分類結果。
怎麼把上面的故事轉成Adaboost演算法呢?完成下面的概念替換:
下面映射的是演算法中的實體(變數)
- 每個有目標的學生 -> 一個訓練樣本x_train
- 沒有考試目標的學生 -> 待分類樣本x_test
- 清華、浙大 -> 本任務的兩個類別c0,c1
- 每天的精力分配計劃表 -> 每輪迭代的樣本權重向量D
- 每天選出的成功率最高的考試卷 -> 每輪迭代產生的弱分類器
- 老師計算的每場考試的成功率 -> 訓練樣本集的加權錯誤率
- 上級領導給每個考試卷打的分數 -> 每個弱分類器的決策權重α
- 經過的天數 -> 弱分類器的數量
下面映射的是演算法中的過程(與故事中每一段前面的序號完全對應)
- 1. 開學第一天,平均分配精力給每個學生 -> 樣本權重向量D的初始化
- 2. 每一天的教學、隨堂考試、選出成功率最高的考試過程 -> 本輪迭代中訓練弱分類器的過程
- 3. 上級領導給考試卷打分的過程 -> 計算當前這個弱分類器的決策權重α
- 4.老師製作明天的精力分配計劃表 -> 計算下一輪迭代時的樣本權重向量D
- 5. 一天天的過去 -> 不斷重複上述步驟2-4.
- 6. 所有學生累計考試結果全都達成目標 -> Adaboost模型收斂,完成訓練。
- 7. 給沒目標的小好預測學校 -> 利用訓練好的Adaboost分類器預測待分類樣本的類別。
聽說,寫Adaboost的代碼的時候,在注釋中把小夕講的這個故事寫出來就不會出錯了...
最後,請手機/電腦/IPAD/投影儀屏幕前正在帶學生的老師,請勿模仿本文
( ̄? ̄)
更多奇怪的故事,歡迎來微信訂閱號【夕小瑤的賣萌屋】玩耍~(還是彩色精裝版的哦)
推薦閱讀:
※具有自學習(Self-paced learning)的集成學習(Boosting)分類器--(IJCAI 2016)--論文筆記
※處理不均衡數據 (機器學習)
※關於設計與人工智慧的十個觀點
※近200篇機器學習&深度學習資料分享(含各種文檔,視頻,源碼等)
※以AlphaGo為例,如何理解神經網路的存儲容量(storage capacity)?