首页 > 解决方案 > 了解哪些输入在神经元网络中具有最高权重

问题描述

我目前正在研究监督机器学习解决方案,将一些数据分为两类。到目前为止,我一直在研究 keras/tensorflow Python Scipt,它似乎可以很好地管理它:

input_dim = len(data.columns) - 1
print(input_dim)

model = Sequential()
model.add(Dense(8, input_dim=input_dim, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(train_x, train_y, validation_split=0.33, epochs=1500, batch_size=1000, verbose=1)

我使用的输入数据是具有 168 个输入特征的 csv 数据。当我第一次成功运行这个脚本时,我很惊讶地发现,仅仅经过几百个 epoch 的训练,我的准确率就超过了 99%。我什至都懒得规范化输入数据。

我现在想要找出的是,我的 168 个输入特征中的哪一个能够带来如此高的准确率,而哪些特征在训练时不会产生太大影响。

有没有办法检查每个输入列的权重,以查看其中哪些被使用得最多,分别产生最大的影响。

标签: pythontensorflowmachine-learningkeras

解决方案


回答你的最后一个问题:

model.layers[0].get_weights()

但是,除非有明显的主导权重,否则单个样本不太可能为您提供良好的准确性。对于特征选择,尝试用它们的平均值替换输入的一些特征,并检查预测如何波动。几乎没有波动意味着该特征并不重要。

另外,请考虑在https://datascience.stackexchange.com/上发布 ML 问题


推荐阅读