首页 > 解决方案 > 使用 sklearn 调整神经网络中的参数

问题描述

背景

我正在尝试在一df列和另一列之间建立关系。因此,如果我们假设列分别命名xy我需要的是一个关系f(x)=y。我尝试像这样使用线性回归:

model = Pipeline([('poly', PolynomialFeatures(degree=deg)),
                      ('linear', LinearRegression(fit_intercept=False))])

deg并用循环迭代for,我发现最好的值是deg=9(即使deg=3结果很接近)哪里

MSE: 7.282878279669111    MAE: 1.704843791514593

问题

现在我正在尝试创建一个神经网络(这里我正在使用MLPRegressor),但不确定要选择哪些参数。我尝试手动更改参数,有时会得到很好的结果,mse~7.1有时会得到糟糕的结果,例如mse~20. relu从 切换到后我得到了更好的结果logistic,并在每层中的层数和节点数上玩了一下。

我的问题是如何有效地自动搜索最佳超参数,包括层架构(层数和每层中的节点数)和多项式特征的程度。到目前为止,我拥有的代码是:

scaler = MinMaxScaler()
X_train_norm = scaler.fit_transform(X_train.values.reshape(-1, 1))
X_test_norm = scaler.fit_transform(X_test.values.reshape(-1, 1))

model = Pipeline([('poly', PolynomialFeatures(degree=deg)),
                ('mlpr', MLPRegressor(hidden_layer_sizes=(deg, 6, 8, 1),
                                      activation='relu',
                                      solver='adam', max_iter=10000))])

我确实发现对于随机森林,您可以使用

rf_random = RandomizedSearchCV(estimator=rf,
                               param_distributions=random_grid,
                               n_iter=100, cv=3, verbose=2,
                               random_state=42, n_jobs=-1)

但是在神经网络的情况下,我无法实现像这样的搜索。

标签: pythonscikit-learnneural-networkhyperparametersmlp

解决方案


推荐阅读