Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scikit学习中MLPREGESSOR的超参数优化_Python_Machine Learning_Scikit Learn - Fatal编程技术网

Python scikit学习中MLPREGESSOR的超参数优化

Python scikit学习中MLPREGESSOR的超参数优化,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我是使用python进行机器学习的新手,希望您能帮助我解决以下问题 我正在尝试对不同隐藏神经元编号(6个值)的列表运行MLPrePressor,对于每个选定的神经元编号,我希望训练数据被洗牌三次,即每个神经元编号三个分数。下面的代码工作正常,返回18分(6*3)。然而,我觉得这不是解决问题的有效方法,因为它运行了将近一个小时。我尝试过使用GridSearchCV(),但我不知道如何控制训练数据的洗牌(每个隐藏的神经元数洗牌3次)。有人能提出更好(更快)的解决方法吗 from sklearn.ne

我是使用python进行机器学习的新手,希望您能帮助我解决以下问题

我正在尝试对不同隐藏神经元编号(6个值)的列表运行MLPrePressor,对于每个选定的神经元编号,我希望训练数据被洗牌三次,即每个神经元编号三个分数。下面的代码工作正常,返回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
然后使用


谢谢你的回答。它解决了获取分数数据帧的问题。但是,您是否可以建议对代码本身进行任何改进以加快处理时间,例如使用GridSearchCV作为问题的解释?欢迎!如果我的答案解决了你的问题,请你投票并将其标记为正确答案:-)另外,我需要检查优化部分。你能提供数据让我在我的系统上复制吗?
import pandas as pd
score_df = pd.DataFrame.from_dict(score_dict)