那里,
我目前正在做一个项目,在这个项目中,我的数据库有大约120个模式,有39个列,我正在尝试用它构建一个预测神经网络。这是回归任务。
我试图在一个简单的网络(只有3个神经元)中获得最好的预测因子(单独或组合),然后使用交叉验证来更好地调整模型。问题是:( 1)它的powerset很大,我的计算机甚至无法处理简单拟合的整个子集的生成;2)只有3个神经元已经给出了很差的结果(r2<0)
是否有人知道一种方法,或者请推荐一种关于选择神经网络预测器的读数?
安装程序: windows 10,使用带有超参数隐层大小= 3,max_iter= 5000,求解器=‘sgd’的坐垫的MLPRegressor
发布于 2019-09-23 09:14:51
一种非常快速的方法是对数据运行一些基于树的ML模型,例如随机森林或XGBoost。基于树的模型可以返回重要系数,估计每个变量的相对解释能力.你可以实现一个非常大而又深的树集合(我们现在并不关心过度拟合),所以它们会返回给你三个最强大的预测因子。然后你可以把它们带到一个神经网络中。
另一种更耗时的方法是运行模型的多重时间A,并以随机噪声替换每个变量,与原变量的均值和标准差相同。这个摄动法会告诉你,当一个变量被噪声取代时,性能会下降多少。这是准确的,但非常耗时。
发布于 2019-09-23 08:38:46
对我来说这听起来像是分类问题?您正在尝试根据一些“变量”(其中39个?)对模式进行分类。如果是这样的话,首先,R^2确实不是正确的衡量标准。根据类的分布情况,您可能需要查看诸如准确性、\mathrm{AUROC}或F_1-score等度量。
话虽如此,我个人从未有过在SciKit中实现神经网络的良好经验,如果您想明确地使用神经网络Id,可以查看类似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'])然而,在我看来,这似乎是相当结构化的数据,也可以用梯度增强的树之类的方法来分析。你可能也想看看这些,可以得到更好的结果。
https://datascience.stackexchange.com/questions/60611
复制相似问题