选择最佳预测神经网络

数据挖掘 Python 神经网络 scikit-学习
2022-02-16 17:41:03

那里,

我目前正在做一个项目,我的数据库有大约 120 个模式和 39 列,我正在尝试用它构建一个预测神经网络。这是回归任务。

我试图在一个简单的网络(仅 3 个神经元)中获得最好的预测器(单独或组合),然后使用交叉验证来更好地调整模型。问题是 1)它的 powerset 很大,我的计算机甚至无法处理为简单拟合生成整个子集 2)只有 3 个神经元已经给出了很差的结果(r2<0)

有人知道一种方法,或者可以推荐一个关于为神经网络选择预测器的读物吗?

设置:windows 10,使用来自 scikitleran 的 MLPRegressor 和超参数隐藏层大小 = 3,max_iter= 5000,solver='sgd'

2个回答

一种非常快速的方法是在您的数据上运行一些基于树的 ML 模型,例如随机森林或 XGBoost。基于树的模型可以返回重要性系数,估计每个变量的相对解释力。您可以实现一个非常大且很深的树集合(此时我们并不真正关心过度拟合),因此它们会返回三个最强的预测变量。然后,您可以将它们输入神经网络。

另一种更耗时的方法是多次运行模型 a 并用与原始变量的均值和标准差相同的随机噪声交替替换每个变量。这种扰动方法将告诉您当一个变量被噪声替换时性能会降低多少。这是准确的,但非常耗时。

对我来说,这听起来像是一个分类问题?您正在尝试根据您的一些“变量”(其中 39 个?)对模式进行分类,如果首先是这种情况R2确实不是正确的衡量标准。根据您的类的分布,您可能希望查看诸如准确性之类的度量,AUROC或一个F1-分数。

话虽如此,我个人在 SciKit 学习中实现的神经网络方面从来没有任何好的经验,如果你确实想使用神经网络,我可以看看 Keras 之类的东西,一个相当简单的神经网络库。作为神经网络的一般规则,您不需要实际创建预测变量的所有组合,从技术上讲,这项工作(给定足够的隐藏层)将由网络完成。对于您的任务,据我所知,一个简单的 MLP 可以做到。来自 tensorflow.keras 导入层的代码示例

model = tf.keras.Sequential()
model.add(layers.Dense(64, activation='relu'))
model.add(layer.Dropout(0.5))
model.add(layers.Dense(64, activation='relu'))
model.add(layer.Dropout(0.5))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=tf.keras.optimizers.Adam(0.01),
          loss='categorical_crossentropy',
          metrics=['accuracy'])

但是,据我所知,这似乎是相当结构化的数据,也可以使用梯度提升树或其他方法进行分析。你可能也想看看那些,可以得到更好的结果。