2017-02-24 81 views
0

我有看起來像這樣的結構化數據。使我的數據適合Keras Sequential模型和密集層併產生輸出

faults.head() 

Fault DEALER FAILMODE FAILCODEMODE DAYS UNTIL FAILURE TERRITORY CODE DESIGN PHASE CODE PLANT ID CODE 
0 CAMPAIGN/TRP 31057 CAMPAIGN BNRBC1 283.0 102 62 82 
1 INTERMITTENT PROBL 24126 SPECIAL (NO FAILURE) XXIPNF 126.0 102 62 82 
2 DSID #DSBCG2058 TAG #362783 EXHAUST SYSTEM. U... 0 CLOGGED, PLUGGED WITH FOREIGN MATERIAL, DIRT/D... USDVDR 118.0 102 62 82 
3 INTERMITTENT PROBL 20943 SPECIAL (NO FAILURE) XXIPNF 97.0 102 62 82 
4 CAMPAIGN 19134 CAMPAIGN USSCR1 315.0 102 62 82 

我試圖預測類FAILMODE。 FAILMODE中只有122個唯一值。那些是我的課程。

基於行中的所有其他數據,我想要一個單獨的矩陣,或者甚至類本身都是我測試集上計算的結果。這裏是我的代碼,所以遠

from keras.models import Sequential 
from keras.layers import Dense 
Using Theano backend. 

faults_testing = faults[:14843] 
faults_training = faults[14844:] 

model = Sequential() 
model.add(Dense(len(faults.FAILMODE.unique()) + 20, input_dim=len(faults_training), init='uniform', activation='relu')) 
model.add(Dense(len(faults_training), init='uniform', activation='relu')) 
model.add(Dense(len(faults.FAILMODE.unique()), init='uniform', activation='sigmoid')) 

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

這裏是哪裏,我不知道什麼是X或Y是這樣的教程says-

model.fit(X, Y, nb_epoch=len(faults_training), batch_size=10) 

我只是嘗試以下各項

model.fit(faults_training['FAILMODE'], faults_testing['FAILMODE'], nb_epoch=len(faults_training), batch_size=10) 

導致出現此錯誤 -

ValueError        Traceback (most recent call last) 
<ipython-input-54-e8765933cfb9> in <module>() 
----> 1 model.fit(faults_training['FAILMODE'], faults_testing['FAILMODE'], nb_epoch=len(faults_training), batch_size=10) 

ValueError: Error when checking model input: expected dense_input_1 to have shape (None, 34631) but got array with shape (34631L, 1L) 

Ple你的答案要徹底。謝謝!

回答

0

正則神經網絡(包括Keras Sequential模型)只接受浮點數據(X)和整數或單熱編碼標籤/類(Y)。所以你需要轉換你的數據集以符合要求。所以,你可能想要做什麼:(例如CAMPAIGN/TRP,BNRBC1,XXIPNF)

  1. 地圖所有類別(字符串)值浮動(這將是更好,如果你可以標準化數據)
  2. 認沽在X
  3. 的所有數據列(不包括標籤列)將標籤欄(應該只有1列)內Y和使用to_categoricalY = to_categorical(Y)
  4. 斯普利特培訓轉化爲熱碼單和測試數據使用功能如train_test_splitX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)
  5. 使用model.fit(X_train, Y_train, nb_epoch=100, batch_size=10)訓練模型。調整nb_epochbatch_size以後根據你的速度和訓練的準確性期望
  6. 評估使用scores = model.evaluate(self, X_test, Y_test, batch_size=10)

您還可以查看這篇文章的準確性得到知道如何分類數據轉換爲數字http://fastml.com/converting-categorical-data-into-numbers-with-pandas-and-scikit-learn/

+0

我試着說你的話,這似乎是正確的方法,但現在我得到了'ValueError:發現輸入變量的樣本數不一致:[49475,6035950]''當我做'train_test_split(X ,Y,test_size = 0.33'。當我做'Y = to_categorical(Y)'時,'len(Y)'現在是6035950,當它應該是49745之前分裂。我究竟做錯了什麼? – NickTheInventor

+0

您可以向我們展示您用於將數據框轉換爲X和Y的代碼嗎? –