天天看點

ML工作流程(第4部分) - 完整性檢查和資料分割

本譯文自EROGOL 在http://www.erogol.com 上發表的 ML Work-Flow (Part 4) – Sanity Checks and Data Splitting ,文中版權、圖像代碼的資料均歸作者所有。為了本土化,本文略作修改。

我們現在比特征提取領先一步,并且提取給定的原始資料的統計上重要的(協變量)表示。在特征提取之後,我們需要做的第一件事就是檢查新的表示的值。通常,人們會認為這是浪費時間,不會去做這個事情。不過,我認為這是一個嚴重的錯誤。正如我之前所說的那樣,單個NULL值或傾斜表示可能會在最後讓人非常的頭疼,并且會使你處于非常模糊的狀态。

我們開始讨論。我在這裡列出我的合理的檢查步驟;

ML工作流程(第4部分) - 完整性檢查和資料分割

檢查NULL值并探究為什麼它們是NULL - NULL值是資訊,即使他們破壞了你ML管道。它們是前面階段引發的問題的名額。是以,在更深入地研究問題之前,這些NULL值能夠幫助你提前解決這些問題。

如果你在特征抽取後觀察到NULL值,則需要考慮一些常見問題;

ML工作流程(第4部分) - 完整性檢查和資料分割

美聯儲資料不符合特征提取算法的預期格式。順便說一下,特定的特征提取方法需要對原始資料進行一定的正常化、标準化、縮放程式或者可能需要通過離散化,分類等來更改值類型。我将在Feature Preprocessing階段讨論這些特定的過程,但是之前有一些案例,但是還是建議:如果你的資料格式沒有問題,那麼可以考慮使用不同的代碼來提取特征,并将結果與第一個結果進行比較。如果有錯誤,而且不一緻,那就用第三個代碼糾正錯誤。一定要确認算法是正确适用的。如果不是這樣,每次運作你都可能觀察到不同的值,這是合理的。在這種情況下,最好以某種方式可視化這些特征,并嘗試看到預期的語義。例如,對于計算機視覺環境下的特征學習方法,顯示學習過濾器并證明視覺正确性。對于其他領域,通過社群進行研究,并找到一個方法來做到這一點。

你的ETL工作流程是錯誤的。ETL是通過一些軟體或簡單的代碼流合并來自不同資源的資料的過程。這個過程應該适應資料資源的内部變化。例如,如果合并來自兩個不同資料庫的資料,則表中的結構更改可能會使你的ETL過程崩潰,并導緻新的NULL值。這對我來說也是一個非常頻繁的經曆。是以,ETL需要能夠正确的處理或者至少應該記錄這樣的問題。

ML工作流程(第4部分) - 完整性檢查和資料分割

零分

檢查值的比例。最大值和最小值、框圖、散點圖、平均值 - 中值差異對于指吃偏內插補點是非常有用的。繪制這些并觀察它們是否合理。如果有覺得哪些地方錯誤的,那就研究它。這可能需要一定程度的專業知識。 檢查每個次元的唯一值的數量。 這聽起來很愚蠢,但相信我,這是一個非常有用的檢查值的方法。即使你的資料是分類的、名義上的或連續的,總是非常有用。繪制一個條形圖,描繪每個資料次元的不同值的數量。資料分割好的,我們糾正了特征提取後資料表示的正确性。現在是時候将資料分割成測試,訓練和可選的外展和驗證集。

Train-Set:用這個訓練你的模型。

Validation-Set:使用特定的算法,如神經網絡,更好地使用單獨的Validation-Set以便檢視訓練周期中的泛化性能。由于這些算法很可能過度拟合,是以使用訓練資料作為訓練時間的唯一度量可能會誤導到極端的過度拟合。相反,使用每個疊代性能的Validation-Set,并停止訓練和驗證值在某個級别分散。Validation-Set的另一個用例是在交叉驗證不可擴充的情況下用于性能測量。如果你使用低預算系統的BigData,那麼簡單的交叉驗證需要幾天或幾周的時間。是以,對于簡單的實驗,如果隻是第一次進行簡單的設定或者更改,那麼請使用Validation-Set。當你得到這些價值并作出最初的決定後,你就使用Validation-Set和驗證資料混合的交叉驗證。我推薦這麼做。

Test-Set:在Train-Set和Validation-Set之後完成模型之後,應該使用它。根據訓練和驗證步驟設定模型的所有參數後,Validation-Set會測量性能。由于你重複循環訓練和驗證,是以你的模型不僅可能過度訓練資料,而且還會驗證資料。從這個角度來說,Validation-Set顯示了你的理性過度的水準。這就是為什麼大部分Kaggle比賽隻用最終的表現來模拟我們Validation-Set的概念。

Held-Out Set:這可能是其他集合的組合。但是,最好的辦法是使用純粹獨立的資料,除非資料不足。最後,在你說“我完成了!這是我的傑作“。是以,你在這個集合上測量你的模型的最終得分,這是現實世界場景中最好的性能近似。既然你之前沒有觸及過,而且你沒有通過這個集合重申你的模型,那麼你的模型就沒有看到Held-Out集合的偏見。是以,這是你的報告的最終績效衡量标準。

我相信很多人對我提出的資料分割方案不太情願,他們會把這個粒度級别看作簡單的訓練,測試分割+交叉驗證方案。但是,我向他們保證,特别是在這個行業裡,這個陣型是對抗理性過度合理化的最佳選擇。通過這些論點的特性,我也相信目前資料分裂的概念是學術界的一個重要關鍵。我們接觸到所謂的最先進的方法,以非常精确的資料和合理的過度拟合的方法來說明非常高的準确度。但就這個事實而言,當我們将這些方法應用于實時問題時,值就會變得太多而變得不真實。是,模型可能會過度适合給定的列車資料,但是隻使用有限的資料集,并且有一定的訓練和驗證周期,也會使你錯誤地了解給定的問題。理性過度拟合的一個例子是神經網絡結構圖像網競賽。如果你看看論文或者每年的方法,你會發現人們仍然使用亞曆克斯網絡(Image-Net的第一個重要的深度學習成就)相同的拓撲結構,并且宣布0.5%的提高,而且方法上的改進很少或者很少。順便說一句,我們有一個深度學習社群過度适合Image-Net的巨大文獻。我的解決方案是使用單獨的資料集,通過去年資料集的訓練模型對每年的比賽進行排名。在我看來,對于這種過度拟合,這将是一個更強大的調整,具有更多的注釋複雜性。