1、概要
本篇学习AI人工智能之机器学习sklearn的模型选择与调优,以iris数据集和随机森林模型为示例,从代码层面讲述如何进行模型选择与调优。
2、模型选择与调优 - 简介
模型选择与调优是机器学习流程中的关键步骤,涉及选择合适的模型、调整模型参数以及优化模型性能。
本篇的知识点:
交叉验证
- 交叉验证是一种统计分析方法,通过将数据集分割成多个小子集来进行模型评估,其中每个子集轮流作为验证集,其余的作为训练集。
- 这种方法可以减少模型评估的方差,提供模型性能的稳健估计,并且有助于避免过拟合
- cross_val_score 是 scikit-learn 库中的一个函数,用于进行交叉验证。
超参数优化
- 超参数优化是寻找使模型性能最优的超参数组合的过程。
- Grid Search和Randomized Search是常用的超参数优化方法
- GridSearchCV 在参数空间较大时可能会非常耗时,因为它会尝试所有可能的参数组合。
- 在这种情况下,可以考虑使用更高效的搜索方法,如随机搜索(RandomizedSearchCV)。
3、模型选择
3.1、安装依赖
python安装机器学习库: pip install scikit-learn
3.2、引入数据集
from sklearn.model_selection import cross_val_score, GridSearchCV
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier# 加载示例数据
iris = load_iris()
X = iris.data
y = iris.target
3.3、选择模型,进行交叉验证 - cross_val_score
使用K折交叉验证评估模型
cross_val_score 函数参数说明:
- estimator: 用于交叉验证的模型估计器。
- X: 特征数据集。
- y: 目标数据集。
- cv: 交叉验证的折数,可以是整数或交叉验证迭代器。
- (cv=5)意味着数据集被分成 5 个大小相等的子集,模型会被训练 5 次,每次使用不同的验证集,其余作为训练集。
- 函数返回一个数组,包含了每次交叉验证的得分
- scoring: 用于模型评估的得分策略。
- 通过改变 scoring 参数,可以指定不同的评估指标,如准确率(accuracy)、精确率(precision)、召回率(recall)等
- n_jobs: 并行作业数,-1 表示使用所有CPU。
# 示例: 我们从机器学习库中,选择一个模型,进行交叉验证,这里选择的是 随机森林模型
def learn_cross_val_score():# 初始化模型 - 随机森林分类器model = RandomForestClassifier()scores = cross_val_score(estimator=model, X=X, y=y, cv=5, scoring=None)print("Cross-validation scores:", scores) # 每次得分print("Mean cross-validation score:", scores.mean()) # 平均分
learn_cross_val_score()
运行上述代码,您将得到如下输出:
Cross-validation scores: [0.96666667 0.96666667 0.93333333 0.96666667 1. ]
Mean cross-validation score: 0.9666666666666668
3.4、进行超参数优化,寻找最好的参数组合 - GridSearchCV
使用网格搜索寻找最好的参数组合
GridSearchCV搜索函数参数说明:
- estimator: 要调优的模型估计器。
- param_grid: 参数网格,它是一个字典,其中键是模型的参数名称,值是参数的候选值列表。
- cv: 交叉验证的折数,可以是整数或交叉验证迭代器。
- scoring: 用于评估模型性能的评分策略。
- n_jobs: 并行作业数,-1 表示使用所有 CPU。
- verbose: 控制输出信息的详细程度。
# 示例: 我们从机器学习库中,选择一个模型,进行超参数优化,这里选择的是 随机森林模型
def learn_GridSearchCV():# 初始化模型 - 随机森林分类器model = RandomForestClassifier()# 定义参数网格param_grid = {'n_estimators': [10, 50, 100],'max_depth': [None, 10, 20, 30],'min_samples_split': [2, 5, 10]}grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)# 执行网格搜索# GridSearchCV会遍历 param_grid 中所有参数组合,对每一种组合使用 cv指定的交叉验证方法来评估模型性能。# 最终,它会返回在交叉验证中平均性能最好的参数组合。grid_search.fit(X, y)print("Best parameters found: ", grid_search.best_params_) # 输出最佳参数 print("Best score: ", grid_search.best_score_) # 输出最佳分数learn_GridSearchCV()
运行上述代码,您将得到如下输出:
Best parameters found: {'max_depth': None, 'min_samples_split': 2, 'n_estimators': 10}
Best score: 0.9666666666666668
4、 总结
本篇以iris数据集和随机森林模型为示例,从代码视角讲述如何进行模型选择与调优。