冬雨财经 发表于 2025-1-4 23:27:06

【机器学习】由浅入深学习网格搜刮

一、网格搜刮的概念和意义

  在机器学习的广阔范畴中,模型的性能每每取决于超参数的合理设置。超参数是在模型练习前需要手动设定的参数,如决议树的最大深度、随机丛林的树的数目、支持向量机的惩罚参数等,它们不像模型内部的权重参数那样可以通过练习数据主动学习得到(比如线性模型中,                                    y                         =                                 θ                            0                                  +                                 θ                            1                                          X                            1                                  +                                 θ                            2                                          X                            2                                  +                         .                         .                         .                         +                                 θ                            n                                          X                            n                                       y = \theta_0+\theta_1X_1+\theta_2X_2+...+\theta_nX_n                  y=θ0​+θ1​X1​+θ2​X2​+...+θn​Xn​,其中,各个向量的权重参数[                                             θ                            0                                  ,                                 θ                            1                                  ,                                 θ                            2                                  ,                         .                         .                         .                         ,                                 θ                            n                                       \theta_0, \theta_1, \theta_2,..., \theta_n                  θ0​,θ1​,θ2​,...,θn​] 是由模型不断调整,以求得丧失函数的最小值而得到的,这里的丧失函数可以理解为猜测值与观测值之间的差值,线性模型常用的丧失函数比如有MAE绝对误差,MSE均方误差,R2决定系数等),而是控制着模型的学习过程和复杂度,其取值的不同会对模型的性能产生显著影响。
(注:关于参数与超参数,请参考:https://blog.csdn.net/qlkaicx/article/details/134767111 @小桥流水—人工智能)
  以支持向量机(SVM)为例,不同的惩罚参数 C 和核函数参数(如 gamma)的组合,会使模型在相同的数据集上表现出截然不同的性能。当 C 取值较小时,模型对错误分类的容忍度较高,大概会导致欠拟合;而当 C 取值较大时,模型会只管避免错误分类,但大概会出现过拟合征象。核函数参数的变革也会影响模型对数据的拟合本领和泛化性能。
  网格搜刮(Grid Search)就是一种通过“穷举式”地遍历给定超参数组合,以找到模型最佳超参数设置的方法。它通过在预定义的超参数空间中进行穷举搜刮,评估每个参数组合的性能,从而选择出最优的超参数组合,就像在一张由不同超参数值构成的 “网格” 上,逐个 “格子” 进行搜刮,不放过任何一种大概的组合。
  与手动调参相比,网格搜刮具有显着的优势。手动调参需要开辟者不断尝试不同的超参数值,这种方式不但效率低下,而且非常依赖开辟者对模型的认识水平以及开辟履历,还很难包管找到最优的参数组合,由于超参数构成的参数组合每每非常多,人们大概需要花费大量时间精力却只能尝试其中的一小部分。而网格搜刮能够主动化地对所有给定的超参数组合进行尝试和评估,大大进步了找到最优参数的大概性,同时节省了大量的时间和精力,是模型调参的有力工具。
二、网格搜刮的参数、属性和方法

2.1 网格搜刮 Grid Search 的参数



[*]estimator:要优化的模型对象,比方 sklearn 中的 RandomForestClassifier、SVC等模型。这是网格搜刮的焦点,确定了针对哪个模型进行超参数调优。
[*]param_grid:需要最优化的参数的取值范围,值为字典大概列表。字典的键是超参数的名称,值是该超参数的候选值列表。比方,param_grid = {‘C’: , ‘kernel’: [‘linear’,‘rbf’]},表示要对支持向量机的 C 和 kernel 这两个超参数进行调优,C 的取值有 0.1、1、10 三种,kernel的取值有 linear 和 rbf 两种,这样会产生 3 * 2 = 6 种超参数组合进行搜刮。
[*]scoring:模型评价标准,默认为None时,使用estimator的默认误差估计函数。根据estimator所选的模型不同,scoring的评价准则也不尽相同。比方,假如estimator是分类模型,则scoring可以设置为 accuracy(准确率)、f1(F1值)、roc_auc(ROC 曲线下面积)等;假如estimator是回归模型,则scoring可以设置为 neg_mean_absolute_error(负平均绝对误差)、neg_mean_squared_error(负均方误差)、r2(R方决定系数)等。
  总之,scoring用于衡量模型在每个超参数组合下的性能表现,以便选择最优的超参数组合;具体的scoring取值请参考 https://blog.csdn.net/MR_Trustin/article/details/96614446 这篇Blog。@耳东鹏
[*]n_jobs:并行运行的作业数。默认为 1,若值为 -1,则用所有的 CPU 进行运算,这样可以加快搜刮速度,特别是在超参数组合较多的情况下,通过并行盘算能显著收缩搜刮时间。若值为1,则不进行并行运算,这种方式方便调试。
[*]refit:是否在找到最佳参数后在整个数据集上重新拟合估计器,默认值为 True。假如设置为 True,则会使用最佳的超参数组合在整个练习数据集上重新练习模型,得到终极的优化模型;假如设置为 False,则只会返回最佳的超参数组合,而不会重新拟合模型。
[*]cv:交叉验证的折数,默认值为 5。用于在搜刮过程中对每个超参数组合进行交叉验证,以更准确地评估模型的性能,避免过拟合和欠拟合的影响,得到更可靠的模型性能评估结果。比方 cv = 5 表示采用 5 折交叉验证,即将数据集分成 5 份,每次用其中 4 份作为练习集,1 份作为验证集,轮番进行 5 次练习和验证,末了取平均性能作为该超参数组合的评估结果。
关于交叉验证,请参看我的另一篇Blog:【机器学习】交叉验证:数据世界的“多面侦探”
[*]verbose:网格搜刮结果的输出详细水平,取值范围是,数值越大输出内容越详细,比方设置为 3 时,会输出更多关于网格搜刮过程的信息,如每次迭代的参数组合、练习时间、评估得分等,有助于相识搜刮的详细进展情况,方便调试和监控搜刮过程,但大概会产生较多的输出信息。
2.3 网格搜刮 Grid Search 的重要属性



[*]best_estimator_:返回在交叉验证中选择的最佳估计器,即使用最佳超参数组合重新拟合后的模型对象。可以直接使用这个模型进行猜测等操作,比方 best_model = grid_search.best_estimator_,然后使用 best_model.predict(X_test) 就可以对测试集进行猜测。
[*]best_params_:返回在交叉验证中选择的最佳参数组合,是一个字典情势,包罗了每个超参数的最优取值,比方 {‘C’: 1, ‘kernel’: ‘rbf’},方便查看和记录最优的超参数设置,以便在后续的模型练习和应用中直接使用这些参数。
[*]best_score_:返回在交叉验证中选择的最佳评分,即最佳超参数组合对应的交叉验证平均得分,比方 0.95(假设以准确率作为评估指标),这个得分可以直观地反映出最佳模型的性能表现,用于比力不同模型或不同参数设置下的性能优劣。
[*]cv_results_:返回一个字典,其中包罗网格搜刮期间盘算出的所有性能指标和参数设置的详细信息,如每个超参数组合的练习时间、交叉验证各折的得分、平均得分、标准差等。通太过析这个字典,可以深入相识每个超参数组合的表现情况,比方查看哪些参数组合在练习时间和性能之间取得了较好的平衡,为进一步优化模型提供更多的信息和参考。
2.4 网格搜刮 Grid Search 的重要方法



[*]fit(X, y):用于在给定的数据集 (X, y) 上实验网格搜刮过程。X 是特征矩阵,y 是目标向量。在实验 fit()方法时,网格搜刮会根据 param_grid 中定义的超参数组合,对每个组合进行模型练习和交叉验证,记录每个组合的性能指标,终极确定最佳的超参数组合,并更新 best_estimator_、best_params_ 和 best_score_ 等属性。比方 grid_search.fit(X_train, y_train),其中 X_train 和 y_train 是练习数据集,通过这个方法启动网格搜刮的超参数调优过程。
[*]predict(X):在使用 fit 方法找到最佳模型后,可以使用 predict 方法对新的数据 X 进行猜测。它实际上是调用 best_estimator_ 的 predict() 方法,例: y_pred = grid_search.predict(X_test),其中 X_test 是测试数据集,y_pred 是猜测结果向量,通过这个方法可以得到模型对测试数据的猜测输出,用于评估模型在实际应用中的性能。
[*]score(X, y):用于评估最佳模型在给定数据集 (X, y) 上的性能得分,返回的得分与 best_score_ 所使用的评估指标一致。例: accuracy = grid_search.score(X_test, y_test),其中 X_test 和 y_test 是测试数据集,accuracy 是模型在测试集上的准确率得分,通过这个方法可以快速获取最佳模型在测试数据上的性能评估结果,方便与其他模型或参数设置进行比力。
小结

重要参数重要属性或函数estimator: 估计器对象。
param_grid:参数组合的字典,参数名称(字符串)作为键,要尝试的参数设置列表作为值的字典。
scoring:用于定义评估交叉验证模型在测试集上性能的策略。如accuracy、f1、recall、r2、neg_mean_squared_error等。
cv:用于确定交叉验证的拆分策略。通过指定整数作为cv参数,可以使用内置的KFold或StratifiedKFold进行拆分,默认情况下使用5折交叉验证。
verbose:控制输出的详细水平,数值越高,输出的信息越多。包括1、2、3,共3个等级。cv_results_:交叉验证过程的详细结果信息。它包罗了每个参数组合的评分、拟合时间、得分时间和其他相关信息。
best_estimator_:通过搜刮选择的最佳估计器(estimator)。
best_score_:通过搜刮选择的最佳估计器在交叉验证过程中的平均得分。
best_params_:通过搜刮选择的最佳参数组合。
scorer_:表示用于评估模型性能的评分函数,如精度、准确度、F1值等,一般与参数scoring相对应。
三、实战演练:从简朴模型入手

3.1 数据集准备与模型搭建

  在机器学习的实战演练中,一个好的开始是成功的一半。我们不妨以经典的鸢尾花数据集为例,开启这次网格搜刮的实践之旅。鸢尾花数据集在sklearn库中可以直接获取,它内置了鸢尾花的各类特征数据以及对应的品种分类信息,非常适适用来做入门级的模型实验。
  起首是数据加载,借助sklearn.datasets模块中的load_iris函数,轻松就能把鸢尾花数据集读入到我们的程序里,代码就一行:iris = load_iris() 。这时间,iris对象包罗了数据集的所有信息,特征矩阵和目标向量都在其中。
  接下来就是划分练习集与测试集,为后续评估模型性能做准备。使用train_test_split函数,它能随机地把数据集按照设定的比例拆分,通常我们会预留大概 30% 的数据作为测试集,剩下的 70% 看成练习集。示例代码如下:
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import accuracy_score

# 导入鸢尾花数据集
# load_iris() 函数会加载鸢尾花数据集,返回一个类似字典的对象,包含数据和目标
# 其中load_iris().data 属性存储特征矩阵,load_iris().target 属性存储目标变量
X = load_iris().data
y = load_iris().target

# 将数据集拆分为训练集和测试集
# train_test_split 函数用于将数据集按一定比例划分为训练集和测试集
# X 是特征矩阵,y 是目标变量
# random_state 用于保证结果可重复性,每次运行代码时得到相同的划分结果
# test_size 表示测试集所占的比例,这里设置为 0.8,即 80% 作为测试集
X_train, X_test, y_train, y_test = train_test_split(X,
                                                    y,
                                                    random_state=42,
                                                    test_size=0.8)

# 创建一个 K 近邻分类器对象 knn1
# n_neighbors=6 表示使用最近的 6 个邻居进行分类决策
# weights='uniform' 表示对邻居的权重分配是均匀的,即每个邻居的权重相同
# p=2 表示使用欧几里得距离作为距离度量
knn1 = KNeighborsClassifier(n_neighbors=6, weights='uniform', p=2)

# 使用训练集 X_train 和 y_train 对 knn1 模型进行训练
# fit 方法将训练集的特征矩阵 X_train 和目标变量 y_train 传递给 knn1 模型,使其学习数据的模式
knn1.fit(X_train, y_train)

# 使用 knn1 模型对测试集 X_test 进行预测,得到预测结果
# knn1.predict(X_test) 会返回对 X_test 的预测类别
# 然后使用 accuracy_score 函数将预测结果和真实的测试集目标变量 y_test 进行比较,计算预测的准确率
print(accuracy_score(knn1.predict(X_test), y_test))

# 这个数值代表了knn1这个分类模型的实例在测试集上的得分
0.9166666666666666
  这里X_train、y_train 分别是练习集的特征和对应的标签,而X_test、y_test 则是测试集的部分。随机数种子random_state设为 42,是为了包管每次运行代码拆分结果的一致性,方便调试和对比。
有了数据底子,我们选用简朴的 K 近邻模型,它原理直观、易于理解,很适合新手入门。在sklearn.neighbors模块中引入KNeighborsClassifier类,并进行初始化:knn1 = KNeighborsClassifier(n_neighbors=6, weights=‘uniform’, p=2)。
  然后,我们按照传统的做法,让KNN分类器模型的实例knn1去拟合练习集的数据,并在测试集上得到了约为 91.67% 的猜测准确率,这个模型的表现还是比力不错的。
  那么,问题来了,KNN分类模型在Iris数据集上的表现就到此为止了吗?KNN分类模型的评分能否再进步一些?那么,这个时间就需要使用到                                         G                            r                            i                            d                            S                            e                            a                            r                            c                            h                            C                            V                                  GridSearchCV                     GridSearchCV 网格搜刮了
3.2 定义参数网格与实验搜刮

  以上准备工作完成后,就到了网格搜刮的关键环节 —— 定义参数网格与实验搜刮。对于 K 近邻模型而言,邻人数目                                              n                            n                                  e                         i                         g                         h                         b                         o                         r                         s                              n_neighbors                  nn​eighbors 以及权重类型                                    w                         e                         i                         g                         h                         t                         s                              weights                  weights 这两个超参数对模型性能有着关键影响,除此之外,我们可以考虑得更复杂一些:参数                                    p                              p                  p 的取值范围。
(注:p 为样本点之间的权重盘算方式,其中,p = 1代表曼哈顿距离(Manhattan Distance),p = 2代表欧几里得距离(Euclidean Distance),p = 3、4 及更高整数:闵可夫斯基距离(Minkowski Distance),具体盘算方式请参考机器学习中的距离盘算公式。)
  我们要针对它们构建参数字典,在 Python 里可以这么写:
##(1)定义参数空间
# param_grid 是一个字典,包含了要搜索的超参数及其可能的取值
# 'n_neighbors' 是 KNN 模型中的邻居数量,这里尝试 2 到 9 的不同取值
# 'weights' 表示 KNN 中预测时邻居权重的计算方式,'uniform' 表示所有邻居权重相同,'distance' 表示根据距离加权
# 'p' 表示距离度量的类型,如 1 表示曼哈顿距离,2 表示欧几里得距离,3 和 4 表示不同阶的闵可夫斯基距离
param_grid = {
    'n_neighbors': ,
    'weights': ['uniform', 'distance'],
    'p':
}
  这个字典表明,我们要测试n_neighbors取值为 2, 3, 4, 5, 6, 7, 8, 9,weights取值为uniform(等权重)和distance(距离加权),以及样本点之间的距离盘算方式p的取值为1, 2, 3, 4时的不同组合,如此一共会产生 8 × 2 × 4 = 64 种超参数组合。
  接下来使用sklearn.model_selection中的GridSearchCV函数来实验搜刮,示例代码如下:
##(2)创建一个新的kNN分类模型的估计器对象
knn2 = KNeighborsClassifier()

##(3)创建 GridSearchCV 的实例对象 gs
# estimator=knn2 表示使用之前创建的 KNN 分类器作为估计器
# param_grid=param_grid 表示使用之前定义的参数空间进行搜索
# scoring='accuracy' 表示使用准确率作为模型性能的评估指标,即在搜索过程中根据准确率来选择最优参数组合
# cv=4 表示使用 4 折交叉验证,将数据分成 4 份,其中 3 份用于训练,1 份用于测试,重复 4 次
# verbose=3 表示输出详细的日志信息,可帮助用户了解搜索过程的进展
gs = GridSearchCV(estimator=knn2,
                param_grid=param_grid,
                scoring='accuracy',
                cv=4,
                verbose=3)

##(4)拟合数据
# 使用 GridSearchCV 对象 gs 对训练数据 X_train 和 y_train 进行拟合
# 在此过程中,GridSearchCV 会遍历 param_grid 中的所有参数组合
# 对每个组合进行 KNN 模型的训练和 4 折交叉验证,并根据准确率评估性能
gs.fit(X_train, y_train)

# 下面是数据拟合的过程,不算入代码,详情略
Fitting 4 folds for each of 64 candidates, totalling 256 fits
END n_neighbors=2, p=1, weights=uniform;, score=0.875 total time=   0.0s
END n_neighbors=2, p=1, weights=uniform;, score=0.875 total time=   0.0s
END n_neighbors=2, p=1, weights=uniform;, score=0.857 total time=   0.0s
END n_neighbors=2, p=1, weights=uniform;, score=1.000 total time=   0.0s
...
END n_neighbors=9, p=4, weights=distance;, score=0.875 total time=   0.0s
END n_neighbors=9, p=4, weights=distance;, score=1.000 total time=   0.0s
END n_neighbors=9, p=4, weights=distance;, score=0.857 total time=   0.0s
END n_neighbors=9, p=4, weights=distance;, score=1.000 total time=   0.0s
  这里的estimator就是前面初始化的 K 近邻模型knn2;param_grid就是我们刚定义好的参数字典;cv = 4代表采用 4 折交叉验证,把练习集分成 4 份,轮番用其中 3 份练习、1 份验证,取平均性能评估模型,能让评估结果更妥当;scoring设为accuracy,意味着用准确率作为评估模型性能的指标。实验fit方法后,网格搜刮就开始在不同超参数组合上练习模型,并评估性能。
3.3 结果分析

  网格搜刮竣事后,会得到一系列的验证结果,起首就是最佳参数组合与最高得分。通过grid_search.best_params_属性,能直接获取到让模型表现最优的参数设置。而grid_search.best_score_则给出了对应这个最佳组合的交叉验证平均得分,它直观反映出模型在练习集上的最佳性能。末了,要用最佳参数构建的终极模型并评估。借助gs.best_estimator_可以拿到用最佳参数拟合好的模型,然后在测试集上进行评估。
示例代码如下:
##(5)输出最佳最佳估计器与最佳参数组合
print(gs.best_estimator_)
# 下面是输出结果,代表最佳的估计器
KNeighborsClassifier(n_neighbors=7)

# 输出网格搜索得到的最佳参数组合,存储在 gs.best_params_ 中
# 这将是在不同参数组合中使模型在交叉验证时达到最高准确率的参数组合
print(gs.best_params_)

# 下面是输出结果
{'n_neighbors': 7, 'p': 2, 'weights': 'uniform'}
这个参数组合表明白在交叉验证中取得了最高准确率的参数组合。
##(6)最佳模型评估
# 使用最佳估计器对测试数据 X_test 进行预测
# gs.best_estimator_ 是 GridSearchCV 找到的最佳参数组合下的 KNN 估计器
# gs.best_estimator_.predict(X_test) 会调用该估计器对 X_test 进行预测,得到预测结果
# accuracy_score 函数用于计算预测结果与真实标签 y_test 的准确率
# accuracy_score(gs.predict(X_test), y_test) 等价于:
# accuracy_score(gs.best_estimator_.predict(X_test), y_test) 使用最佳估计器进行预测并计算准确率
print(accuracy_score(gs.best_estimator_.predict(X_test), y_test))

# 下面是输出结果
0.9416666666666667
  根据评估结果,在使用了网格搜刮之后,KNN分类器在Iris数据集上的表现,要比使用传统方法创建的模型效果好一些。
四、进阶探索:复杂场景中的应用

4.1 多参数调优挑战

  在机器学习的广袤天地里,模型的表现与超参数的设置痛痒相关。随着模型复杂度的不断攀升,超参数的数目也日益增多。以常见的神经网络为例,我们面临着层数、节点数、学习率等诸多超参数的调优难题。就拿神经网络的层数来说,增加层数可以让模型学习到更高级、更抽象的特征,但过多的层数极易引发梯度消散或梯度爆炸的问题,使得模型难以练习收敛。同时,每层的节点数也需审慎考量,节点数过多会造成盘算资源的极大浪费,还大概导致过拟合;而节点数过少,模型又无法充分捕获数据的复杂模式,出现欠拟合征象。
  学习率更是一个关键的超参数,它掌控着模型参数更新的步幅巨细。若学习率设置得过大,模型在练习时会像脱缰的野马,参数更新幅度过大,导致无法稳定收敛;反之,学习率过小,模型的练习历程则会如蜗牛爬行,耗时漫长。当这些超参数相互组合时,其组合数目会出现爆炸式增长。假设每个超参数仅有少数几个候选值,它们交错而成的参数组合数目也会多得超乎想象,网格搜刮需要逐一尝试这些组合,盘算本钱自然会剧增,耗时也会变得极为漫长,这无疑给超参数调优带来了巨大的挑战。
4.2 多模型超参数搜刮

  在上文的案例中,我们只展示了单个算法模型的网格搜刮,但是在实际的应用或复杂的机器学习项目中,大概会涉及多个不同的模型,每个模型都有本身的超参数需要调整。网格搜刮可以用于同时优化多个模型的超参数。
# 定义多个模型及其超参数空间
models = [
    {'name': 'RandomForest', 'model': RandomForestClassifier(), 'params': {'n_estimators': , 'max_depth': }},
    {'name': 'SVC', 'model': SVC(), 'params': {'C': , 'kernel': ['linear', 'rbf']}},
    {'name': 'KNN', 'model': KNeighborsClassifier(), 'params': {'n_neighbors': , 'weights': ['uniform', 'distance']}}
]
  在实际应用中,我们可以通过定义多个模型及其超参数空间,观察多种算法模型在数据集的其中一部分子数据集上的表现,从而选择中其中最具潜力的模型,为未来的开辟指明研究方向。
4.3 联合管道(Pipeline)来搜刮最佳的数据预处理和模型组合

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.decomposition import PCA


# 定义管道和参数空间
pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('pca', PCA()),
    ('classifier', RandomForestClassifier())
])

param_grid = {
    'scaler': ,
    'pca__n_components': ,
    'classifier__n_estimators': ,
    'classifier__max_depth':
}
  Pipeline 是一个数据处理和建模的流程管理器,可以资助我们进行主动化流水线数据处理。在这个案例中,先辈行数据标准化或归一化,再进行主身分分析,末了使用随机丛林进行分类。其中,param_grid 包罗了不同的预处理步调和模型的超参数组合。
gs = GridSearchCV(estimator=pipe, param_grid=param_grid, cv=5, scoring='accuracy')
gs.fit(X_train, y_train)
print(gs.best_params_)
print(gs.best_score_)
  接下来,使用gs.fit(X_train, y_train)方法将管道和超参数空间联合,使用 GridSearchCV 进行网格搜刮。搜刮范围包括不同的缩放器(StandardScaler 标准化和 MinMaxScaler归一化)、不同的 PCA 主身分数()和不同的随机丛林超参数(‘classifier__n_estimators’: ,
‘classifier__max_depth’: )。
  所以,网格搜刮在复杂场景中的应用可以资助我们在多个模型、多种预处理步调和不同的数据条件下找到最佳的模型和超参数组合,从而进步机器学习体系的性能。通过合理使用管道、部分数据、并行化和与其他优化技术的联合,可以更有效地处理复杂的优化任务。
五、优化拓展:让网格搜刮更高效

5.1 参数范围的合理设定

  在实际应用中,合理设置参数搜刮范围至关重要。若范围过大,搜刮时间会显著增加;若范围过小,又大概遗漏最优解。
  对于决议树模型的最大深度参数,可先依据履历法则和文献资料,将其范围设定在一个合理区间,比如 3 到 15 层之间。还可通过初步试验,观察模型在不同深度下的性能变革趋势,进一步缩小范围。假设在初步试验中发现,当深度超过 10 层后,模型性能提拔不显着且有过拟合迹象,那么就可以将搜刮范围调整为 3 到 10 层,这样能有效减少不须要的搜刮开销,进步搜刮效率。
5.2 并行盘算加速搜刮

  网格搜刮的每个参数组合的练习和评估过程是相互独立的,这使得我们可以使用多核处理器或集群资源进行并行盘算。在sklearn的GridSearchCV中,通过设置n_jobs参数来实现并行盘算。当n_jobs=-1时,会使用所有可用的CPU焦点进行并行运算。
  比方,在一个拥有 8 核CPU的盘算机上,对一个包罗大量超参数组合的模型进行网格搜刮时,将n_jobs设置为-1,与n_jobs=1(不使用并行盘算)相比,搜刮时间大概会收缩数倍以致更多。具体的加速效果取决于模型的复杂度、超参数组合的数目以及盘算资源的设置等因素。并行盘算能够充分发挥硬件资源的优势,显著提拔网格搜刮的效率,让我们在更短的时间内找到最优的超参数组合,加速模型的开辟和优化过程。
六、总结猜测:回首与未来趋势

  回首网格搜刮的学习之旅,我们从其底子概念出发,深入探讨了参数、属性和方法,通过简朴模型的实战演练把握了基本操作,又在复杂场景中应对了多参数调优的挑战,并联合交叉验证提拔了模型精度,还学会了通过合理设定参数范围和使用并行盘算来优化网格搜刮的效率。
  网格搜刮在机器学习模型开辟流程中占据着关键的衔接职位,它承接数据预处理与模型练习,通过优化超参数为模型性能提拔奠定底子,又为后续的模型评估与应用提供了更优的模型选择,是提拔模型性能的重要一环。
  猜测未来,网格搜刮将与主动化机器学习范畴的其他技术更加紧密地联合。比方,与贝叶斯优化相联合,使用贝叶斯优化在搜刮过程中对超参数空间的智能探索本领,联合网格搜刮的全面性,能够在更短的时间内找到更优的超参数组合,进一步进步模型调参的效率和效果,为解决复杂的实际问题提供更强大的技术支持。
  机器学习的范畴广阔无垠,网格搜刮只是其中的一个重要工具。希望大家继承深入学习和探索,不断尝试新的方法和技术,在机器学习的道路上稳步前行,挖掘更多的知识宝藏,为解决实际问题贡献本身的聪明和睦力。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【机器学习】由浅入深学习网格搜刮