精华内容
下载资源
问答
  • python网格搜索优化参数
    2020-12-24 22:13:53

    您可以使用itertools.product创建一个包含嵌套for循环中所有(lowerThreshHold, upperThreshold)对的2元素元组的迭代器,然后将该迭代器拆分为八个块,将一个传递给池中的每个进程。然后你只需对从每个工人那里得到的结果进行排序,以选出最好的总体结果。我还建议使用multiprocessing.Pool而不是{},来简化事情。在import multiprocessing

    import itertools

    def get_chunks(iterable, chunks=1):

    # This is from http://stackoverflow.com/a/2136090/2073595

    lst = list(iterable)

    return [lst[i::chunks] for i in xrange(chunks)]

    def someOtherFunction(lower, upper):

    return (lower + upper) / 2

    def worker(pairs):

    best_accuracy = best_lower = best_upper = 0

    for lower_threshold, upper_threshold in pairs:

    accuracy = someOtherFunction(lower_threshold, upper_threshold)

    if accuracy > best_accuracy:

    best_accuracy = accuracy

    best_lower = lower_threshold

    best_upper = upper_threshold

    return best_accuracy, best_lower, best_upper

    if __name__ == '__main__':

    jobs = []

    pairs = itertools.product(xrange(0, 100), xrange(100, 200))

    chunked_pairs = get_chunks(pairs, chunks=multiprocessing.cpu_count())

    pool = multiprocessing.Pool()

    results = pool.map(worker, chunked_pairs)

    pool.close()

    pool.join()

    print results

    # Now combine the results

    sorted_results = reversed(sorted(results, key=lambda x: x[0]))

    print next(sorted_results) # Winner

    输出:

    ^{pr2}$

    更多相关内容
  • 原标题:Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据原文链接:http://tecdat.cn/?p=12693介绍在本教程中,我们将讨论一种非常强大的优化(或自动化)算法,即网格搜索算法。它最常用于机器学习模型中...

    原标题:Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据

    原文链接:http://tecdat.cn/?p=12693

    介绍

    在本教程中,我们将讨论一种非常强大的优化(或自动化)算法,即网格搜索算法。它最常用于机器学习模型中的超参数调整。我们将学习如何使用Python来实现它,以及如何将其应用到实际应用程序中,以了解它如何帮助我们为模型选择最佳参数并提高其准确性。

    先决条件

    要遵循本教程,您应该对Python或其他某种编程语言有基本的了解。您最好也具有机器学习的基本知识,但这不是必需的。除此之外,本文是初学者友好的,任何人都可以关注。

    安装

    要完成本教程,您需要在系统中安装以下库/框架:

    Python 3

    NumPy

    Pandas

    Keras

    Scikit-Learn

    它们的安装都非常简单-您可以单击它们各自的网站,以获取各自的详细安装说明。通常,可以使用pip安装软件包:

    $ pip install numpy pandas tensorflow keras scikit-learn

    如果遇到任何问题,请参考每个软件包的官方文档。

    什么是网格搜索?

    网格搜索本质上是一种优化算法,可让你从提供的参数选项列表中选择最适合优化问题的参数,从而使“试验和错误”方法自动化。尽管它可以应用于许多优化问题,但是由于其在机器学习中的使用而获得最广为人知的参数,该参数可以使模型获得最佳精度。

    假设您的模型采用以下三个参数作为输入:

    隐藏层数[2,4]

    每层中的神经元数量[5,10]

    神经元数[10,50]

    如果对于每个参数输入,我们希望尝试两个选项(如上面的方括号中所述),则总计总共2 ^3 = 8个不同的组合(例如,一个可能的组合为[2,5,10])。手动执行此操作会很麻烦。

    现在,假设我们有10个不同的输入参数,并且想为每个参数尝试5个可能的值。每当我们希望更改参数值,重新运行代码并跟踪所有参数组合的结果时,都需要从我们这边进行手动输入。网格搜索可自动执行该过程,因为它仅获取每个参数的可能值并运行代码以尝试所有可能的组合,输出每个组合的结果,并输出可提供最佳准确性的组合。

    网格搜索实施

    让我们将网格搜索应用于实际应用程序。讨论机器学习和数据预处理这一部分不在本教程的讨论范围之内,因此我们只需要运行其代码并深入讨论Grid Search的引入部分即可。

    我们将使用Pima印度糖尿病数据集,该数据集包含有关患者是否基于不同属性(例如血糖,葡萄糖浓度,血压等)的糖尿病信息。使用Pandas read_csv()方法,您可以直接从在线资源中导入数据集。

    以下脚本导入所需的库:

    from sklearn.model_selection import GridSearchCV, KFold from keras.models import Sequential from keras.layers import Dense, Dropout from keras.wrappers.scikit_learn import KerasClassifier from keras.optimizers import Adam import sys import pandas as pd import numpy as np

    以下脚本导入数据集并设置数据集的列标题。

    df = pd.read_csv(data_path, names=columns)

    让我们看一下数据集的前5行:

    df.head()

    输出:

    如你所见,这5行都是用来描述每一列的标签,因此它们对我们没有用。我们将从删除这些非数据行开始,然后将所有NaN值替换为0:

    for col in columns: df[col].replace(0, np.NaN, inplace=True) df.dropna(inplace=True) # Drop all rows with missing values

    以下脚本将数据分为变量和标签集,并将标准化应用于数据集:

    # Transform and display the training data X_standardized = scaler.transform(X)

    以下方法创建了我们简单的深度学习模型:

    def create_model(learn_rate, dropout_rate): # Create model model = Sequential() model.add(Dense(8, input_dim=8, kernel_initializer='normal', activation='relu')) model.add(Dropout(dropout_rate)) model.add(Dense(4, input_dim=8, kernel_initializer='normal', activation='relu')) model.add(Dropout(dropout_rate)) model.add(Dense(1, activation='sigmoid')) # Compile the model adam = Adam(lr=learn_rate) model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy']) return model

    这是加载数据集,对其进行预处理并创建您的机器学习模型所需的所有代码。因为我们只对看到Grid Search的功能感兴趣,所以我没有进行训练/测试拆分,我们将模型拟合到整个数据集。

    在下一节中,我们将开始了解Grid Search如何通过优化参数使生活变得更轻松。

    在没有网格搜索的情况下训练模型

    在下面的代码中,我们将随机决定或根据直觉决定的参数值创建模型,并查看模型的性能:

    model = create_model(learn_rate, dropout_rate)

    输出:

    Epoch 1/1 130/130 [==============================] - 0s 2ms/step - loss: 0.6934 - accuracy: 0.6000

    正如看到的,我们得到的精度是60.00%。这是相当低的。

    使用网格搜索优化超参数

    如果不使用Grid Search,则可以直接fit()在上面创建的模型上调用方法。但是,要使用网格搜索,我们需要将一些参数传递给create_model()函数。此外,我们需要使用不同的选项声明我们的网格,我们希望为每个参数尝试这些选项。让我们分部分进行。

    首先,我们修改create_model()函数以接受调用函数的参数:

    # Create the model model = KerasClassifier(build_fn=create_model, verbose=1)

    现在,我们准备实现网格搜索算法并在其上拟合数据集:

    # Build and fit the GridSearchCV grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=KFold(random_state=seed), verbose=10)

    输出:

    Best: 0.7959183612648322, using {'batch_size': 10, 'dropout_rate': 0.2, 'epochs': 10, 'learn_rate': 0.02}

    在输出中,我们可以看到它为我们提供了最佳精度的参数组合。

    可以肯定地说,网格搜索在Python中非常容易实现,并且在人工方面节省了很多时间。您可以列出所有您想要调整的参数,声明要测试的值,运行您的代码,而不必理会。您无需再输入任何信息。找到最佳参数组合后,您只需将其用于最终模型即可。

    结论

    总结起来,我们了解了什么是Grid Search,它如何帮助我们优化模型以及它带来的诸如自动化的好处。此外,我们学习了如何使用Python语言在几行代码中实现它。为了了解其有效性,我们还训练了带有和不带有Grid Search的机器学习模型,使用Grid Search的准确性提高了19%。返回搜狐,查看更多

    责任编辑:

    展开全文
  • 【小白从小学Python、C、Java】 【Python全国计算机等级考试】 【Python数据分析考试必会题】 ...1.网格搜索(Grid Search)是一种调参方法,也称为穷举搜索搜索的是参数,在所有候选的参数选择中,

    【小白从小学Python、C、Java】

    【Python全国计算机等级考试】

    【Python数据分析考试必会题】

    ● 标题与摘要

    Python的数据分析中

    超参数调优方法:网格搜索

    ● 选择题

    以下说法错误的是:

    A 网格搜索是一种调参方法

    B 网格搜索会遍历几乎所有参数组合

    C 网格搜索的最大优点就是搜索速度快

    D 网格搜索在面对大数据集时会非常耗时

    ● 问题解析

    1.网格搜索(Grid Search)是一种调参方法,也称为穷举搜索,搜索的是参数,在所有候选的参数选择中,按步长依次调整参数,通过循环遍历,尝试每一种可能性,从所有的参数中找到在验证集上精度最高的参数,表现最好的参数就是最终的结果,原理就像是在数组里找到最大值。

    2.网格搜索可以保证在指定的参数范围内找到精度最高的参数,因为网格搜索会遍历所有可能参数的组合,在面对大数据集和多参数的情况下会非常耗时。

    3.网格搜索语法:

    Class sklearn.model_selection.GridSearchCV(estimator,param_grid,scoring=None,fit_params=None,n_jobs=None,iid=’warn’,refit=True,cv=’warn’,verbose=0,pre_dispatch=‘2*n_jobs’,error_score=’raise-deprecating’,return_train_score=’warn’)

    网格搜索参数说明:

    (1)estimator:选择使用的分类器,并且传入需要确定最佳的参数之外的其他参数。

    (2)param_grid:需要最优化的参数的取值,值为字典或者列表。

    (3)scoring=None:模型评价标准,默认为None。

    (4)n_jobs=1,n_jobs表示并行数,int为个数,-1表示与CPU核数一致,1为默认值。

    (5)iid=True,iid默认为True,当为True时,默认为各个样本fold概率分布一致,误差估计为所有样本之和,而不是各个fold的平均。

    (6)refit=True默认为True。在搜索参数结束后,用最佳参数结果再次拟合一遍全部数据集

    (7)cv=None,交叉验证参数,默认None,使用三折交叉验证。

    (8)verbose=0,scoring=None,verbose表示日志冗长度,0表示不输出训练过程,1表示偶尔输出,>1表示对每个子模型都输出。

    (9)pre_dispatch='2*n_jobs'表示指定总共发的并行任务数。

    4.网格搜索常用方法及属性:

    (1)grid.fit()表示运行网格搜索

    (2)grid.score()表示运行网格搜索后模型得分

    (3)grid_scores_表示给出不同参数情况下的评价结果

    (4)best_params_表示描述已取得最佳结果的参数的组合

    (5)best_score_表示提供优化过程期间观察到的最好评分

    5.利用决策树进行网格搜索的代码举例如图1所示,最终网格搜索的最优结果为max_depth=4。

    ● 附图 

    图1 网格搜索预测乳腺癌寻找最优参数

    ● 附图代码

    from sklearn.model_selection import GridSearchCV,KFold,train_test_split

    from sklearn.metrics import make_scorer , accuracy_score

    from sklearn.tree import DecisionTreeClassifier

    from sklearn.datasets import load_breast_cancer

    import warnings

    import pandas as pd

    from sklearn.neighbors import KNeighborsClassifier as KNN

    warnings.filterwarnings('ignore')

    data = load_breast_cancer()#load data

    #输出Python自带乳腺癌数据的维度

    print("Python自带乳腺癌数据的维度:",data.data.shape)

    X,y = data['data'] , data['target']

    #切分训练集、测试集数据

    X_train,X_test,y_train,y_test = train_test_split(X,y,train_size=0.8 , random_state=0)

    #决策树

    regressor = DecisionTreeClassifier(random_state=0)

    parameters = {'max_depth':range(1,6)}

    scorin_fnc = make_scorer(accuracy_score)

    kflod = KFold(n_splits=10)

    #网格搜索

    grid = GridSearchCV(regressor,parameters,scoring=scorin_fnc,cv=kflod)

    grid = grid.fit(X_train,y_train)

    reg = grid.best_estimator_

    #优化过程期间观察到的最好评分

    print('优化过程期间观察到的最好评分:%f'%grid.best_score_)

    for key in parameters.keys():

    #输出网格搜索最优结果

    print('最佳结果的参数:%s:%d'%(key,reg.get_params()[key]))

    ● 正确答案

    C

    欢迎大家转发,一起传播知识和正能量,帮助到更多人。期待大家提出宝贵改进建议,互相交流,收获更大。辛苦大家转发时注明出处(也是咱们公益编程交流群的入口网址),刘经纬老师共享知识相关文件下载地址为:http://liujingwei.cn

    展开全文
  • 内容概要¶如何使用K折交叉验证来搜索最优调节参数如何让搜索参数的流程更加高效如何一次性的搜索多个调节参数在进行真正的预测之前,如何对调节参数进行处理如何削减该过程的计算代价1. K折交叉验证回顾¶交叉验证...

    内容概要¶

    如何使用K折交叉验证来搜索最优调节参数

    如何让搜索参数的流程更加高效

    如何一次性的搜索多个调节参数

    在进行真正的预测之前,如何对调节参数进行处理

    如何削减该过程的计算代价

    1. K折交叉验证回顾¶

    交叉验证的过程

    选择K的值(一般是10),将数据集分成K等份

    使用其中的K-1份数据作为训练数据,另外一份数据作为测试数据,进行模型的训练

    使用一种度量测度来衡量模型的预测性能

    交叉验证的优点

    交叉验证通过降低模型在一次数据分割中性能表现上的方差来保证模型性能的稳定性

    交叉验证可以用于选择调节参数、比较模型性能差别、选择特征

    交叉验证的缺点

    交叉验证带来一定的计算代价,尤其是当数据集很大的时候,导致计算过程会变得很慢

    2. 使用GridSearchCV进行高效调参¶

    GridSearchCV根据你给定的模型自动进行交叉验证,通过调节每一个参数来跟踪评分结果,实际上,该过程代替了进行参数搜索时的for循环过程。

    from sklearn.datasets importload_irisfrom sklearn.neighbors importKNeighborsClassifierimportmatplotlib.pyplot as pltfrom sklearn.model_selection importGridSearchCV

    iris=load_iris()#create X (features) and y (response)

    X =iris.data

    y=iris.target#define the parameter values that should be searched

    k_range =[i for i in range(1, 31)]#create a parameter grid: map the parameter names to the values that should be searched#下面是构建parameter grid,其结构是key为参数名称,value是待搜索的数值列表的一个字典结构

    param_grid = dict(n_neighbors=k_range)

    knn= KNeighborsClassifier(n_neighbors=5)#instantiate the grid#这里GridSearchCV的参数形式和cross_val_score的形式差不多,其中param_grid是parameter grid所对应的参数#GridSearchCV中的n_jobs设置为-1时,可以实现并行计算(如果你的电脑支持的情况下)

    grid = GridSearchCV(knn, param_grid, cv=10, scoring='accuracy')#我们可以知道,这里的grid search针对每个参数进行了10次交叉验证,并且一共对30个参数进行相同过程的交叉验证

    grid.fit(X, y)#create a list of the mean scores only

    print(grid.best_estimator_)

    3. 同时对多个参数进行搜索¶

    这里我们使用knn的两个参数,分别是n_neighbors和weights,其中weights参数默认是uniform,该参数将所有数据看成等同的,而另一值是distance,它将近邻的数据赋予更高的权重,而较远的数据赋予较低权重。

    from sklearn.datasets importload_irisfrom sklearn.neighbors importKNeighborsClassifierimportmatplotlib.pyplot as pltfrom sklearn.model_selection importGridSearchCV

    iris=load_iris()#create X (features) and y (response)

    X =iris.data

    y=iris.target#define the parameter values that should be searched

    k_range =[i for i in range(1, 31)]

    weight_options=['uniform','distance']#create a parameter grid: map the parameter names to the values that should be searched#下面是构建parameter grid,其结构是key为参数名称,value是待搜索的数值列表的一个字典结构

    param_grid = dict(n_neighbors=k_range,weights=weight_options)

    knn= KNeighborsClassifier(n_neighbors=5)#instantiate the grid#这里GridSearchCV的参数形式和cross_val_score的形式差不多,其中param_grid是parameter grid所对应的参数#GridSearchCV中的n_jobs设置为-1时,可以实现并行计算(如果你的电脑支持的情况下)

    grid = GridSearchCV(knn, param_grid, cv=10, scoring='accuracy')#我们可以知道,这里的grid search针对每个参数进行了10次交叉验证,并且一共对30个参数进行相同过程的交叉验证

    grid.fit(X, y)#create a list of the mean scores only

    print(grid.best_estimator_)

    4. 使用最佳参数做出预测¶

    knn = KNeighborsClassifier(n_neighbors=13, weights='uniform')

    knn.fit(X, y)#make a prediction on out-of-sample data

    knn.predict([3, 5, 4, 2])

    5. 使用RandomizeSearchCV来降低计算代价¶

    RandomizeSearchCV用于解决多个参数的搜索过程中计算代价过高的问题

    RandomizeSearchCV搜索参数中的一个子集,这样你可以控制计算代价

    当你的调节参数是连续的,比如回归问题的正则化参数,有必要指定一个连续分布而不是可能值的列表,这样RandomizeSearchCV就可以执行更好的grid search。

    展开全文
  • 一种方法是使用Pipeline,SVC(kernel =’precomputed’)并将自定义内核函数包装为sklearn估计器(BaseEstimator和TransformerMixin的子类)).例如,sklearn包含custom kernel function chi2_...该函数采用参数gamma,...
  • 问题::怎么查看网格搜索中找到的最优的参数解答:代码:GS.best_params_ 执行结果就是最优参数组合Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,Y,test_size = 0.3,random_state=420) ##切分数据集std = ...
  • 网格搜索搜索的是参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个训练和比较的过程。本节介绍三种网格搜索方法:简单网格...
  • 建模的整个过程中最耗时的部分是特征工程(含变量分析),其次可能是调参,所以今天来通过代码实战介绍调参的相关方法:网格搜索、贝叶斯调参。 工作中最常用的训练集测试集划分方法主要是随机比例分割和(分层)...
  • 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 优化的相关的知识内容可以参考 ...网格搜索GridSearchCV GridSearchCV用于系统地遍历多种参数组合,通过交叉验证确定最佳效果参数。 classskle...
  • Python 随机森林6大参数调优(学习曲线与网格搜索) - 爱码网
  • scikit-learn中超参数搜索网格搜索(GridSearchCV)       &...
  • 本文介绍了如何使用网格搜索寻找网络的最佳超参数配置。 文章目录1. 准备数据集2. 问题建模2.1 训练集测试集拆分2.2...常用的方法是穷尽网格搜索(Exhaustive Grid Search)和随机参数优化(Randomized Parameter Opti
  • 它们跟训练过程中学习的参数(权重)是不一样的,通常是手工设定几个取值,然后通过不断试错调整,对一系列穷举出来的参数组合一通枚举(叫做网格搜索)。 【例】 ① SVR 需要事先决定核心函数( kernel function )...
  • uda一个小题目吧,可以看一下,thank you!... 然后,我们将使用网格搜索为这个模型找到更好的参数,以减少过拟合。 首先,导入: %matplotlib inline import pandas as pd import numpy as np import mat...
  • 使用网格搜索优化模型参数

    千次阅读 2019-10-04 12:19:30
    ############################# 使用网格搜索优化模型参数 ####################################### #导入套索回归模型 from sklearn.linear_model import Lasso #导入数据集拆分工具 from skle...
  • 此'feature_selection__k': list(range(1, len(feature_importances) + 1))代码在什么意思:param_grid = [{'preparation__num__imputer__strategy': ['mean', 'median', 'most_frequent'],'feature_selection__k': ...
  • 参数优化网格搜索

    千次阅读 2020-06-07 21:20:15
    使用Python完成网格搜索法在机器学习和深度学习的小案例!
  • 他们是: AdaBoost 集成算法 AdaBoost API 用于分类的 AdaBoost 用于回归的 AdaBoost AdaBoost 超参数 探索树的数量 探索弱学习 探索学习率 探索替代算法 网格搜索 AdaBoost 超参数 AdaBoost 集成算法 Boosting 是...
  • 有人可以帮助我从网格搜索中提取性能最佳的模型参数吗? 由于某种原因,它是空白的字典。from pyspark.ml.tuning import ParamGridBuilder, TrainValidationSplit, CrossValidatorfrom pyspark.ml.evaluation import...
  • 在本教程中,我们将讨论一种非常强大的优化(或自动化)算法,即网格搜索算法。它最常用于机器学习模型中的超参数调整。我们将学习如何使用Python来实现它,以及如何将其应用到实际应用程序中,以了解它如何帮助我们...
  • 【视频】支持向量机SVM、支持向量回归SVR和R语言网格搜索参数优化实例 支持向量机SVM、支持向量回归SVR和R语言网格搜索参数优化实例 ,时长07:24 一个简单的数据集 首先,我们将使用这个简单的数据集。...
  • 虽然早期的 AutoML 框架专注于优化传统 ML 管道及其超参数,但 AutoML 的另一个趋势是专注于神经架构搜索。 为了将这两个领域的精华结合在一起,我们开发了Auto-PyTorch ,它联合稳健地优化网络架构和训练超参数,...
  • 原文:How to Grid Search Hyperparameters for Deep Learning Models in Python With Keras ...超参数优化是深度学习中的重要组成部分。其原因在于,神经网络是公认的难以配置,而又有很多参数需要设置。最重要的是...
  • Python实现人工神经网络回归模型(MLPRegressor算法)并基于网格搜索(GridSearchCV)进行优化项目实战
  • #网格搜索法 寻找最优参数 C_Arr=[1,10,100,200,400,600,800,1000] gamma=_Arr=[0.001,0.01,0.1] Pre_MAPE=100 for C_out in C_Arr: for gamma_out in gamma_Arr: #Training svr_rbf=SVR(kernel='rbf',C=C_out,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,109
精华内容 4,043
关键字:

python网格搜索优化参数

友情链接: C8051F340_USB.rar