2017-02-25 46 views
1

我有一個包含122個唯一值的字典。我正在用超過45,000條記錄提供33個數據點,以指出什麼時候對輸出結果進行預測。我注意到的是它只能預測[[1.]...]。我需要它來預測1的2的3 ...直到122.所有的都是漂浮物,所以我不知道這是否重要。我該如何讓keras預測除了單熱矩陣以外的其他東西?

這裏是我的代碼 -

Y = faults['FAILMODE'] 
del faults['FAILMODE'] 
X = faults 

len(Y.FAILMODE.unique()) 
122 

我這是怎麼打算與實際字符串值的輸出關聯(如「排」)

classes = {} 
n = 1. 
for u in Y: 
    if u not in classes: 
     classes[n] = u 
     n += 1. 
    else: 
     n += 1. 

我用這把所有數據轉換成DataFrame中的獨特浮點。

for col in X: 
    values = pd.Series(X[col]) 
    X[col] = (values.factorize()[0]+1).astype('float') 

Y = (Y.factorize()[0]+1).astype('float') 

Y = pd.DataFrame(Y, columns = ['FAILMODE']) 

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33) 

X_train = X_train.as_matrix() 
X_test = X_test.as_matrix() 
Y_train = Y_train.as_matrix() 
Y_test = Y_test.as_matrix() 

model = Sequential() 
model.add(Dense(12, input_dim=7, init='uniform', activation='relu')) 
model.add(Dense(7, 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, Y_train, nb_epoch=150, batch_size=10) 

predictions = model.predict(X_test) 
print predictions[:20 
[[ 1.] 
[ 1.] 
[ 1.] 
[ 1.] 
[ 1.] 
[ 1.] 
[ 1.] 
[ 1.] 
[ 1.] 
[ 1.] 
[ 1.] 
[ 1.]] 

感謝您的幫助!

+0

這是什麼分類? –

+0

是的。我也做了一切改變訓練和測試數據'to_categorical',但我現在有問題的數據形狀。 – NickTheInventor

回答

2

你的模式是錯誤在這種情況下,將其更改爲:

model = Sequential() 
model.add(Dense(12, input_dim=7, init='uniform', activation='relu')) 
model.add(Dense(7, init='uniform', activation='relu')) 
model.add(Dense(122, init='uniform', activation='softmax')) 

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

,並確保輸入數據是一個熱與功能keras.utils.np_utils.to_categorical編碼。然後模型應該訓練。

然後爲了恢復整型分類索引,當您使用模型進行預測時,將採用輸出概率分佈的argmax,以便獲得具有最大概率的數組索引。

x = some test point. 
y = model.predict(x)[0] 

class = np.argmax(y) 
相關問題