python - scikit-learn 中 MLPRegressor 的超参数优化
问题描述
我在使用 python 进行机器学习方面非常陌生,希望对以下问题有任何帮助。
我正在尝试运行 MLPRegressor 以获取不同隐藏神经元编号(6 个值)的列表,并且对于每个选定的神经元编号,我希望将训练数据洗牌三次,即每个神经元编号的三个分数。以下代码工作正常并返回 18 个分数 (6*3)。但是我觉得这不是解决问题的有效方法,因为它运行了将近一个小时。我曾尝试使用 GridSearchCV(),但我不知道如何控制训练数据的洗牌(每个隐藏的神经元数 3 次)。任何人都可以提出更好(更快)的方法来解决这个问题吗?
from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import cross_val_score
from sklearn.utils import shuffle
n=3 # how many times to shuffle the training data
nhn_range=[8,10,12,14,16,18] # number of hidden neurons
nhn_scores = []
for nhn in nhn_range:
mlp = MLPRegressor(hidden_layer_sizes=(nhn,), activation='tanh',
solver='adam', shuffle=False, random_state=42,
max_iter=20000, momentum=0.7, early_stopping=True,
validation_fraction=0.15)
for _ in range(n):
df_train = shuffle(df_train)
score = np.sqrt(-cross_val_score(mlp, df_train[feature_cols],
df_train[response_cols],
cv=5, scoring='neg_mean_squared_error')).mean()
nhn_scores.append(score)
代码返回分数列表。我怎样才能得到一个简单的数据框,它有 3 行(每次洗牌)和 6 列(每个隐藏的神经元数)。
提前致谢
解决方案
尝试这个
score_dict = {}
for nhn in nhn_range:
mlp = MLPRegressor(hidden_layer_sizes=(nhn,), activation='tanh',
solver='adam', shuffle=False, random_state=42,
max_iter=20000, momentum=0.7, early_stopping=True,
validation_fraction=0.15)
nhn_scores = []
for _ in range(n):
df_train = shuffle(df_train)
score = np.sqrt(-cross_val_score(mlp, df_train[feature_cols],
df_train[response_cols],
cv=5, scoring='neg_mean_squared_error')).mean()
nhn_scores.append(score)
score_dict[nhn] = nhn_scores
然后score_dict
使用from_dict转换为这样的数据帧
import pandas as pd
score_df = pd.DataFrame.from_dict(score_dict)
推荐阅读
- r - 如何在不循环的情况下删除列值组合冲突的行?
- python - 如何使用 GUI 从多个外部文件夹导入和合并 PDF?
- sqlalchemy - Alembic 为 UUIDField 迁移 as_uuid
- reactjs - 通过 Axios POST 传递数组
- c# - 调用在 WSL docker 容器中运行的 .NET 核心端点时出现 ECONNREFUSED
- blazor - 无法通过派生类的值设置具有基类类型的参数
- visual-studio-code - 不同格式的VSCode调试控制台变量输出
- r - RStudio:colnames()函数不显示第一列的名称
- r - 对来自不同行的相似字符串进行分组并计算 R 中的总数
- javascript - 如何正确更新reactjs中的数据?