我有122个唯一值的字典。我正在为超过45,000条记录提供33个数据点,以便在预测输出应该是什么时参考。我注意到的是它只预测[[1.]...]
。我需要它来预测1的2的3 ...直到122.所有都是浮点数,所以我不知道这是否重要。
这是我的代码 -
Y = faults['FAILMODE']
del faults['FAILMODE']
X = faults
len(Y.FAILMODE.unique())
122
这就是我打算将输出与实际字符串值相关联(如'Exhaust')
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 :(得分:4)
在这种情况下,您的模型是错误的,请将其更改为:
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)