首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为RandomSearchCV定义具有两个隐藏层的MLPR

如何为RandomSearchCV定义具有两个隐藏层的MLPR
EN

Stack Overflow用户
提问于 2019-02-18 01:21:50
回答 1查看 620关注 0票数 0

我正在尝试弄清楚如何定义一个具有两个隐藏层的MLPR的参数网格,以便在SkLearn中输入到RandomSearchCV?

下面是我一直在尝试的。那么,如何对RandomSearchCV的hidden_layer_sizes进行随机化呢?

代码语言:javascript
复制
import numpy as np
import pandas as pd
from sklearn.neural_network import MLPRegressor
from sklearn.datasets import load_boston
from sklearn.model_selection import RandomizedSearchCV
boston = load_boston()
X = boston.data
y = boston.target


params = {'activation':['logistic', 'relu'],
          'learning_rate':['adaptive'],
          'alpha':np.logspace(0.0001, 100, 10),
          'max_iter':[1000],
          'hidden_layer_sizes':[(10,10), (30,10), (50,20), (60,30)]}


reg = MLPRegressor()
random_search = RandomizedSearchCV(estimator = reg,
                                   param_distributions=params,
                                   n_iter=10,
                                   scoring = 'neg_mean_squared_error',
                                   cv=3,
                                   n_jobs = -3,
                                   pre_dispatch = '2*n_jobs',
                                   return_train_score = True) 
random_search.fit(X,y)

df = pd.DataFrame(random_search.cv_results_)
df['train_RMSE'] = np.sqrt(-df['mean_train_score'])
df['test_RMSE'] = np.sqrt(-df['mean_test_score'])
print(random_search.best_params_)

附言:如果任何人对我选择的参数有任何意见,请随时发表评论。这些参数将用于最多具有7个输入的回归问题。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-02-18 08:36:21

是的,你做得对。此外,您还可以设置verbose级别以查看上一次交叉验证使用的超参数,例如[CV] activation=tanh, alpha=1e+100, hidden_layer_sizes=(30, 10), score=-4.180054117738231, total= 2.7s

我选择了GridSearchCV而不是RandomizedSearchCV来查找最佳参数集,在我的机器上花了5分钟。

代码语言:javascript
复制
import numpy as np
from sklearn.neural_network import MLPRegressor
from sklearn.datasets import load_boston
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import explained_variance_score

X, y = load_boston(return_X_y=True)

# Split data for final evaluation:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, shuffle=True, random_state=42)

# Define base regressor:
base_reg = MLPRegressor(learning_rate='adaptive', max_iter=5000, random_state=42)

# Define search space:
params = {
    'activation': ['logistic', 'relu', 'tanh'],  # <-- added 'tanh' as third non-linear activation function
    'alpha': np.logspace(0.0001, 100, 10),
    'hidden_layer_sizes': [
        (10, 10), (20, 10), (30, 10),
        (40, 10), (90, 10), (90, 30, 10)  # <-- added more neurons or layers
    ]
}

# Find best hyper params and then refit on all training data:
reg = GridSearchCV(estimator=base_reg, param_grid=params,
                   n_jobs=8, cv=3, refit=True, verbose=5)  # <-- verbose=5
reg.fit(X_train, y_train)

print(reg.best_estimator_)
# MLPRegressor(activation='logistic', alpha=1.0002302850208247,
#              batch_size='auto', beta_1=0.9, beta_2=0.999, early_stopping=False,
#              epsilon=1e-08, hidden_layer_sizes=(30, 10),
#              learning_rate='adaptive', learning_rate_init=0.001, max_iter=5000,
#              momentum=0.9, n_iter_no_change=10, nesterovs_momentum=True,
#              power_t=0.5, random_state=42, shuffle=True, solver='adam',
#              tol=0.0001, validation_fraction=0.1, verbose=False,
#              warm_start=False)

print(reg.best_params_)
# {'activation': 'logistic', 'alpha': 1.0002302850208247, 'hidden_layer_sizes': (30, 10)}

# Evaluate on unseen test data:
err = explained_variance_score(y_train, reg.predict(X_train))
print(err)  # 0.8936815412058757

err = explained_variance_score(y_test, reg.predict(X_test))
print(err)  # 0.801353064635174
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54735717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档