scikit-learn中用gridsearchcv给随机森林(RF)自动调参

2024-03-15 16:58

本文主要是介绍scikit-learn中用gridsearchcv给随机森林(RF)自动调参,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

全文参考 1:http://scikit-learn.org/stable/auto_examples/model_selection/grid_search_digits.html#parameter-estimation-using-grid-search-with-cross-validation

全文参考 2:http://scikit-learn.org/stable/modules/model_evaluation.html#the-scoring-parameter-defining-model-evaluation-rules

全文参考 3:http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score

全文参考 4:http://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html#sphx-glr-auto-examples-model-selection-plot-roc-py

实验重点:随机森林(RandomForest) + 5折交叉验证(Cross-Validation) + 网格参数寻优(GridSearchCV) + 二分类问题中ROC曲线的绘制。

由于原始数据本身质量很好,且正负样本基本均衡,没有做数据预处理工作。

  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from sklearn.metrics import roc_curve
  5. from sklearn.metrics import roc_auc_score
  6. from sklearn.metrics import classification_report
  7. from sklearn.model_selection import GridSearchCV
  8. from sklearn.ensemble import RandomForestClassifier

  1. #导入数据,来源于:http://mldata.org/repository/tags/data/IDA_Benchmark_Repository/,见上图
  2. dataset = pd.read_csv('image_data.csv', header=None, encoding='utf-8')
  3. dataset_positive = dataset[dataset[0] == 1.0]
  4. dataset_negative = dataset[dataset[0] == -1.0]
  5. #训练集和测试集按照7:3分割,分割时兼顾正负样本所占比例
  6. #其中训练集基于5折交叉验证做网格搜索找出最优参数,应用于测试集以评价算法性能
  7. train_dataset = pd.concat([dataset_positive[0:832], dataset_negative[0:628]])
  8. train_recon = train_dataset.sort_index(axis=0, ascending=True)
  9. test_dataset = pd.concat([dataset_positive[832:1188], dataset_negative[628:898]])
  10. test_recon = test_dataset.sort_index(axis=0, ascending=True)
  11. y_train = np.array(train_recon[0])
  12. X_train = np.array(train_recon.drop([0], axis=1))
  13. y_test = np.array(test_recon[0])
  14. X_test = np.array(test_recon.drop([0], axis=1))

  1. # Set the parameters by cross-validation
  2. parameter_space = {
  3. "n_estimators": [10, 15, 20],
  4. "criterion": ["gini", "entropy"],
  5. "min_samples_leaf": [2, 4, 6],
  6. }
  7. #scores = ['precision', 'recall', 'roc_auc']
  8. scores = ['roc_auc']
  9. for score in scores:
  10. print("# Tuning hyper-parameters for %s" % score)
  11. print()
  12. clf = RandomForestClassifier(random_state=14)
  13. grid = GridSearchCV(clf, parameter_space, cv=5, scoring='%s' % score)
  14. #scoring='%s_macro' % score:precision_macro、recall_macro是用于multiclass/multilabel任务的
  15. grid.fit(X_train, y_train)
  16. print("Best parameters set found on development set:")
  17. print()
  18. print(grid.best_params_)
  19. print()
  20. print("Grid scores on development set:")
  21. print()
  22. means = grid.cv_results_['mean_test_score']
  23. stds = grid.cv_results_['std_test_score']
  24. for mean, std, params in zip(means, stds, grid.cv_results_['params']):
  25. print("%0.3f (+/-%0.03f) for %r"
  26. % (mean, std * 2, params))
  27. print()
  28. print("Detailed classification report:")
  29. print()
  30. print("The model is trained on the full development set.")
  31. print("The scores are computed on the full evaluation set.")
  32. print()
  33. bclf = grid.best_estimator_
  34. bclf.fit(X_train, y_train)
  35. y_true = y_test
  36. y_pred = bclf.predict(X_test)
  37. y_pred_pro = bclf.predict_proba(X_test)
  38. y_scores = pd.DataFrame(y_pred_pro, columns=bclf.classes_.tolist())[1].values
  39. print(classification_report(y_true, y_pred))
  40. auc_value = roc_auc_score(y_true, y_scores)

输出结果:


  1. #绘制ROC曲线
  2. fpr, tpr, thresholds = roc_curve(y_true, y_scores, pos_label=1.0)
  3. plt.figure()
  4. lw = 2
  5. plt.plot(fpr, tpr, color='darkorange', linewidth=lw, label='ROC curve (area = %0.4f)' % auc_value)
  6. plt.plot([0, 1], [0, 1], color='navy', linewidth=lw, linestyle='--')
  7. plt.xlim([0.0, 1.0])
  8. plt.ylim([0.0, 1.05])
  9. plt.xlabel('False Positive Rate')
  10. plt.ylabel('True Positive Rate')
  11. plt.title('Receiver operating characteristic example')
  12. plt.legend(loc="lower right")
  13. plt.show()




转自: https://blog.csdn.net/lixiaowang_327/article/details/53434744

这篇关于scikit-learn中用gridsearchcv给随机森林(RF)自动调参的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/812643

相关文章

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机