数据分析 | 随机森林如何确定参数空间的搜索范围

news2024/11/25 10:56:39

1. 随机森林超参数

        极其重要的三个超参数是必须要调整的,一般再加上两到三个其他超参数进行优化即可。

2. 学习曲线确定n_estimators搜索范围

        首先导入必要的库,使用sklearn自带的房价预测数据集:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_california_housing
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_validate
import matplotlib.pyplot as plt
housing = fetch_california_housing()
# 特征数据
X = housing.data[:, [0, 1, 2, 3, 4, 5, 6, 7]]
# 目标变量(房价)
y = housing.target

        初始化以及5折交叉验证计算RMSE:

trainRMSE = np.array([])
testRMSE = np.array([])
trainSTD = np.array([])
testSTD = np.array([])

Option = range(5,101,5)
for n_estimators in Option :
    reg_f = RandomForestRegressor(n_estimators=n_estimators, random_state=1412)
    # 交叉验证输出结果
    cv = KFold(n_splits=5,shuffle=True,random_state=1412)
    result_f = cross_validate(reg_f,X,y,cv=cv,scoring="neg_mean_squared_error",return_train_score=True,n_jobs=-1)

    # 根据输出的MSE进行RMSE计算
    train = abs(result_f["train_score"])**0.5
    test = abs(result_f["test_score"])**0.5

    trainRMSE = np.append(trainRMSE,train.mean())
    testRMSE = np.append(testRMSE,test.mean())
    trainSTD = np.append(trainSTD,train.std())
    testSTD = np.append(testSTD,test.std())

        定义绘图函数: 

def plotCVresult(Option,trainRMSE,testRMSE,trainSTD,testSTD) :
    xaxis = Option

    # RMSE
    plt.plot(xaxis, trainRMSE,color='k',label='RandomForestTrain')
    plt.plot(xaxis, testRMSE, color='red', label='RandomForestTest')

    # 将标准差围绕在RMSE旁边,区间越大表示模型越不稳定
    plt.plot(xaxis, trainRMSE + trainSTD, color='k', linestyle='dotted')
    plt.plot(xaxis, trainRMSE - trainSTD, color='k', linestyle='dotted')
    plt.plot(xaxis, testRMSE + testSTD, color='red', linestyle='dotted')
    plt.plot(xaxis, testRMSE - testSTD, color='red', linestyle='dotted')
    plt.xticks([*xaxis])
    plt.legend(loc=1)
    plt.xlabel('n_estimators')
    plt.ylabel('RMSE')
    plt.title('Learning Curve')
    plt.show()

plotCVresult(Option,trainRMSE,testRMSE,trainSTD,testSTD)

        输出结果如下: 

 3. 使用Tree模块判断max_depth搜索范围

        只需在输出的最小值和最大值之间进行搜索即可。

reg_f = RandomForestRegressor(n_estimators=100,random_state=1412)
reg_f = reg_f.fit(X,y)
d = pd.Series([],dtype="int64")
for idx,t in enumerate(reg_f.estimators_) :
    d[idx] = t.tree_.max_depth
print('决策树的最大深度的最小值为:',d.min())
print('决策树的最大深度的最大值为:',d.max())

        输出结果为:

4. 使用Tree模块判断min_weight_fraction_leaf搜索范围

reg_f = RandomForestRegressor(n_estimators=100,random_state=1412)
reg_f = reg_f.fit(X,y)
n = pd.Series([],dtype="int64")
for idx,t in enumerate(reg_f.estimators_) :
    n[idx] = t.tree_.weighted_n_node_samples
meann = np.zeros(20)
for i in range(0,20) :
    meann[i] = n[i].mean()
print('决策树分枝所需最小样本权重的最小值为:',meann.min())
print('决策树分枝所需最小样本权重的最大值为:',meann.max())
print('决策树分枝所需最小样本权重的平均值为:',meann.mean())

        输出结果为:

 5. 使用Tree模块判断min_sample_split搜索范围

reg_f = RandomForestRegressor(n_estimators=20,random_state=1412)
reg_f = reg_f.fit(X,y)
s = pd.Series([],dtype="int64")
for idx,t in enumerate(reg_f.estimators_) :
    s[idx] = t.tree_.n_node_samples
meann = np.zeros(20)
for i in range(0,20) :
    meann[i] = s[i].mean()
print('决策树需要最小样本的最小值为:',meann.min())
print('决策树需要最小样本的最大值为:',meann.max())
print('决策树需要最小样本的平均值为:',meann.mean())

        输出结果为:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/873138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最强自动化测试框架Playwright(18)- 执行js脚本

page.evaluate() API 可以在网页上下文中运行 JavaScript 函数,并将结果带回 Playwright 环境。 href page.evaluate(() > document.location.href) 如果结果是 Promise 或函数是异步的,则计算将自动等待,直到解析…

虚拟现实与增强现实技术的商业应用

章节一:引言 随着科技的不断发展,虚拟现实(Virtual Reality,简称VR)与增强现实(Augmented Reality,简称AR)技术正日益成为商业领域中的重要创新力量。这两种技术为企业带来了前所未…

Android多屏幕支持-Android12

Android多屏幕支持-Android12 1、概览及相关文章2、屏幕窗口配置2.1 配置xml文件2.2 DisplayInfo#uniqueId 屏幕标识2.3 adb查看信息 3、配置文件解析3.1 xml字段读取3.2 简要时序图 4、每屏幕焦点 android12-release 1、概览及相关文章 AOSP > 文档 > 心主题 > 多屏…

206、仿真-51单片机锂电池蓄电池电压电流加按键控制开关状态Proteus仿真设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…

基于STM32CUBEMX驱动TMOS模块STHS34PF80(1)----获取ID

基于STM32CUBEMX驱动TMOS模块STHS34PF80----1.获取ID 概述样品申请视频教程所有功能接口最小系统图生成STM32CUBEMX串口配置IIC配置IO口设置串口重定向 模块地址参考demoIIC写函数IIC读函数参考程序初始化获取ID主函数 概述 STHS34PF80 是一款非冷却、工厂校准的红外运动和存在…

变压器保护高侧过流保护整定原则

电流速断保护的动作电流可按下列两个条件来选择: (1) 躲过厂用变压器负荷侧母线上短路时流过保护装置的最大短路电流。 动作电流整定为: IsdKkIDmax (1-1) 式中 Kk——可靠系数, 一般取1.3&…

Oracle将与Kubernetes合作推出DevOps解决方案!

导读Oracle想成为云计算领域的巨头,但它不是推出自己品牌的云DevOps软件,而是将与CoreOS在Kubernetes端展开合作。七年前,Oracle想要成为Linux领域的一家重量级公司。于是,Oracle主席拉里埃利森(Larry Ellison&#xf…

【Python】如何判断时间序列数据是否为平稳时间序列或非平稳时间序列?

判断时间序列数据是否为平稳时间序列或非平稳时间序列,通常可以通过以下方法: (1)观察时间序列数据的均值和方差是否随时间变化而发生明显的改变。若均值和方差变化明显,则该时间序列数据可能为非平稳时间序列&#x…

章节5:Burp 扫描功能

章节5:Burp 扫描功能 参考资料 https://portswigger.net/burp/documentation/scanner https://portswigger.net/burp/documentation/desktop/scanning 模块总体介绍: https://portswigger.net/burp/vulnerability-scanner 扫描功能的使用&#xff…

深入了解 Vue 3 组件间通信机制

什么是组件? 在 Vue3 中,组件是构建应用界面的核心概念之一。组件可以看作是可复用、自包含和可组合的代码块,用于封装 UI 元素和相应的行为逻辑。 通俗来说就是,组件(Component)是一种对数据和方法的简单…

置信域策略优化Trust Region Policy Optimization (TRPO)

1. 置信域方法(Trust Region Methods) [1]将置信域方法用到强化学习中,并取到了非常好的结果. 1.1 优化问题 1.2 置信域 1.3 置信域方法的过程 References [1] Schulman J, Levine S, Abbeel P, et al. Trust region policy optimization[C]//International conf…

旋转图像(旋转矩阵)

原题链接 旋转图像备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/rotate-image/ 算法分析 若矩阵的行列数为N,设i表示行索引,i属…

如何定位线上CPU飙高的问题

1.问题情景 我们的接口卡死,CPU飙高到打不开的网页 2.问题定位 2.1 top指令 通过top命令找到CPU耗用最厉害的那个进程的PID 直接输入top Linux下的100%代表一个核心,如果是八核,最高可以到800%,这样才算满 然后通过PID找到CP…

设计模式再探——策略模式

目录 一、背景介绍二、思路&方案三、过程1.策略模式简介2.策略模式的类图3.策略模式代码4.策略模式还可以优化的地方5.策略模式的例子改造(配置文件反射) 四、总结五、升华 一、背景介绍 最近在做产品的过程中,对于主题讨论回复内容,按照追评次数排…

Java学习手册——第一篇Java简介

今后Java学习手册就来给大家梳理JavaSE的基础知识啦, 除了这个专栏我们还有其他专栏:前端、安全、后端等。 希望大家可以在这里一起讨论学习哟~ Java学习手册——第一篇Java简介 1. Java基础知识2. Java能干嘛3. Java基础环境搭建 1. Java基础知识 出生…

BANI时代下的项目管理:如何迎接挑战与机遇

BANI时代的介绍与特点 BANI时代的起源 BANI这个概念首次被提出是为了描述和理解我们所处的复杂、多变、不确定的时代。与VUCA(Volatile, Uncertain, Complex, Ambiguous)相比,BANI更加准确地捕捉了我们面临的现实挑战。VUCA重点关注外部环境…

【基础操作】Linux打开terminal,Anaconda默认进入的虚拟环境(python版本)设置(自行指定)

为了免除每次打开terminal都要输入 conda activate … 的麻烦,可以这么设置。 1. 打开terminal,然后输入命令 vim ~/.bashrc2. 然后在文件末尾添加 conda activate your_envs # your_envs是你的虚拟环境名称3. 保存退出,重新打开就成功啦…

第八课 双重所有格和不定代词

系列文章目录 文章目录 系列文章目录前言一、of s 的所有格1、of 有生命的名词 ’s2、of 名词性物主代词3、小结 二、反身代词1、作宾语和介词宾语2、作表语3、作固定惯语 三、相互代词四、指示代词 Such 和 Same 的用法 前言 一、of s 的所有格 1、of 有生命的名词 ’s 2、…

大数据课程I3——Kafka的消息流与索引机制

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的消息流处理; ⚪ 掌握Kafka的索引机制; ⚪ 掌握Kafka的消息系统语义; 一、Kafka消息流处理 1. Producer 写入消息 流程说明: 1. producer 要向Kafka生产消息,需要先通过…

ORB-SLAM2第二节---双目地图初始化

比起单目初始化,而双目实现地图的初始化非常简单,只需要一帧(左右目图像)即可完成初始化。 行特征点统计。考虑用图像金字塔尺度作为偏移量,在当前点上下正负偏移量(r)内的纵坐标值都认为是匹配点可能存在…