我有一个多类别多输出的分类问题(详见https://scikit-learn.org/stable/modules/multiclass.html)。换句话说,我的数据集如下。
node_name, timeseries_1, timeseries_2, label_1, label_2
node1, [1.2, ...], [1.8, ...], 0, 2
node2, [1.0, ...], [1.1, ...], 1, 1
node3, [1.9, ...], [1.2, ...], 0, 3
...
...
...
因此,我的
label_1
可以是 0
或者 1
,而我的 label_2
可以是 0
、1
或者 2
。我的当前代码如下。
def create_network():
model = Sequential()
model.add(LSTM(200, input_shape=(16,2)))
model.add(Dense(100))
model.add(Dropout(0.2))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
neural_network = KerasClassifier(build_fn=create_network, epochs=100, batch_size=100, verbose=0)
k_fold = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
scores = cross_validate(neural_network, my_features, label_data_encoded, cv=k_fold, scoring = ('accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc'))
我的问题如下。
- 由于我有两个标签(即
label_1
和label_2
),如何将这些标签适配到lstm模型中?我是否需要做类似于keras.utils.to_categorical(label_1, 2)
和keras.utils.to_categorical(label_2, 3)
的操作? - 如何更改模型,使其适用于
多分类多输出分类
?
如果需要更多细节,我很乐意提供。
kerasclassifier
不支持函数式API,我们如何使用您的方法执行10倍分层交叉验证。如果您有代码/或知道如何编写它,请告诉我。期待您的回复。谢谢 :) - EmJl1
和l2
权重,我认为将它们视为另一个超参数是公平的。因此,您可以从将两者都设置为1开始,然后尝试调整,如果其中一个输出表现太差。很抱歉我找不到StratifiedKFold的代码,您可以查看官方的sklearn文档,或者确实可以查看其他答案! :) - Aditya Arora