“半監督學習”——這是過擬合嗎?
我正在閱讀 Kaggle 競賽(惡意軟件分類)獲勝解決方案的報告。該報告可在此論壇帖子中找到。問題是一個分類問題(九個類別,度量是對數損失),訓練集中有 10000 個元素,測試集中有 10000 個元素。
在比賽期間,模型針對 30% 的測試集進行了評估。另一個重要因素是模型的表現非常好(接近 100% 的準確率)
作者使用了以下技術:
我們提出的另一個重要技術是半監督學習。我們首先通過選擇最佳模型的最大概率來生成測試集的偽標籤。然後我們用訓練數據和測試數據以交叉驗證的方式再次預測測試集。例如,將測試數據集拆分為 4 個部分 A、B、C 和 D。我們使用整個訓練數據,以及帶有偽標籤的測試數據 A、B、C,一起作為新的訓練集,我們預測測試設置 D。
使用相同的方法來預測 A、B 和 C。這種方法由 Xiaozhou 發明,效果非常好,它減少了局部交叉驗證損失、公共 LB 損失和私有 LB 損失。最好的半監督學習模型可以達到 0.0023 的私有 LB 對數損失,這是我們所有解決方案中的最佳分數。
我真的不明白它如何改善結果。是不是因為 30% 的測試集被“洩露”了,這是使用這些信息的一種方式?
還是有任何理論上的理由來解釋它為什麼起作用?
它似乎沒有過度擬合。直觀地說,過度擬合意味著對訓練集的怪癖(噪聲)進行訓練,因此在不具有這些怪癖的保留測試集上表現更差。如果我理解發生了什麼,他們在保留的測試數據上並沒有出人意料地表現不佳,因此從經驗上排除了過度擬合。(他們還有另一個問題,我會在最後提到,但它並沒有過度擬合。)
所以你是正確的,它利用了可用的(30%?)測試數據。問題是:如何?
如果可用的測試數據具有與之關聯的標籤,您可以簡單地將其合併到您的訓練數據中並擴大您的訓練數據,這通常會以明顯的方式產生更好的結果。那裡沒有真正的成就。
請注意,如果您可以訪問準確度分數,則不必明確列出標籤。您可以通過重複提交分數來簡單地爬升準確度梯度,這是人們過去在設計不佳的比賽中所做的。
鑑於可用的測試數據沒有直接或間接關聯的標籤,至少還有其他兩種可能性:
首先,這可能是一種間接提升方法,您可以專注於僅使用訓練數據的預測與包含偽標記測試數據的預測不一致的情況。
其次,它可以是直接的半監督學習。直觀地說:您可以使用未標記數據的密度來幫助塑造監督方法的分類邊界。請參閱維基百科半監督學習定義中的插圖(https://en.wikipedia.org/wiki/Semi-supervised_learning#/media/File:Example_of_unlabeled_data_in_semisupervised_learning.png )以進行澄清。
**但這並不意味著這裡沒有技巧。**這個技巧來自訓練和測試數據的定義。原則上,訓練數據代表您準備好部署模型時手頭的數據。測試數據代表了系統運行後將進入您的系統的未來數據。
在這種情況下,對測試數據的訓練是未來的一個漏洞,你正在利用你還沒有看到的數據。這是現實世界中的一個主要問題,其中一些變量可能直到事實發生後(比如調查完成後)才存在,或者可能在以後更新。
所以他們在這裡進行元遊戲:他們所做的在比賽規則範圍內是合法的,因為他們獲得了一些測試數據的訪問權限。但這在現實世界中是不合法的,真正的測試是它在未來對新數據的表現如何。