首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何通过算法调优提高机器学习性能

机器学习模型是参数化的,以便其行为可以根据给定问题进行调整。模型可能有多个参数,找到最佳参数组合可以被视为一个搜索问题。通过本文,我们将发现如何使用scikit-learn调整机器学习算法的参数。学完本文,我们将了解:

1. 调整算法参数以提高算法性能的重要性。

2. 如何使用网格搜索算法调整策略。

3. 如何使用随机搜索算法调整策略。

1. 机器学习算法参数

算法调优是应用机器学习过程中的最后一步,在最终确定模型之前。有时它被称为超参数优化,其中算法参数被称为超参数,而由机器学习算法自身找到的系数被称为参数。优化暗示了问题的搜索性质。如果将其表述为搜索问题,我们可以使用不同的搜索策略来找到一个好的和健壮的参数或参数集,用于特定问题上的算法。Python scikit-learn为算法参数调优提供了两种简单的方法:

网格搜索参数调优(Grid Search Parameter Tuning)

随机搜索参数调优(Random Search Parameter Tuning)

2. 网格搜索参数调优

网格搜索是一种参数调优方法,它系统地构建和评估每个算法参数组合下的模型。我们可以使用GridSearchCV类执行网格搜索。下面的例子评估了岭回归(Ridge Regression)算法在标准皮马印第安人糖尿病数据集上不同alpha值的效果。这是一个一维网格搜索。

3. 随机搜索参数调优

随机搜索是一种参数调优方法,它将从一个随机分布(即均匀分布)中为固定次数的迭代采样算法参数。对于每次选择的参数组合,都会构建并评估一个模型。我们可以使用RandomizedSearchCV类对算法参数进行随机搜索。下面的例子评估了标准马印第安人糖尿病数据集上岭回归算法不同的随机alpha值(0到1之间)。总共有100次迭代,alpha值在0到1的范围内(alpha值可以取的范围)均匀随机选择。

示例代码

# coding=utf-8"""本脚本旨在展示使用网格搜索和随机搜索进行参数调优的过程。使用的是皮马印第安人糖尿病数据集。"""# 导入必要的库from pathlib import Path # 用于处理文件路径import numpy as np # 用于科学计算的高效数组处理库import pandas as pd # 用于数据处理和分析的库from sklearn.preprocessing import StandardScaler # 用于数据标准化预处理from sklearn.linear_model import Ridge # 用于回归分析的岭回归模型from sklearn.model_selection import GridSearchCV, RandomizedSearchCV # 用于模型参数网格搜索的库from scipy.stats import uniform # 用于随机参数搜索的均匀分布

# 以下是导入库的注释,它们各自用于不同的数据处理和建模任务。# Path 用于方便地操作文件路径。# numpy 提供了高效的数组操作,是科学计算的基础工具。# pandas 提供了灵活的数据帧操作,适合数据清洗和分析。# StandardScaler 是一种预处理工具,用于将数据标准化到零均值和单位方差。# Ridge 是一种线性回归模型,通过添加惩罚项防止过拟合。# GridSearchCV 和 RandomizedSearchCV 提供了参数优化的功能,通过自动搜索给定的参数空间来寻找最佳模型参数。# uniform 从均匀分布中采样,用于随机搜索中的参数分布。

# 定义文件路径filename = Path(__file__).parent / 'data/pima-indians-diabetes.csv'

# 加载数据data = pd.read_csv(filename)

# 重命名列名以提高可读性column_names = {'Pregnancies': 'pregnant_times', 'Glucose': 'glucose', 'BloodPressure': 'blood_pressure', 'SkinThickness': 'skin_thickness', 'Insulin': 'insulin', 'BMI': 'BMI', 'DiabetesPedigreeFunction': 'DPF', 'Age': 'age', 'Outcome': 'outcome'}data.rename(columns=column_names, inplace=True)

# 删除含有缺失值的行以进行数据清洗data.dropna(inplace=True)

# 对特征数据进行标准化处理scaler = StandardScaler()X = scaler.fit_transform(data.iloc[:, :-1]) # 提取目标变量Y = data.iloc[:, -1] print(X.shape, Y.shape)

###### 网格搜索参数调优函数 ######'''功能:使用网格搜索方法对模型参数进行调优说明:1. 该片段主要进行的是Ridge回归模型的参数调优,通过尝试不同的alpha参数值,找到最优的参数配置。2. alphas定义了需要尝试的alpha参数范围。3. param_grid是一个字典,包含了需要进行网格搜索的参数及其取值范围。4. model定义了基础的模型类型,这里是Ridge回归模型。5. GridSearchCV是一个用于参数调优的类,它会遍历指定的参数范围,找到最优的参数组合。6. fit方法拟合模型,并根据评价指标选择最优参数。7. 最后打印出最优参数值及其对应的评分。参数:- X: 特征数据集- Y: 目标数据集返回值:无'''# # 打印网格搜索参数调优的标题print("\n\033[1;30m网格搜索参数调优(Grid Search Parameter Tuning):\033[0m")

# 定义需要搜索的参数范围alphas = np.array([1, 0.1, 0.01, 0.001, 0.0001, 0])param_grid = dict(alpha=alphas)

# 初始化Ridge回归模型model = Ridge()

# 使用GridSearchCV进行参数调优grid = GridSearchCV(estimator=model, param_grid=param_grid)grid.fit(X, Y)

# 打印最优参数及其对应的评分print("The best parameters of %s are %s with a score of %0.2f" % (grid.best_estimator_.alpha, grid.best_params_, grid.best_score_))

###### 随机搜索参数调优函数 ######'''功能:使用随机搜索方法进行参数调优,寻找最优的参数配置以提高模型性能。输入:- 无特定输入参数,但内部使用了全局变量X和Y作为训练数据。输出:- 打印出最优的参数配置及其对应的评分。'''# 打印随机搜索参数调优的标题print("\n\033[1;30m随机搜索参数调优(Random Search Parameter Tuning):\033[0m")

# 定义超参数的取值范围,这里使用了均匀分布alphas = uniform()

# 设置参数网格param_grid = {'alpha': alphas}

# 初始化Ridge回归模型model = Ridge()

# 创建随机搜索交叉验证对象rsearch = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=100, random_state=7)

# 对训练数据进行拟合rsearch.fit(X, Y)

# 打印最优参数、对应的参数值以及评分print("The best parameters of %s are %s with a score of %0.2f" % (rsearch.best_estimator_.alpha, rsearch.best_params_, rsearch.best_score_))

总结

算法参数调整是在展示结果或准备将系统投入生产之前,提高算法性能的重要步骤。我们发现了参数调整来改善算法结果的方法:

网格搜索参数调整

随机搜索参数调整

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OU7ZO6NBIbkk2maVbgtzAmuQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券