1

我是機器學習的新手。爲什麼我的模型與來自train_test_split的測試數據無關,而與新數據無關?

我有一個連續的數據集。我正在嘗試使用幾個功能對目標標籤進行建模。我利用train_test_split函數來分離列車和測試數據。我正在訓練,並使用下面的代碼測試模型:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) 

model = Sequential() 
model.add(Dense(128, input_dim=X.shape[1], kernel_initializer = 'normal', activation='relu')) 
model.add(Dense(1, kernel_initializer = 'normal')) 
hist = model.fit(X_train.values, y_train.values, validation_data=(X_test.values,y_test.values), epochs=200, batch_size=64, verbose=1) 

我能取得好成績,當我用X_test和y_test用於驗證數據:

https://drive.google.com/open?id=0B-9aw4q1sDcgNWt5TDhBNVZjWmc

然而,當我使用這個模型預測另一個數據(X_real,y_real)(其不是從X_test如此不同,不同之處在於它們不是通過隨機選擇train_test_split y_test)我得到不好的結果:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) 

model = Sequential() 
model.add(Dense(128, input_dim=X.shape[1], kernel_initializer = 'normal', activation='relu')) 
model.add(Dense(1, kernel_initializer = 'normal')) 
hist = model.fit(X_train.values, y_train.values, validation_data=(X_real.values,y_real.values), epochs=200, batch_size=64, verbose=1) 

https://drive.google.com/open?id=0B-9aw4q1sDcgYWFZRU9EYzVKRFk

是否過度擬合的問題嗎?如果是這樣,爲什麼我的模型與train_test_split生成的X_test和y_test正常工作?

回答

0

看來你的「真實數據」,從您的火車和測試數據不同。 爲什麼首先有「真實」和「訓練」數據?

我的做法是:

1:將所有數據必須

2:Devide你的數據在3套隨機(火車,測試和驗證)

3:使用火車和測試像你現在這樣做,並優化分類

4:當它是足夠好的驗證您的驗證設置,以確保沒有發生過擬合的分類。

+0

對不起,我不擅長的術語。您可以將我的定義「real_data」計爲「驗證數據」。爲什麼我們需要驗證數據? 「測試數據」不夠嗎? 「驗證數據」雖然可以與「測試數據」保持一致,但模型如何失敗?我知道「測試數據」的結果具有很高的方差。但就我而言,每次運行代碼時測試數據都可以,但驗證數據失敗。順便說一句。我的數據集是時間序列。 – Yahya

+0

你的猜測是一個過度的問題。換句話說,你可以訓練你的分類器,直到它符合你的測試數據。爲了確保您的良好結果不僅適用於您的測試數據,您還可以保留一些看不見的數據,以便100%確定您的分類器在測試結果(即您的驗證數據)之後與您想象的一樣好。但是爲什麼你的驗證是不好的,而你的測試是好的顯而易見的原因是這兩個數據集彼此不同。所以問題是你有什麼樣的數據,甚至更重要:什麼是「真實數據」以及爲什麼你稱之爲真實數據? –

+0

你說得對。看來驗證數據與培訓和測試數據不同。 – Yahya

0

如果你有更少的數據,那麼我會建議你去嘗試不同的算法。神經網絡通常需要大量數據才能獲得正確的權重。 此外,您的真實數據似乎不屬於火車和測試數據的相同分佈。不要讓任何東西隱藏,隨機播放所有內容並使用火車/驗證/測試分組。

相關問題