24/8/9算法笔记 随机森林

news2024/9/22 22:32:06

"极限森林"(Extremely Randomized Trees,简称ERT)是一种集成学习方法,它属于决策树的变体,通常被归类为随机森林(Random Forest)的一种。极限森林的核心思想是在构建决策树时引入极端的随机性,以此来提高模型的多样性,减少过拟合的风险,并可能提高模型的泛化能力。

导入包

from sklearn.ensemble import RandomForestClassifier

from sklearn.tree import DecisionTreeClassifier
from sklearn import tree 
from sklearn import datasets
import graphviz

from sklearn.model_selection import train_test_split
import numpy as np
X,y =datasets.load_wine(return_X_y=True)
X_train,X_test,y_train,y_test = train_test_split(X,y)
一棵树
score =0
for i in range(100):
    X_train,X_test,y_train,y_test = train_test_split(X,y)
    model = DecisionTreeClassifier()
    model.fit(X_train,y_train)
    score += model.score(X_test,y_test)/100

print('一棵决策树平均得分',score)

随机森林(多棵树)
score =0
for i in range(100):
    X_train,X_test,y_train,y_test = train_test_split(X,y)
    #分类器clf
    clf = RandomForestClassifier(n_estimators=100)#表示100棵树组成随机森林
    clf.fit(X_train,y_train)
    score += model.score(X_test,y_test)/100

print('随机森林平均得分',score)

两种算法比较(准确率)

model.predict_proba(X_test)#一棵树,叶节点,落到哪个叶节点算作哪一类,概率0.1

clf.predict_proba(X_test)#森林

可视化

X_train.shape

#随机森林100棵
#先画第一棵树
dot_data = tree.export_graphviz(clf[0],filled =True,rounded = True)
graphviz.Source(dot_data)

#第50棵树
dot_data = tree.export_graphviz(clf[49],filled =True,rounded = True)
graphviz.Source(dot_data)

#最后一棵树
dot_data = tree.export_graphviz(clf[99],filled =True,rounded = True)
graphviz.Source(dot_data)

#随机森林步骤
#1.随机选择样本(放回抽样)
#2.随机选择特征
#3.构建决策树
#4.随机森林投票

#优点
#1.表现良好
#2.可以处理高纬度数据(维度随机选择)
#3.辅助进行特征选择
#4.得益于Bagging可以进行并行训练

#缺点
#对于噪声过大的数据容易过拟合

极限森林

#从分裂随机中筛选最优分裂条件

#依然使用上面的数据

from sklearn.ensemble import ExtraTreesClassifier
score = 0
for i in range(100):
    X_train,X_test,y_train,y_test = train_test_split(X,y)#葡萄酒的价格
    clf2 = ExtraTreesClassifier(max_depth = 3)#深度限制
    clf2.fit(X_train,y_train)
    score +=clf2.score(X_test,y_test)/100
print('极限森林平均得分是',score)

#第一棵树
dot_data = tree.export_graphviz(clf2[0],filled=True,rounded=True)
graphviz.Source(dot_data)

#第100棵树
dot_data = tree.export_graphviz(clf2[-1],filled=True,rounded=True)
graphviz.Source(dot_data)

计算gini系数

count = []
for i in range(3):
    count.append((y_train ==i).sum())
count = np.array(count)
p = count/count.sum()#计算概率
gini = (p*(1-p)).sum()
print('未分裂,gini系数是:',round(gini,3))

Gini系数,全称为Gini不纯度(Gini impurity),是决策树算法中用于选择最佳分裂属性的一个指标。它衡量的是数据集中的不确定性或不纯度。Gini不纯度越低,表示数据集的纯度越高,即数据集中的样本属于同一个类别的可能性越大。

Gini不纯度的计算公式如下:

其中,nn 是数据集中类别的数量,pipi​ 是选择的属性第 ii 个类别的样本比例。

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

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

相关文章

空间推理验证码的介绍!

空间推理验证码 ​是一种验证码形式,‌旨在通过要求用户解决一些视觉或空间推理问题来区分计算机和人类用户。‌这种验证码形式要求用户通过完成一些视觉或空间推理任务来证明他们是真实的人类用户,‌而不是计算机程序。‌空间推理验证码通常涉及一些图…

智慧交通:将物联网与人工智能完美融合

智慧交通是当今社会面临的一个重要挑战,也是人们生活质量提高的一个重要方面。通过将物联网技术与人工智能相结合,我们能够实现智慧交通系统的全面升级和优化,为人们带来更加便捷、高效和安全的出行体验。 在智慧交通领域,物联网…

Java面试题--JVM大厂篇之从原理到实践:JVM 字节码优化秘籍

目录 引言: 正文: 1. JVM 字节码生成原理 2. 字节码优化的痛点 3. 字节码优化策略 3.1 方法内联(Method Inlining) 3.2 循环展开(Loop Unrolling) 3.3 常量折叠(Constant Folding&#…

线程池原理(二)关键源码剖析

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 属性 & 构造方法 对于 ThreadPoolExecutor 有几个关键的属性,这里需要先大致了解: public class ThreadPoolExecutor extends AbstractExecutorService {// 控制变量-存放状态和…

什么是NLP分词(Tokenization)

在自然语言处理和机器学习的领域里,咱们得聊聊一个超基础的技巧——就是“分词”啦。这个技巧啊,就是把一长串的文字切分成小块,让机器能更容易地“消化”。这些小块,不管大小,单个的字符也好,整个的单词也…

汽车EDI:德国大众 EDI 项目案例

德国大众(Volkswagen)是成立于1937年的大型汽车制造商,总部位于德国沃尔夫斯堡。大众集团拥有众多知名汽车品牌,如奥迪、保时捷、宾利、兰博基尼、布加迪等,业务遍及全球。作为一个全球性企业,大众集团依赖…

时序预测|基于变分模态分解-时域卷积-双向长短期记忆-注意力机制多变量时间序列预测VMD-TCN-BiLSTM-Attention

时序预测|基于变分模态分解-时域卷积-双向长短期记忆-注意力机制多变量时间序列预测VMD-TCN-BiLSTM-Attention 文章目录 前言时序预测|基于变分模态分解-时域卷积-双向长短期记忆-注意力机制多变量时间序列预测VMD-TCN-BiLSTM-Attention 一、VMD-TCN-BiLSTM-Attention模型1. **…

SystemUI plugin 开发

一、前言 SystemUI结构复杂,模块数量众多,最重要的是SystemUI属于常驻进程是一个系统的门面,且不能自升级,如果定制功能对主项目做复杂的修改,首先会造成适配压力,如果对主框架不甚理解,有可能会造成很多隐藏的Bug,且不易修复,一旦崩溃对整个系统的影响很大,那么怎…

【从零开始一步步学习VSOA开发】VSOA数据流

VSOA数据流 概念 实际业务中常常存在既有实时命令通信,又有非实时的大数据通信,如文件、音视频传输服务等,如果使用常规的 RPC 或订阅/发布功能来实现,将实时命令和大数据传输混在一起,则会影响 RPC 通道响应的实时性…

C语言程序设计-[10] for语句循环结构

1、for语句循环结构定义 for语句循环结构的一般形式、流程图和执行过程如下: ​ 注1:计算表达式2是循环的判定表达式。与前面一样,这个表达式可以是任意的,只要有值就行,遵循非0即真的原则。 注2:一个循…

(源码)Springboot项目集成Activiti工作流,前端Vue,Bpmn.js

前言 activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器,流行的前后端…

【Python】nn.nn.CircularPad1、2、3d函数和nn.ConstantPad1、2、3d函数详解和示例

前言 在深度学习中,尤其是在处理图像、音频或其他多维数据时,数据填充(Padding)是一个常见的操作。填充不仅可以保持数据的空间维度,还能在卷积操作中避免信息丢失。PyTorch提供了多种填充方式,其中nn.Cir…

unity 本地使用Json(全套)

提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、Json是什么?二、创建Json文件1.在线编辑并转实体类(C#)2.Json文件 三、解析Json并使用四、报错:JsonError:JsonExce…

使用frp内网穿透将个人主机上的MySQL发布到公网上,再通过python管理MySQL

目录 1.frp内网穿透部署 1.frp服务器 1.开放端口 2.上传软件包 3.解压 4.配置文件 2.frp客户端 1.上传软件包 2.配置文件 3.启动测试 1.浏览器查看服务器上连接的客户端数量 2.启动测试 2.MySQL安装 3.python3的安装使用 4.python管理MySQL 1.pip 2.pandas 3.p…

Axure 变量魔法:揭秘局部与全局的动态协同

前言 在 Axure 的世界中,变量是连接设计者意图与用户行为的桥梁。 局部变量,以其独特的灵活性和针对性,允许我们在特定情境下快速响应用户的操作。 而全局变量,则以其广泛的覆盖范围,为跨页面的一致性和连贯性提供了…

003集——C#数据类型 及大小端序转换——C#学习笔记

如需得到一个类型或一个变量在特定平台上的准确尺寸,可以使用 sizeof 方法。表达式 sizeof(type) 产生以字节为单位存储对象或类型的存储尺寸。下面举例获取任何机器上 int 类型的存储尺寸: using System;namespace DataTypeApplication {class Program{…

第26课 Scratch入门篇:乘坐公交车

乘坐公交车 故事背景: 又是一天结束了,在繁忙的城市里,深夜加班的上班族们挤上最后一班公交车,回到自己温馨的家 程序原理: 这节课最大的难度就是角色的设计以及角色的切换,背景的不停移动其实跟“猫咪跑…

论MATLAB强大的容错性

如何看待“低代码”开发平台的兴起? “低代码”让非专业人士也能快速构建应用程序。这种新兴技术正在挑战传统软件开发模式,引发了IT行业的广泛讨论。低代码平台是提高效率的利器,还是降低了编程门槛导致质量下降?它会改变开发者…

【报错解决】MySQL报错:sql_mode=only_full_group_by

文章目录 报错信息DataGrip 报错还原Navicat 报错还原 报错原因解决方案查看当前 sql mode方案一:临时解决方案二:永久解决方案三:使用 any_value() 或 group_concat()方案四:调整实现思路,避开 GROUP BY 使用 我是一名…

赛博朋克未来的第一个创想,低空飞行走近现实

英特尔创始人Andy Grove曾在《Only the Paranoid Survive》(只有偏执狂才能生存)这本书中提到一个观点:战略拐点往往发生在一个竞争因素,或者多个竞争因素突然变成原来10倍的时候,这时候往往预示着生意本质已经发生改变…