首页 > 其他分享 >机器学习_参数调优

机器学习_参数调优

时间:2024-05-30 09:30:28浏览次数:13  
标签:search 机器 train clf 调优 参数 test reg best

参数调优(Hyperparameter Tuning)是机器学习模型优化过程的重要部分,通过调整模型的超参数来提升其性能。以下详细讲解如何进行参数调优,并提供相应的代码实例。

1. 什么是超参数?

超参数是在训练之前设置的参数,不同于模型训练过程中学到的参数(如权重)。决策树和随机森林的超参数包括树的深度、分裂标准、树的数量等。

2. 参数调优方法

2.1 网格搜索(Grid Search)

网格搜索通过穷举搜索的方式,在指定的参数范围内寻找最佳参数组合。

2.2 随机搜索(Random Search)

随机搜索在参数空间内随机采样进行搜索,通常能在较少的计算时间内找到接近最优的参数组合。

2.3 贝叶斯优化(Bayesian Optimization)

贝叶斯优化利用先前的结果来指导参数搜索,通常比网格搜索和随机搜索更高效。

3. 具体方法和代码示例

以下代码示例使用 scikit-learnGridSearchCVRandomizedSearchCV 进行参数调优。

3.1 数据准备

首先准备好数据集。

from sklearn.datasets import load_iris, load_boston
from sklearn.model_selection import train_test_split

# 分类数据集
iris = load_iris()
X_clf, y_clf = iris.data, iris.target
X_clf_train, X_clf_test, y_clf_train, y_clf_test = train_test_split(X_clf, y_clf, test_size=0.2, random_state=42)

# 回归数据集
boston = load_boston()
X_reg, y_reg = boston.data, boston.target
X_reg_train, X_reg_test, y_reg_train, y_reg_test = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42)
3.2 网格搜索(Grid Search)
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor

# 决策树分类器的网格搜索
param_grid_clf = {
    'criterion': ['gini', 'entropy'],
    'max_depth': [3, 5, 7, 10],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 5]
}

grid_search_clf = GridSearchCV(DecisionTreeClassifier(), param_grid_clf, cv=5, scoring='accuracy')
grid_search_clf.fit(X_clf_train, y_clf_train)

print(f"Best parameters for DecisionTreeClassifier: {grid_search_clf.best_params_}")
print(f"Best cross-validation accuracy: {grid_search_clf.best_score_}")

# 决策树回归器的网格搜索
param_grid_reg = {
    'criterion': ['mse', 'friedman_mse', 'mae'],
    'max_depth': [3, 5, 7, 10],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 5]
}

grid_search_reg = GridSearchCV(DecisionTreeRegressor(), param_grid_reg, cv=5, scoring='neg_mean_squared_error')
grid_search_reg.fit(X_reg_train, y_reg_train)

print(f"Best parameters for DecisionTreeRegressor: {grid_search_reg.best_params_}")
print(f"Best cross-validation MSE: {-grid_search_reg.best_score_}")
3.3 随机搜索(Random Search)
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor
from scipy.stats import randint

# 随机森林分类器的随机搜索
param_dist_clf = {
    'n_estimators': randint(50, 200),
    'max_features': ['auto', 'sqrt', 'log2'],
    'max_depth': randint(3, 10),
    'min_samples_split': randint(2, 11),
    'min_samples_leaf': randint(1, 11)
}

random_search_clf = RandomizedSearchCV(RandomForestClassifier(), param_distributions=param_dist_clf, n_iter=100, cv=5, scoring='accuracy', random_state=42)
random_search_clf.fit(X_clf_train, y_clf_train)

print(f"Best parameters for RandomForestClassifier: {random_search_clf.best_params_}")
print(f"Best cross-validation accuracy: {random_search_clf.best_score_}")

# 随机森林回归器的随机搜索
param_dist_reg = {
    'n_estimators': randint(50, 200),
    'max_features': ['auto', 'sqrt', 'log2'],
    'max_depth': randint(3, 10),
    'min_samples_split': randint(2, 11),
    'min_samples_leaf': randint(1, 11)
}

random_search_reg = RandomizedSearchCV(RandomForestRegressor(), param_distributions=param_dist_reg, n_iter=100, cv=5, scoring='neg_mean_squared_error', random_state=42)
random_search_reg.fit(X_reg_train, y_reg_train)

print(f"Best parameters for RandomForestRegressor: {random_search_reg.best_params_}")
print(f"Best cross-validation MSE: {-random_search_reg.best_score_}")

4. 评估调优效果

通过最佳参数训练模型,并在测试集上评估模型性能。

from sklearn.metrics import accuracy_score, mean_squared_error

# 决策树分类器最佳模型评估
best_clf = grid_search_clf.best_estimator_
y_clf_pred = best_clf.predict(X_clf_test)
print(f"Test set accuracy with best DecisionTreeClassifier: {accuracy_score(y_clf_test, y_clf_pred)}")

# 决策树回归器最佳模型评估
best_reg = grid_search_reg.best_estimator_
y_reg_pred = best_reg.predict(X_reg_test)
print(f"Test set MSE with best DecisionTreeRegressor: {mean_squared_error(y_reg_test, y_reg_pred)}")

# 随机森林分类器最佳模型评估
best_clf_rf = random_search_clf.best_estimator_
y_clf_rf_pred = best_clf_rf.predict(X_clf_test)
print(f"Test set accuracy with best RandomForestClassifier: {accuracy_score(y_clf_test, y_clf_rf_pred)}")

# 随机森林回归器最佳模型评估
best_reg_rf = random_search_reg.best_estimator_
y_reg_rf_pred = best_reg_rf.predict(X_reg_test)
print(f"Test set MSE with best RandomForestRegressor: {mean_squared_error(y_reg_test, y_reg_rf_pred)}")

5. 贝叶斯优化

贝叶斯优化通过模型来预测参数空间的最优解,更高效地找到最佳参数。以下是使用 skopt 进行贝叶斯优化的示例:

from skopt import BayesSearchCV
from skopt.space import Real, Integer, Categorical

# 贝叶斯优化
param_space = {
    'n_estimators': Integer(50, 200),
    'max_features': Categorical(['auto', 'sqrt', 'log2']),
    'max_depth': Integer(3, 10),
    'min_samples_split': Integer(2, 11),
    'min_samples_leaf': Integer(1, 11)
}

bayes_search = BayesSearchCV(estimator=RandomForestRegressor(), search_spaces=param_space, n_iter=32, cv=5, scoring='neg_mean_squared_error', random_state=42)
bayes_search.fit(X_reg_train, y_reg_train)

print(f"Best parameters with Bayesian Optimization: {bayes_search.best_params_}")
print(f"Best cross-validation MSE: {-bayes_search.best_score_}")

通过这些方法,可以有效地进行参数调优,找到最佳参数组合,从而提升模型的性能。在实际应用中,可以根据具体问题选择合适的参数调优方法。

标签:search,机器,train,clf,调优,参数,test,reg,best
From: https://blog.csdn.net/a6181816/article/details/139301795

相关文章

  • 机器学习_正则化方法
    正则化是机器学习中用于防止过拟合的一种技术。它通过在损失函数中加入一个惩罚项,限制模型的复杂度,从而提高模型的泛化能力。常见的正则化方法包括L1正则化(Lasso)和L2正则化(Ridge),还有结合了两者优点的ElasticNet。以下是对这些正则化方法的详细说明,包括原理、用法、使用场景......
  • 机器学习_特征工程
    特征工程是机器学习中一个非常重要的步骤,它直接影响模型的性能和准确性。特征工程的目标是从原始数据中提取、转换和选择适当的特征,使得机器学习算法可以更好地学习和做出预测。以下是特征工程的原理、方法和用法的详细讲解。特征工程的原理特征工程的原理在于将原始数据......
  • 机器学习_决策树与随机森林
    决策树和随机森林是常用的机器学习算法,尤其在分类和回归任务中应用广泛。以下详细介绍它们的用法,并提供相应的代码实例。决策树决策树是基于树结构的模型,逐步细化决策,最终形成对目标变量的预测。用法分类:用于分类任务,目标变量是类别。回归:用于回归任务,目标变量是连续值......
  • for循环外创建一个http请求对象,循环内赋值参数多次请求返回数据相同定位及解决(共用一
    一次项目线上问题定位,发现多次不同参数请求值相同,直接上代码List<String>list=newArrayList<>();list.add("85657218,上海奉贤恒盛湖畔豪庭xxx号xxx");list.add("85657219,上海虹口虬江支路xxx弄xxx室");if(CollectionUtil.isNotEmpty(list))......
  • 基于金融知识图谱的问答机器人
    importjsonfromflaskimportFlask,requestfrompy2neoimportGraphfrompyhanlpimport*app=Flask(__name__)@app.route("/qa",methods=['POST','GET'])defkg_qa():ifrequest.method=='GET':ques......
  • 成为MySQL DBA后,再看ORACLE数据库(三、参数管理)
    一、参数文件在ORACLE11g及以后的版本中,ORACLE使用spfile作为数据库的参数文件,这是一个二进制文件,不能通过手工修改。SPFILE的引入使得对于参数的修改都可以在命令行完成,不需要手工修改,这也是为了减少了人为错误的发生。而在MySQL中,需要去手工维护my.cnf参数文件,主要原因是在MyS......
  • 2024-5-29-中国人形机器人产业链全景图谱
    人形机器人作为一种“未来产业”,结合了机械设计、人工智能、传感技术和控制系统等先进技术,产业链路非常复杂。人形机器人产业链包括上中下游。上游包括核心零部件(如伺服系统、减速器、传感器、控制器等)和软件系统开发,中游为人形机器人本体制造,下游为终端应用市场,如医疗、教育、救......
  • SAP:观察I_CALLBACK_USER_COMMAND 参数(按钮点击事件)
    1、从函数级SLVC_FULLSCREEN里复制 一个在”GUI状态“ 下的“STANDARD_FULLSCREEN”标准全屏幕到 程序Z16_04里。 标准工具添加 定义按钮(关闭、保存)主程序代码:*&---------------------------------------------------------------------**&ReportZ16_04*&利用......
  • 【论文笔记】机器遗忘:错误标签方法
    错误标签方法来自论文:Machine Unlearning:ASurvey中总结的方法。通过给遗忘样本提供随机的错误标签,混淆模型对样本的理解,从而无法在模型中保留任何正确的信息,以达到机器遗忘的目的。这里总结了以下论文中的方法:[1]LauraGraves,VineelNagisetty,andVijayGanesh.Am......
  • 如何配置机器人ROS操作系统之间的有线和无线的局域网通信(基于ROS的主从通讯)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言1.主从配置前的准备工作(1)查看主从机的hostname(2)查看各自主机和从机的IP(3)本教程的hostname和ip如下2.在主机中的修改(1)修改主机的/.bashr文件(2)修改主机的hosts文件3.在从机......