2017-01-23 38 views
0

我使用keras有tensorflow後端神經網絡:當用不同的數據集排列訓練時,神經網絡會給出不同的結果,爲什麼?

seed = 7 
np.random.seed(seed) 


model = Sequential() 

model.add(Dense(32, input_dim=11, init='uniform', activation='relu')) 
model.add(Dense(12, init='uniform', activation='relu')) 
model.add(Dense(1, init='uniform', activation='sigmoid')) 

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 

model.fit(X_train, result_train, nb_epoch=50, batch_size=5) 

scores = model.evaluate(X_test, result_test) 
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) 

我從與他們的社會經濟參數的公立大學作爲變量測試輟學,起初我有8個CSV文件(命名爲A, b,c,d,e,f,g和h)有12個列標題和300,000行。結果是二進制,保留爲0,丟棄爲1,我在將數據提供給NN之前對數據進行了歸一化處理。

我的第一套訓練集是a,b,c,d,e和f,g和h代表測試。神經網絡爲我提供了一個很好的特異性,靈敏度和準確性:70%,65%和66%。

由於我訓練了與上面所述相同體系結構的另一個NN,這次我的訓練數據集是c,d,e,f,g和h,a和b作爲我的新測試支持,但隨後模型爲特異性,敏感性和準確性提供了非常差的結果:42%,48%和47%,我想知道爲什麼?是否有任何已發表的論文引用了神經網絡中的這種現象?

謝謝!

+0

我假設結果是「持有」測試集? – doctorlove

+0

@doctorlove,是的,他們是支持。我試圖找出爲什麼,我計算了每個csv文件中的退出次數,並且他們沒有很大的範圍,csv文件的%退出是a = 34%,b = 42%,c = 35 %,d = 36%,e = 34%,f = 40%,g = 37%和h = 33%。 –

+0

請看https://www.quora.com/Does-the-order-of-training-data-matter-when-training-neural-networks – Dmitry

回答

1

許多機器學習方法可能會遇到稱爲過度擬合的問題Wikipedia給出了對此的各種引用。

您至少使用保留數據集的原因是要測試您的訓練好的模型如何適合看不見的數據。從理論上講,您可以對一個數據集100%準確地執行,但對新數據執行得非常糟糕。

有些人使用交叉驗證,而不是一個或兩個後退數據集 - 這將嘗試測試和訓練集中的每個數據點。例如,如果有10個數據點,則使用9來訓練並嘗試適應第十個數據點。然後爲每個排列做這個。

如果各種模式不均勻分佈在數據集中,這可能是合適的。

如果您的某個訓練集已全部丟失,則預測每個人退出的模型將最適合這一點,但不會推廣到沒有丟失的任何數據。

通常值得做一些探索性數據分析,看看你的一些數據集是否不具代表性。

相關問題