我如何使keras预测除单热矩阵之外的其他内容?

Nic*_*row 3 python numpy pandas keras

我有122个唯一值的字典。我为程序提供了45,000条记录和33个数据点,以供您在预测输出内容时参考。我注意到的只是预言[[1.]...]。我需要它来预测1的2的3的...直到122。所有的都是浮点数,所以我不知道这是否重要。

这是我的代码-

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

len(Y.FAILMODE.unique())
122
Run Code Online (Sandbox Code Playgroud)

这就是我打算将输出与实际字符串值(例如“排气”)相关联的方式

classes = {}
n = 1.
for u in Y:
    if u not in classes:
        classes[n] = u
        n += 1.
    else:
        n += 1.
Run Code Online (Sandbox Code Playgroud)

我使用它将所有数据转换为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.]]
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Mat*_*gro 5

在这种情况下,您的模型是错误的,请将其更改为:

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'])
Run Code Online (Sandbox Code Playgroud)

并确保使用keras.utils.np_utils.to_categorical函数对输入数据进行一次热编码。然后应该训练模型。

然后,要恢复整数类索引,在使用模型进行预测时,请使用输出概率分布的argmax,以便获得具有最大概率的数组索引。

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

class = np.argmax(y)
Run Code Online (Sandbox Code Playgroud)