祕籍0x01建立開發集和測試集

機器學習訓練祕籍筆記

1-12章

  1. 監督學習(supervised learning)是指使用已標記(labeled)的訓練樣本 來學習一個從 映射到 的函數。監督學習算法主要包括線性迴歸(linear regression)、對數機率迴歸(logistic regression,又譯作邏輯迴歸)和神經網絡(neural network)。雖然機器學習的形式有許多種,但當前具備實用價值的大部分機器學習算法都來自於監督學習。
  2. 訓練集(training set)用於運行你的學習算法。 開發集(development set)用於調整參數,選擇特徵,以及對學習算法作出其它決定。有時也稱爲留出交叉驗證集(hold-out cross validation set)測試集(test set)用於評估算法的性能,但不會據此決定使用什麼學習算法或參數。
  3. 開發集和測試集的使命就是引導你的團隊對機器學習系統做出最重要的改變。 合理地設置開發集和測試集,使之近似模擬可能的實際數據情況,並處理得到一個好的結果。
  4. 開發集和測試集應該服從同一分佈。
  5. 開發集的規模應該大到足以區分出你所嘗試的不同算法間的性能差異。 通常來說,開發集的規模應該在 1,000 到 10,000 個樣本數據之間,而當開發集樣本容量爲 10,000 時,你將很有可能檢測到 0.1% 的性能提升。
  6. 那麼測試集的大小又該如何確定呢?它的規模應該大到使你能夠對整體系統的性能進行一個高度可信的評估。
  7. 所謂的單值評估指標(single-number evaluation metric)有很多,分類準確率就是其中的一種:你在開發集(或測試集)上運行分類器後,它將返回單個的數據值,代表着被正確分類的樣本比例。根據這個指標,如果分類器 A 的準確率爲 97%,而分類器 B 的準確率爲 90%,那麼我們可以認爲分類器 A 更優秀。
  8. 查準率(Precision,又譯作精度)和查全率(Recall,又譯作召回率)均不是單值評估指標,因爲它給出了兩個值來對你的分類器進行評估。多值評估指標將使算法之間的優劣比較變得更加困,算法團隊需要在之間做取捨權衡。 取平均值或者加權平均值是將多個指標合併爲一個指標的最常用方法之一。
  9. 優化指標和滿意度指標, 利用一定的算法對多個指標進行合併。
  10. 通過開發集和度量指標加速迭代。1.嘗試一些關於系統構建的想法(idea)。 2.使用代碼(code)實現想法。 3.根據實驗(experiment)結果判斷想法是否行得通。(第一個想到的點子一般都行不通!)在此基礎上學習總結,從而產生新的想法,並保持這一迭代過程。
  11. 何時修改開發集、測試集和度量指標: 開展一個新項目時,我會盡快選好開發集和測試集,因爲這可以幫團隊制定一個明確的目標。 我通常會要求我的團隊在不到一週(一般不會更長)的時間內給出一個初始的開發集、測試集和度量指標,提出一個不太完美的方案並迅速採取行動 ,比花過多時間去思考要好很多。但是一週的時間要求並不適用於成熟的應用程序,譬如垃圾郵件過濾。我也見到過一些團隊在已經成熟的系統上花費數月的時間來獲得更好的開發集和測試集。 如果你漸漸發現初始的開發集、測試集和度量指標設置與期望目標有一定差距,快速想方法去改進它們。例如你的開發集與度量指標在排序時將分類器 A 排在 B 的前面,然而你的團隊認爲分類器 B 在實際產品上的表現更加優異,這個時候就需要考慮修改開發集和測試集,或者是你的評估指標了。 a. 你需要處理的實際數據的分佈和開發集/測試集數據的分佈情況不同。 b.你在開發集上過擬合了。 c. 該指標所度量的不是項目應當優化的目標。
  12. 什麼是過擬合? 舉個栗子: 不知道大家在學車的時候教練教倒庫和側方停車的時候有沒有教一串口訣:類似於在車窗的XX框切XX杆的時候打滿,切XX的時候回正等等,這個口訣可以順利讓你通過科目二,然而換個車或者換個場地,你就發現並沒有卵用... 我們說這只是overfit了某個車和某個場地(訓練數據),在新的測試集(新車新場地)上的泛化性能爲0。

image

1. 小結:建立開發集和測試集

- 選擇作爲開發集和測試集的數據,應當與你預期在將來獲取並良好處理的數據有着相同的分佈,但不需要和訓練集數據的分佈一致。
- 開發集和測試集的分佈應當儘可能一致。
- 爲你的團隊選擇一個單值評估指標進行優化。需要考慮多項目標時,不妨將它們整合到一個表達式裏(比如對多個誤差指標取平均),或者定義滿意度指標和優化指標。
- 機器學習是一個高速迭代的過程:在最終令人滿意的方案出現前,你可能要嘗試很多想法。
- 擁有開發集、測試集和單值評估指標可以幫你快速評估一個算法,從而加速迭代過程。
- 當你探索一個全新的應用時,儘可能在一週內建立你的開發集、測試集和指標,而在成熟的應用上則可以花費更長的時間。
- 傳統的 70% / 30% 訓練集/測試集劃分對大規模數據並不適用,實際上開發集和測試集的比例會遠低於 30%。
- 開發集的規模應當大到能夠檢測出算法精度的細微改變,但也不用太大;測試集的規模應該大到能夠使你對系統的最終性能作出一個充分的估計。
- 當開發集和評估指標不再能給團隊一個正確的導向時,就儘快修改它們:(i) 如果你在開發集上過擬合,則獲取更多的開發集數據。(ii) 如果開發集和測試集的數據分佈和實際關注的數據分佈不同,則獲取新的開發集和測試集。 (iii) 如果評估指標不能夠對最重要的任務目標進行度量,則需要修改評估指標 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章