赞
踩
- from sklearn.model_selection import StratifiedKFold # 导入K折验证工具
- from sklearn.model_selection import GridSearchCV # 导入网格搜索工具
- kfold = StratifiedKFold(n_splits=10) # 10折验证,将数据集划分为10个子集
-
- rf = RandomForestClassifier() # 创建一个随机森林模型
-
- # 设置随机森林模型的参数网格,通过交叉验证寻找最优参数组合
- rf_param_grid = {
- "max_depth": [None], # 决策树的最大深度,None表示不限制深度
- "max_features": [3, 5, 12], # 每棵决策树考虑的最大特征数
- "min_samples_split": [2, 5, 10], # 分裂内部节点所需的最小样本数
- "min_samples_leaf": [3, 5, 10], # 叶子节点所需的最小样本数
- "bootstrap": [False], # 是否使用自助法(bootstrap sampling)
- "n_estimators": [100, 300], # 随机森林中决策树的数量
- "criterion": ["gini"] # 衡量决策树质量的指标,基尼系数
- }
-
- # 创建一个使用网格搜索的随机森林模型
- rf_gs = GridSearchCV(rf, param_grid=rf_param_grid, cv=kfold, scoring="accuracy", n_jobs=10, verbose=1)
-
- # 使用优化后的参数对训练数据集进行拟合
- rf_gs.fit(X_train, y_train)
十折交叉验证,英文名叫做10-fold cross-validation,用来测试算法准确性。是常用的测试方法。将数据集分成十份,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)
10折验证是一种常用的交叉验证方法,可以更全面地评估模型性能、减少过拟合风险、评估模型稳定性以及进行参数调优。这样可以提高对模型的信心,并提供更好的模型选择依据。
此处选择了准确率作为各个参数组合的评估指标,并且应用10折验证以提高准确率。程序开始运行之后,10个“后台工作者”开始分批同步对54种参数(3*3*3*2=54)组合中的每一组参数,用10折验证的方式对训练集进行训练(因为是10折验证,所以共需训练540次)并比较,试图找到最佳参数。
- from sklearn.metrics import (accuracy_score, confusion_matrix)
- print("最佳参数组合:", rf_gs.best_params_)# 输出最优超参
- y_hat_rfgs = rf_gs.predict(X_test) # 用随机森林算法的最佳参数进行预测
- print("参数优化后随机森林预测准确率:", accuracy_score(y_test.T, y_hat_rfgs))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。