2016-09-20 58 views
0

我知道你應該將你的訓練數據與你的測試數據分開,但是當你用你的模型做出預測時,可以使用整個數據集?使用完整的數據集進行預測是否是一個好習慣?

我假設分離你的訓練和測試數據對於評估不同模型的準確性和預測強度是有價值的,但是一旦你選擇了一個模型,我想不出使用完整數據集進行預測的任何缺點。

+0

你能解釋一下如何使用這些數據來做出「預測」嗎? –

+0

當然,例如: 假設您訓練一個包含歷史股票市場數據的模型,然後想用它來預測未來的股票價格。正如你選擇的那樣,開發,調整使用你的特定模型應該留出一些數據用於訓練和測試。 但是,當你準備好使用你的模型來預測未來的股票價格時,你可以使用你的整個數據集還是隻使用你的訓練數據集? – choxi

+1

創建模型的重點在於您不再需要培訓或測試數據。您只需將模型應用於新數據,並且如果模型是好的,它會給您很好的預測。之後您可以在將來有數據時再驗證這些預測。 – paddy

回答

3

您可以使用預測全數據,但更好地保留列車和測試數據的索引。下面是它的優點和缺點:

臨:

  1. 如果保留屬於訓練和行測試數據的索引,那麼你只需要預測一次(等節省時間)來獲得所有結果。您可以使用火車和測試集索引對實際值和預測值進行子集化後,分別計算列車和測試數據的性能指標(R2/MAE/AUC/F1 /精度/召回率等)。

缺點:

  1. 如果計算整個數據集的性能指示器(未明確區分訓練和使用索引測試),那麼你將有overly optimistic估計。發生這種情況是因爲(對列車數據進行訓練)模型給出了列車數據的良好結果。這取決於列車和測試的百分比,會給出虛幻的良好性能指標值。
  2. 處理大量的測試數據,在一次可能會造成內存隆起是可能導致全對象 - 在內存中的語言,如R.
1

一般的碰撞,你是對的 - 當你完成選擇你的模型和調整參數,你應該使用所有的數據來建立模型(下面的例外)。

其原因將數據分成訓練集和測試是,如果沒有外的袋樣品,高方差的算法會比低方差的要好,幾乎從定義。因此,有必要對這樣的問題拆分數據爲訓練和測試部分:

  1. 決定內核SVR是否比線性迴歸更好或更差,爲您的數據

  2. 調整內核的參數-svR

然而,一旦這些問題得到確定,那麼,在一般情況下,只要你的數據是由相同的過程中產生的,較好的預測將是,你應該使用它的全部。

一個例外是,其中的數據是,比方說,非靜止的情況。假設你正在爲股市進行培訓,並且你有10年前的數據。目前還不清楚這一過程在此期間沒有改變。在這種情況下,你可能會損害你的預測,包括更多的數據。

0

是的,有這樣做的技術,例如k-fold cross-validation

使用交叉驗證而不是使用常規驗證的主要原因之一(例如,將數據集劃分爲兩組70%用於訓練和30%用於測試)是因爲沒有足夠的數據可用於將其劃分爲單獨的訓練和測試集而不喪失重要的建模或測試能力。在這些情況下,正確估計模型預測性能的公平方法是使用交叉驗證作爲強大的通用技術。

這就是說,有可能不是一個很好的原因這樣做,如果你有足夠的數據,因爲這意味着你使用模型實際上並沒有真實數據來測試。你推斷它可能會表現良好,因爲在較少數據上使用相同方法訓練的模型也表現良好。這並不總是一個安全的假設。機器學習算法可能會以您不會期望的方式敏感。除非你非常渴望獲得數據,否則真的沒有理由。

相關問題