随机森林原理sklearn实现

原理

  1. 定义
    随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,
    而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。
    随机森林的名称中有两个关键词,一个是“随机”,一个就是“森林”。
随机森林应该是机器学习算法时最先接触到的集成算法,集成学习的家族:
Bagging:  个体评估器之间不存在强依赖关系,一系列个体学习器可以并行生成。代表算法:随机森林(Random Forest)
Boosting:个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成。代表算法:AdaBoost、GBDT、XGBoost、LightGBM
  1. 随机森林的生成
     每棵树的按照如下规则生成:
    1)如果训练集大小为N,对于每棵树而言,
    随机且有放回地从训练集中的抽取N个训练样本(这种采样方式称为bootstrap sample方法),作为该树的训练集;
    2)如果每个样本的特征维度为M,指定一个常数m<<M,
    随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;
    3)每棵树都尽最大程度的生长,并且没有剪枝过程。

  2. 随机森林分类效果(错误率)与两个因素有关

森林中任意两棵树的相关性:相关性越大,错误率越大;
森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。

减小**特征选择个数m**,树的相关性和分类能力也会相应的降低;
增大m,两者也会随之增大。
所以关键问题是**如何选择最优的m**(或者是范围),这也是随机森林唯一的一个参数。
  1. 随机森林的优点:
    1)模型随机性强,不易overfit
    抗噪性强,表示对异常点不敏感
    2)处理高维数据相对更快(相对于决策树)
    3)树状结构,模型可解释性高,可以告诉你每个特征的重要性
    缺点:
    1)模型往往过于General,不具备处理过于困难样本的能力
    打个比方:三个学渣放在一起可能有所进步,但是对于过于困难的问题可能也无法解决

实例

# 参考:  https://blog.csdn.net/HRMEMEDA/article/details/125678213import pandas as pd
import numpy as np
import seaborn as snsfrom sklearn.model_selection import train_test_split
from sklearn.preprocessing import OrdinalEncoder
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn import ensemble
from sklearn.model_selection import cross_val_score
from sklearn.metrics import roc_curve, aucimport matplotlib.pyplot as plt# %matplotlib inline
plt.rcParams['font.size'] = 24# 数据准备
data = sns.load_dataset('titanic')  # 导入泰坦尼克号生还数据
# data# 数据预处理
data.replace(to_replace=r'^\s*$', value=np.nan, regex=True, inplace=True)  # 把各类缺失类型统一改为NaN的形式
data.isnull().mean()
del data['deck']  # 删除‘deck’列
del data['who']
del data['adult_male']
del data['class']
del data['alone']data['age'].fillna(np.mean(data.age), inplace=True)  # 年龄特征使用均值对缺失值进行填补
data['embarked'].fillna(data['embarked'].mode(dropna=False)[0], inplace=True)  # 文本型特征视同众数进行缺失值填补x = data.drop(['alive', 'survived', 'embark_town'], axis=1)  # 取出用于建模的特征列X
label = data['survived']  # 取出标签列Yoe = OrdinalEncoder()  # 定义特征转化函数
# 把需要转化的特征都写进去
x[['sex', 'embarked']] = oe.fit_transform(x[['sex', 'embarked']])
x.head()# 划分训练集、测试集
xtrain, xtest, ytrain, ytest = train_test_split(x, label, test_size=0.3)
xtrain.head()"""
随机森林所有超参数
sklearn.ensemble.RandomForestClassifier (n_estimators=100, criterion=’gini’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, random_state=None, bootstrap=True, oob_score=False, n_jobs=None, verbose=0, warm_start=False)
"""# 下面把随机森林与单个决策树的拟合效果放在一起对比# 单颗决策树
clf = DecisionTreeClassifier(class_weight='balanced', random_state=37)
clf = clf.fit(xtrain, ytrain)  # 拟合训练集
score_c = clf.score(xtest, ytest)  # 输出测试集准确率# 随机森林
rfc = RandomForestClassifier(class_weight='balanced', random_state=37)
rfc = rfc.fit(xtrain, ytrain)
score_r = rfc.score(xtest, ytest)# 决策树 预测测试集
y_test_proba_clf = clf.predict_proba(xtest)
false_positive_rate_clf, recall_clf, thresholds_clf = roc_curve(ytest, y_test_proba_clf[:, 1])
# 决策树 AUC指标
roc_auc_clf = auc(false_positive_rate_clf, recall_clf)# 模型效果# 随机森林 预测测试集
y_test_proba_rfc = rfc.predict_proba(xtest)
false_positive_rate_rfc, recall_rfc, thresholds_rfc = roc_curve(ytest, y_test_proba_rfc[:, 1])
# 随机森林 AUC指标
roc_auc_rfc = auc(false_positive_rate_rfc, recall_rfc)# 画图 画出俩模型的ROC曲线
plt.plot(false_positive_rate_clf, recall_clf, color='blue', label='AUC_clf=%0.3f' % roc_auc_clf)
plt.plot(false_positive_rate_rfc, recall_rfc, color='orange', label='AUC_rfc=%0.3f' % roc_auc_rfc)
plt.legend(loc='best', fontsize=15, frameon=False)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.ylabel('Recall')
plt.xlabel('Fall-out')
plt.show()# 调参
# 定义空列表,用来存放每一个基学习器数量所对应的AUC值
superpa = []
# 循环200次
for i in range(200):rfc = ensemble.RandomForestClassifier(n_estimators=i + 1, class_weight='balanced', random_state=37, n_jobs=10)rfc = rfc.fit(xtrain, ytrain)  # 拟合模型y_test_proba_rfc = rfc.predict_proba(xtest)  # 预测测试集false_positive_rate_rfc, recall_rfc, thresholds_rfc = roc_curve(ytest, y_test_proba_rfc[:, 1])roc_auc_rfc = auc(false_positive_rate_rfc, recall_rfc)  # 计算模型AUCsuperpa.append(roc_auc_rfc)  # 记录每一轮的AUC值print(max(superpa), superpa.index(max(superpa)))  # 输出最大的AUC值和其对应的轮数
plt.figure(figsize=[20, 5])
plt.plot(range(1, 201), superpa)
plt.show()

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

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

相关文章

拥塞控制的作用和方法

目录 1.概念 2.慢启动 3.快速恢复 4.快速重传 1.概念 TCP数据流的控制. 为了保证可靠传输和提高网络通信质量,内核需要对TCP数据流进行控制 TCP数据流控制的两个方面:超时重传和拥塞控制, 在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等&#xff0c;都是…

复合查询【MySQL】

文章目录 复合查询测试表 单表查询多表查询子查询单行子查询多行子查询IN 关键字ALL 关键字ANY 关键字 多列子查询 合并查询 复合查询 测试表 雇员信息表中包含三张表&#xff0c;分别是员工表&#xff08;emp&#xff09;、部门表&#xff08;dept&#xff09;和工资等级表&…

11 数据库优化

文章目录 数据库优化数据库设计范式MySQL存储引擎字段数据类型和键的选择explain语句SQL优化表的拆分 数据库优化 数据库设计范式 设计关系数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数据库&#xff0c;这些不同的规范要求被称为不同的范式。 目…

命令行hive的基本操作

使用SQL语句在命令行创建Hive库&#xff1a; CREATE DATABASE database_name;其中&#xff0c;database_name是要创建的数据库的名称。例如&#xff1a; CREATE DATABASE mydatabase;这将在Hive中创建一个名为"mydatabase"的数据库。 使用SQL语句在命令行创建Hive…

OS-Copilot:实现具有自我完善能力的通用计算机智能体

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ AI 缩小了人类间的知识和技术差距 论文标题&#xff1a;OS-Copilot: Towards Generalist Computer Agents with Self-Improvement 论文链接&#xff1a;https://arxiv.org/abs/2402.07456 项目主页&a…

【工具相关】zentao用例管理平台部署实践

文章目录 一、备份还原1、数据备份1.1、前言1.2、版本备份1.3、数据备份 2、数据恢复2.1、版本恢复2.2、数据恢复 二、问题处理1、ERROR: SQLSTATE[HY000] [2002] Connection refused 一、备份还原 1、数据备份 1.1、前言 禅道系统从10.6版本以后&#xff0c;新增数据备份设…

Go语言必知必会100问题-20 切片操作实战

前言 有很多gopher将切片的length和capacity混淆&#xff0c;没有彻底理清这两者的区别和联系。理清楚切片的长度和容量这两者的关系&#xff0c;有助于我们合理的对切片进行初始化、通过append追加元素以及进行复制等操作。如果没有深入理解它们&#xff0c;缺少高效操作切片…

云服务器python版本冲突解决(awd平台搭建)

文章目录 yum和apt-getdockerpython环境问题 大家在使用python时&#xff0c;难免会使用他人的代码&#xff0c;自己是python3&#xff0c;而别人的是python2.我们直接运行会报错(比如print函数括号的问题)。但是去修改代码又很麻烦。这里给大家推荐conda。我以我搭建awd平台为…

【Java.mysql】——增删查改(CRUD)之 增查(CR) 附加数据库基础知识

目录 &#x1f6a9;数据库操作 &#x1f388;创建数据库 &#x1f388;使用数据库 &#x1f388;删除数据库 &#x1f6a9;数据类型 &#x1f6a9;表的操作 &#x1f388;创建表 &#x1f308;查看表结构 &#x1f388;删除表 ❗练习(综合运用) &#x1f5a5;️新增…

微信小程序提示确认框

如图所示&#xff0c;如何弹出微信小程序自带默认弹框&#xff1f; 代码如下&#xff1a; wx.showModal({ title: 确认, content: 确定要删除吗&#xff1f;, success (res) { if (res.confirm) { console.log(用户点击确定) } else if (res.cancel) { console.log(用…

【基础算法】二分模板及常见题型

整数二分 模板 模板来自于AcWing&#xff1a; int[] nums new int[n];// 模板1: // l mid // mid l r 1 >> 1; int l 0, r n - 1; // [0, n - 1] while (l < r) {int mid l r 1 >> 1;if (check(mid)) l mid;else r mid - 1; }// 模板2: // r …

STM32CubeIDE基础学习-STM32CubeIDE软件程序仿真调试

STM32CubeIDE基础学习-STM32CubeIDE软件程序仿真调试 前言 一般编写完程序后都会进行编译&#xff0c;看结果是否有存在语法错误&#xff0c;确认没有语法错误之后再进行代码的下载观察硬件执行是否和软件编程预期的结果一致&#xff0c;如果发现硬件执行达不到预期现象&#…

JWT令牌技术

写在前面 我以为&#xff0c;最美的日子&#xff0c;当是晨起侍花&#xff0c;闲来煮茶&#xff0c;阳光下打盹&#xff0c;细雨中漫步&#xff0c;夜灯下读书&#xff0c;在这清浅时光里&#xff0c;一半烟火&#xff0c;一半诗意&#xff0c;任窗外花开花落&#xff0c;云来云…

JVM优化Java代码的秘密:深入解析JVM的内部工作机制

JVM优化Java代码的秘密&#xff1a;深入解析JVM的内部工作机制 当我们谈论Java性能优化时&#xff0c;JVM&#xff08;Java虚拟机&#xff09;的优化策略是无法回避的话题。JVM是Java应用的运行环境&#xff0c;它负责将Java字节码转换为可在特定操作系统和硬件上运行的机器码…

no main manifest attribute,in xxx.jar(关于Spring项目,无法在云服务器上运行jar包的解决方法)

目录 问题详情 解决方法 问题详情 项目可以打包正常&#xff0c;但是云服务器上无法运行&#xff0c;报错&#xff1a;no main manifest attribute&#xff0c;in xxx.jar 解决方法 1.查看pom.xml配置文件&#xff0c;检查以下代码&#xff0c;没有则加上&#xff1a; <…

B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】

导语&#xff1a; 详解B树与跳表的结构及区别&#xff0c;描述B树与跳表新增数据的过程&#xff0c;解释MySQL与Redis选择对应结构的原因。 mysql数据表里直接遍历这一行行数据&#xff0c;性能就是O(n)&#xff0c;比较慢。为了加速查询&#xff0c;使用了B树来做索引&#x…

HTML5 Web Worker之性能优化

描述 由于 JavaScript 是单线程的&#xff0c;当执行比较耗时的任务时&#xff0c;就会阻塞主线程并导致页面无法响应&#xff0c;这就是 Web Workers 发挥作用的地方。它允许在一个单独的线程&#xff08;称为工作线程&#xff09;中执行耗时的任务。这使得 JavaScript 代码可…

第三周组会——动态多目标优化算法

首先对上周写的DF测试函数进行了优化和增加 DF4 pf: DF5测试函数PF DF6 遇到的问题,在算法问题的参数taut(变化频率)默认是10数字变小时就算是9,算法会跟不上收敛 新读的文献 A Novel Dynamic Multiobjective Optimization Algorithm With Hierarchical Response System 一…

linux系统docker的使用命令

docker命令 命令镜像操作镜像查找镜像拉取查看镜像制作过程推送镜像查看镜像修改名字查看镜像的详细信息删除镜像查看镜像所占空间 容器操作运行容器查看容器查看容器详细信息删除容器启动容器停止容器重启容器暂停容器激活容器杀死容器进入容器查看容器的日志复制文件重命名容…

1.2_3 TCP/IP参考模型

文章目录 1.2_3 TCP/IP参考模型&#xff08;一&#xff09;OSI参考模型与TCP/IP参考模型&#xff08;二&#xff09;5层参考模型&#xff08;三&#xff09;5层参考模型的数据封装与解封装 1.2_3 TCP/IP参考模型 &#xff08;一&#xff09;OSI参考模型与TCP/IP参考模型 TCP/I…