我是機器學習的新手。爲什麼我的模型與來自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正常工作?
對不起,我不擅長的術語。您可以將我的定義「real_data」計爲「驗證數據」。爲什麼我們需要驗證數據? 「測試數據」不夠嗎? 「驗證數據」雖然可以與「測試數據」保持一致,但模型如何失敗?我知道「測試數據」的結果具有很高的方差。但就我而言,每次運行代碼時測試數據都可以,但驗證數據失敗。順便說一句。我的數據集是時間序列。 – Yahya
你的猜測是一個過度的問題。換句話說,你可以訓練你的分類器,直到它符合你的測試數據。爲了確保您的良好結果不僅適用於您的測試數據,您還可以保留一些看不見的數據,以便100%確定您的分類器在測試結果(即您的驗證數據)之後與您想象的一樣好。但是爲什麼你的驗證是不好的,而你的測試是好的顯而易見的原因是這兩個數據集彼此不同。所以問題是你有什麼樣的數據,甚至更重要:什麼是「真實數據」以及爲什麼你稱之爲真實數據? –
你說得對。看來驗證數據與培訓和測試數據不同。 – Yahya