2017-10-14 119 views
2

有趣的是,我在計算器和其他網站上看到了很多不同的答案:我可以使用Train和測試數據進行插補嗎?

在處理我的訓練數據集時,我使用決策樹模型來推算某列的缺失值。所以這是我的問題。使用所有可用數據(訓練&測試)來製作插補模型(而不是預測)還是公平的?或者在做這些工作時只能觸摸訓練集?另外,一旦我開始在我的測試集上工作,我是否必須只使用測試集數據,使用我的訓練集中製作的相同插補模型進行插值,還是可以使用所有可用數據重新訓練我的插補模型?

只要我沒有觸及我的測試集進行預測模型訓練,我會認爲使用其他數據來處理像插值問題一樣好。但也許這將打破基本規則。思考?

回答

0

我會this answer on cross-validated同意:

訓練和測試集的劃分是複製 ,你有過去的信息,並建立模型 將測試其未來的AS-局勢的企圖但未知的信息

預處理數據的方式可能會影響模型性能,在某些情況下會顯着影響模型性能。測試數據是您不知道的樣本的代理。如果你知道所有未來的數據,你會以不同的方式進行插補嗎如果是,那麼使用測試數據就是作弊。如果否,那麼無論如何都不需要測試數據。因此,最好不要觸摸測試數據,直到建立模型。

0

在訓練集上進行任何處理時,請勿使用測試集中的任何信息。 @Maxim和與之相關的答案是正確的,但我想擴大答案。

插補嘗試從不完整的數據中推斷缺失條目的可能值。我認爲將缺失值視爲測量錯誤的一種形式很有幫助(有關這方面的有用演示,請參見this article)。因此,有理由相信缺失與基礎數據生成過程有關。而這個過程正是你試圖用你的模型複製(當然,不完美)。

如果你想讓你的模型得到很好的概括 - 不要大家都好! - 那麼最好確保你對訓練集所做的任何處理都只取決於該組中包含的數據中的信息。

我甚至會建議你考慮三路分割:測試,訓練和驗證集。驗證集進一步從訓練集中挑選出來,用於測試適合「本身」的模型(在超參數的調整中)。這部分是交叉驗證程序在諸如sklearn和其他管線之類的事情中所做的。在這種情況下,我通常在之後執行插補而不是完整的訓練集,因爲我試圖評估模型「知道」的數據模型(並且保留數據是未知數的代理/未來數據)。但請注意,我並沒有看到這一點,因爲在測試和訓練集之間保持一個完整的牆。

相關問題