天天看點

秘籍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。
秘籍0x01建立開發集和測試集

image

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

- 選擇作為開發集和測試集的資料,應當與你預期在将來擷取并良好處理的資料有着相同的分布,但不需要和訓練集資料的分布一緻。
- 開發集和測試集的分布應當盡可能一緻。
- 為你的團隊選擇一個單值評估名額進行優化。需要考慮多項目标時,不妨将它們整合到一個表達式裡(比如對多個誤差名額取平均),或者定義滿意度名額和優化名額。
- 機器學習是一個高速疊代的過程:在最終令人滿意的方案出現前,你可能要嘗試很多想法。
- 擁有開發集、測試集和單值評估名額可以幫你快速評估一個算法,進而加速疊代過程。
- 當你探索一個全新的應用時,盡可能在一周内建立你的開發集、測試集和名額,而在成熟的應用上則可以花費更長的時間。
- 傳統的 70% / 30% 訓練集/測試集劃分對大規模資料并不适用,實際上開發集和測試集的比例會遠低于 30%。
- 開發集的規模應當大到能夠檢測出算法精度的細微改變,但也不用太大;測試集的規模應該大到能夠使你對系統的最終性能作出一個充分的估計。
- 當開發集和評估名額不再能給團隊一個正确的導向時,就盡快修改它們:(i) 如果你在開發集上過拟合,則擷取更多的開發集資料。(ii) 如果開發集和測試集的資料分布和實際關注的資料分布不同,則擷取新的開發集和測試集。 (iii) 如果評估名額不能夠對最重要的任務目标進行度量,則需要修改評估名額            

複制