机器学习模型调参

这篇具有很好参考价值的文章主要介绍了机器学习模型调参。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

机器学习模型调参




调参

1. 调参的目标

  • 调参就是对模型的参数进行调整,以找到是模型性能最优的参数。调参的目标就是达到整体模型的偏差和方差的大和谐!
  • 参数可分为两类:过程影响类参数和子模型影响类参数。
  • 具体来说,过程影响类参数就是在子模型不变的前提下,调整“子模型数(n_estimators)”、“学习率(learning_rage)”等参数,改变训练过程,从而提高整体模型的性能。子模型影响类参数就是调整“最大树深度(max_depth)”、“分裂条件(criterion)”等参数,改变子模型的性能。 从而提高整体模型的性能。bagging 的训练过程旨在降低方差,而 boosting 的训练过程旨在降低偏差,过程影响类的参数能够引起整体模型性能的大幅度变化。

2. 参数对整体模型性能的影响

* 降低复杂度,对复杂度影响巨大的参数挑选出来,研究他们的单调性,然后专注调整那些最大限度能让复杂度降低的参数,对于那些不单调的参数或者反而让复杂度升高的参数,视情况而定,大多数时候甚至可以退避。(表中从上往下,建议调参的程度逐渐减小)。

3. 网格搜索

网格搜索(Grid Search)是一种穷举搜索的调参手段。在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组中找最大值。以有两个参数的模型为例,参数 a 有3种可能,参数 b 有4种可能,把所有可能性列出来,可以表示成一个 3*4 的表格,其中每个单元就是一个网格,循环过程就像是在网格中遍历、搜索,因此得名网格搜索。
下面是一个简单的网格搜索示例,应用 iris 数据集,对 SVC 模型参数做一次网格搜索调参,这一过程如下表所示:文章来源地址https://www.toymoban.com/news/detail-412660.html

C=0.001 C=0.01 C=0.1 C=1 C=10
gamma=0.001 SVC(C=0.001, gamma=0.001) SVC(C=0.01, gamma=0.001) SVC(C=0.1, gamma=0.001) SVC(C=1, gamma=0.001) SVC(C=10, gamma=0.001)
gamma=0.01 SVC(C=0.001, gamma=0.01) SVC(C=0.01, gamma=0.01) SVC(C=0.1, gamma=0.01) SVC(C=1, gamma=0.01) SVC(C=10, gamma=0.01)
gamma=0.1 SVC(C=0.001, gamma=0.1) SVC(C=0.01, gamma=0.1) SVC(C=0.1, gamma=0.1) SVC(C=1, gamma=0.1) SVC(C=10, gamma=0.1)
gamma=1 SVC(C=0.001, gamma=1) SVC(C=0.01, gamma=1) SVC(C=0.1, gamma=1) SVC(C=1, gamma=1) SVC(C=10, gamma=1)
gamma=10 SVC(C=0.001, gamma=10) SVC(C=0.01, gamma=10) SVC(C=0.1, gamma=10) SVC(C=1, gamma=10) SVC(C=10, gamma=10)
gamma=100 SVC(C=0.001, gamma=100) SVC(C=0.01, gamma=100) SVC(C=0.1, gamma=100) SVC(C=1, gamma=100) SVC(C=10, gamma=100)
  • 具体的代码和调参结果如下:
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, stratify=iris.target, random_state=0)  # stratify=y 是根据 y 值对训练和数据集各类别进行训练数据和测试数据等比划分,避免出现训练集和测试集种某种类别失衡
print(f"Size of training set:{X_train.shape[0]}\nSize of testing set:{X_test.shape[0]}")

# >>>网格搜索开始>>>
best_score = 0
for gamma in [0.001, 0.01, 0.1, 1, 10, 100]:
	for C in [0.001, 0.01, 0.1, 1, 10]:
		svm = SVC(gamma=gamma, C=C)  # 对于每种参数可能的组合,都进行一次训练
		svm.fit(X_train, y_train)
		score = svm.score(X_test, y_test)

		if score > best_score:  # 找到表现最好的参数
			best_score = score
			best_parameters = {'gamma': gamma, 'C': C}
# <<<网格搜索结束<<<

print("Best score: {:.2f}".format(best_score))
print("Best parameters: {}".format(best_parameters))

"""
Size of training set: 112
Size of testing set: 38
Best score: 0.97
Best parameters: {'gamma': 0.001', 'C': 100}
"""

4. 模型超参空间及调参

1. 穷举网络搜索
  • 使用数据训练随机森林模型,采用网格搜索方法调参,代码如下:
from sklearn.model_selection import GridSearchCV  # 导入网格搜索包
from sklearn.model_selection import train_test_split  # 导入数据集划分包
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_iris

# 切分数据,训练数据为80%,验证数据为20%
iris = load_iris()
train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, test_size=0.2, stratify=iris.target, random_state=0)

randomForestRegressor = RandomForestRegressor()
parameters = {'n_estimators': [50, 100, 200], 'max_depth': [1, 2, 3]}

clf = GridSearchCV(randomForestRegressor, parameters, cv=5)
clf.fit(train_data, train_target)
score_test = mean_squared_error(test_target, clf.predict(test_data))

print("Best parameters found by grid search are:", clf.best_params_)
print("RandomForestRegressor GridSearchCV test MSE: ", score_test)

"""
Best parameters found by grid search are: {'max_depth': 2, 'n_estimators': 100}
RandomForestRegressor GridSearchCV test MSE:  0.01656100655431517
"""
2. 随机参数优化
  • 使用数据训练随机森林模型,采用随机参数优化方法调参,代码如下:
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import train_test_split  # 导入数据集划分包
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error

# 切分数据,训练数据为80%,验证数据为20%
train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)

randomForestRegressor = RandomForestRegressor()
parameters = {'n_estimators': [50, 100, 200, 300], 'max_depth': [1, 2, 3, 4, 5]}

clf = RandomizedSearchCV(randomForestRegressor, parameters, cv=5, n_iter=10, random_state=42)  # n_iter=10 表示随即搜索10次,参数是随机组合的。
clf.fit(train_data, train_target)
score_test = mean_squared_error(test_target, clf.predict(test_data))

print("Best parameters found by grid search are:", clf.best_params_)
print("RandomForestRegressor RandomizedSearchCV test MSE: ", score_test)

"""
Best parameters found by grid search are: {'n_estimators': 100, 'max_depth': 2}
RandomForestRegressor RandomizedSearchCV test MSE:  0.017649606213520908
"""

LGB 调参

  • 使用数据训练 LGB 模型,采用网格搜索方法调参,代码如下:
import lightgbm as lgb
from sklearn.datasets import load_iris
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split

# 切分数据,训练数据为80%,验证数据为20%
iris = load_iris()
train_data, test_data, train_target, test_target = train_test_split(iris.data, iris.target, stratify=iris.target, random_state=20)

clf = lgb.LGBMRegressor(num_leaves=31)
parameters = {'learning_rate': [0.01, 0.1, 1], 'n_estimators': [20, 40]}

clf = GridSearchCV(clf, parameters, cv=5)
clf.fit(train_data, train_target)
score_test = mean_squared_error(test_target, clf.predict(test_data))

print('Best parameters found by grid search are: ', clf.best_params_)
print("LGBMRegressor GridSearchCV test MSE: ", score_test)

"""
Best parameters found by grid search are: {'learning_rate': 0.1, 'n_estimators': 40}
LGBMRegressor GridSearchCV test MSE:  0.016501047890079536
"""

到了这里,关于机器学习模型调参的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习入门实例-加州房价预测-4(继续调参+评估)

    Randomized Search 如果需要尝试、调整的超参数只有有限几个,比如之前的例子,那只用grid search就够了;但如果超参数的搜索空间非常大,应该用RandomizedSearchCV。它有两个优点: 支持更大的参数范围 它可以更快找到最优的超参数组合。因为不是遍历所有组合,而是在指定的参数

    2023年04月18日
    浏览(66)
  • 机器学习基础14-算法调参(基于印第安糖尿病Pima数据集)

    机器学习的模型都是参数化的,可以通过调参来提高模型的准确度。 模型有很多参数,如何找到最佳的参数组合,可以把它当作一个查询问题来处理,但是调整参数到何时为止呢?应该遵循偏差和方差协调的原则。 接下来将介绍在 scikit-learn 中设置机器学习模型最佳参数的方

    2024年02月10日
    浏览(50)
  • 模型调参及优化

    调参 调权重参数,偏置参数 训练数据集用来训练参数w,b 调超参数 验证数据集用来选择超参数学习率lr,隐藏层大小等 如何调参 当泛化误差和训练误差都没有降下去说明欠拟合;当训练误差降下去,但泛化误差出现上升形式,说明过拟合 优化 权重衰退 在过拟合时,可以使

    2024年02月15日
    浏览(60)
  • 逻辑回归模型调参

    逻辑回归是一种分类算法,逻辑回归就是解决二分类问题的利器。 算法原理:将线性回归的输出作为逻辑回归的输入,然后经过sigmoid函数变换将整体的值映射到[0,1],再设定阈值进行分类。 常用参数: random_state:随机种子。 class_weight:各类别样本的权重。样本需要加权时

    2023年04月16日
    浏览(34)
  • 如何对多元线性回归模型调参?

    多元线性回归模型通常不像复杂的机器学习模型那样拥有许多可调节的超参数。然而,仍有一些关键步骤和技巧可以用于优化多元线性回归模型的性能: 特征选择 移除无关特征:通过分析特征与目标变量的关联度,移除与目标变量关联度低的特征。 使用特征选择方法:可以

    2024年01月23日
    浏览(41)
  • 基于DigiThread的仿真模型调参功能

    仿真模型调参是指通过调整模型内部的参数值,使仿真模型的输出更符合实际系统的行为或者预期结果的过程。 仿真过程中,往往需要频繁对模型参数进行调整,通过观察不同参数下系统整体的运行情况,实现系统的性能、可靠性和效率的优化。在进行模型调参时,需要注意

    2024年02月05日
    浏览(46)
  • XGBoost模型调参:GridSearchCV方法网格搜索优化参数

    本篇文章是继上一篇文章:使用K-Fold训练和预测XGBoost模型的方法,探讨对XGBoost模型调优的方法,所使用的代码和数据文件均是基于上一篇文章的,需要的小伙伴可以跳转链接自行获取。 程序和上篇文章中的完全一致,不再赘述。 一般调参会考虑以下几个超参数(需要在模型

    2023年04月08日
    浏览(44)
  • 深度学习学习率(lr)调参

    lr全称learning rate(一下简称lr),是机器学习和深度学习中最为重要的超参数之一,会影响模型训练结果的好坏,有时候甚至会直接导致整个模型无法使用。 lr最直接的可观测的影响就是loss值的变化,较大的学习率会更容易收敛也更容易出现陷入局部最优解的情况,而过大的

    2024年02月04日
    浏览(43)
  • 深度学习调参经验

    回答:现阶段深度学习已经进入稳定阶段,已经很少需要一些很小的技巧了,尤其是在工程实践方面。往往学习率等超参数依靠经验设置一下就能基本将模型训练好。此外精调学习率超参数能取得的提升也往往是较小的,而且很容易过拟合,在应用场景上影响不大。除非是一

    2024年02月12日
    浏览(34)
  • 深度学习调参指南

    1. 选择合适的模型架构 模型的结构(层数和宽度),参数配置,尽量用已经有效的模型 2. 选择优化器 针对具体的问题,从选择常用的优化器开始,进行比较 3. 选择BatchSize 1). Batch Size决定训练速度,但是不影响验证集性能 2). 通常选择最大可支持的Bacth Size 3). 增加Batch Size减少训

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包