[Python] 什么是集成算法,什么是随机森林?随机森林分类器(RandomForestClassifier)及其使用案例

news2024/11/16 9:55:03

什么是集成算法?

集成算法是一种机器学习方法,它将多个基本的学习算法(也称为弱学习器)组合在一起,形成一个更强大的预测模型。集成算法通过对基本模型的预测进行加权平均或多数投票等方式,来产生最终的预测结果。

集成算法的核心思想是通过结合多个弱学习器的预测结果,可以提高预测的准确性和鲁棒性。弱学习器通常是指单一的学习算法,它们可能在某些情况下预测准确率较低,但通过集成可以弥补其不足。

集成算法主要分为两类:bagging和boostingbagging的思想是通过训练多个基学习器,每个基学习器使用从原始训练数据中有放回地进行采样得到的不同子集,然后将它们的预测结果进行平均。boosting的思想是通过逐步调整样本权重,让每个基学习器针对前一个学习器的错误进行训练,从而逐步提高预测的准确性。

常见的集成算法有随机森林(Random Forest)、Adaboost、Gradient Boosting等。这些算法在各种机器学习任务中都有广泛的应用,并取得了令人满意的效果。

什么是随机森林?

随机森林(Random Forest)是一种基于集成学习的机器学习算法,其目的是通过组合多个决策树模型来进行预测。随机森林通过对训练数据进行随机采样,以及在构建每个决策树节点时对特征进行随机选择,来增加模型的多样性和鲁棒性。

随机森林的训练过程可以分为以下几个步骤:

  1. 随机采样:从原始训练数据中有放回地进行随机采样,形成多个不同的训练子集。
  2. 构建决策树:对于每个采样子集,使用决策树算法构建一个决策树模型。
  3. 随机选择特征:在构建每个决策树节点时,随机选择一部分特征进行评估,选择最佳的特征来进行分割。
  4. 集成模型:将所有构建的决策树组合成随机森林模型。在进行预测时,每个决策树对样本进行预测,最终的预测结果通过多数投票或平均值来确定。

随机森林具有以下特点:

  • 可以处理高维数据和大规模数据集,适用于各种机器学习任务。
  • 随机森林能够减少过拟合的风险,通过随机采样和特征选择来增加模型的多样性。
  • 随机森林能够估计变量的重要性,根据特征在决策树中的使用情况来评估其对预测的贡献程度。

随机森林在各种实际应用中都取得了很好的效果,如分类、回归、特征选择等任务。它具有较高的准确性、鲁棒性和可解释性,是常用的机器学习算法之一。

scikit-learn中的集成算法

API Reference — scikit-learn 1.4.0 documentation

scikit-learn中的RandomForestClassifier类

 sklearn.ensemble.RandomForestClassifier — scikit-learn 1.4.0 documentationsklearn.ensemble.RandomForestClassifier — scikit-learn 1.4.0 documentation

该类的参数和决策树分类器的参数基本一样,参数的含义可以阅读:

[Python] scikit-learn - 葡萄酒(wine)数据集和决策树分类器的使用-CSDN博客

RandomForestClassifier类重要属性和接口

sklearn.ensemble.RandomForestClassifier — scikit-learn 1.4.0 documentation

随机森林中有三个非常重要的属性:.estimators_,.oob_score_以及.feature_importances_。

.estimators_

是用来查看随机森林中所有树的列表的。

.oob_score_

指的是袋外得分。随机森林为了确保林中的每棵树都不尽相同,所以采用了对训练集进行有放回抽样的方式来不断组成信的训练集,在这个过程中,会有一些数据从来没有被随机挑选到,他们就被叫做“袋外数据”。这些袋外数据,没有被模型用来进行训练,sklearn可以帮助我们用他们来测试模型,测试的结果就由这个属性 oob_score_来导出,本质还是模型的精确度。 

.feature_importances_

和决策树中的.feature_importances_用法和含义都一致,是返回特征的重要性。

随机森林的接口

与决策树完全一致,因此依然有四个常用接口:apply, fit, predict和score。

除此之外,还需要注意随机森林的predict_proba接口,

这个接口返回每个测试样本对应的被分到每一类标签的概率,标签有几个分类就返回几个概率。如果是二分类问题,则predict_proba返回的数值大于0.5的,被分为1,小于0.5的,被分为0。

传统的随机森林是利用袋装法中的规则,平均或少数服从多数来决定集成的结果,而sklearn中的随机森林是平均每个样本对应的predict_proba返回的概率,得到一个平均概率,从而决定测试样本的分类。

RandomForestClassifier使用案例

# 导入依赖模块
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
# 导入葡萄酒数据集
wine = load_wine()
print(wine.data.shape)
print(wine.target.shape)

# 建模
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3)
clf = DecisionTreeClassifier(random_state=0)
rfc = RandomForestClassifier(random_state=0)
clf = clf.fit(Xtrain,Ytrain)
rfc = rfc.fit(Xtrain,Ytrain)
score_c = clf.score(Xtest,Ytest)
score_r = rfc.score(Xtest,Ytest)
print("Single Tree:",score_c)
print("Random Tree", score_r)

# 交叉验证:数据集划分为n分,依次取每一份做测试集,每n-1份做训练集,多次训练模型以观测模型稳定性的方法
# 画出随机森林和决策树在十组交叉验证下的效果对比
rfc_l = []
clf_l = []
for i in range(10):
    rfc = RandomForestClassifier(n_estimators=25)
    rfc_s = cross_val_score(rfc, wine.data, wine.target,cv=10).mean()
    rfc_l.append(rfc_s)
    clf = DecisionTreeClassifier()
    clf_s = cross_val_score(clf, wine.data, wine.target,cv=10).mean()
    clf_l.append(clf_s)

plt.plot(range(1,11), rfc_l,label = "Random Forest")
plt.plot(range(1,11), clf_l,label = "Decision Tree")
plt.legend()
plt.show()

# n_estimators的学习曲线
superpa = []
for i in range(50):
    rfc = RandomForestClassifier(n_estimators=i+1,n_jobs=-1)
    rfc_s = cross_val_score(rfc, wine.data, wine.target, cv=10).mean()
    superpa.append(rfc_s)
print(max(superpa),superpa.index(max(superpa)))
plt.figure(figsize=[20,5])
plt.plot(range(1,51),superpa)
plt.show()

# 常用的属性和接口
rfc = RandomForestClassifier(n_estimators=25)
rfc = rfc.fit(Xtrain, Ytrain)
print('feature_importances_:', rfc.feature_importances_, '\n')
print('estimators_:', rfc.estimators_, '\n')
print('oob_score:', rfc.oob_score, '\n' )
if rfc.oob_score :
    print('oob_score_:', rfc.oob_score_ , '\n')
print('score:', rfc.score(Xtest,Ytest), '\n')
print('apply:', rfc.apply(Xtest), '\n')
print('predict:', rfc.predict(Xtest), '\n')
print('predict_proba:', rfc.predict_proba(Xtest))

参考资料

菜菜的机器学习sklearn

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

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

相关文章

【Leetcode】两数之和

目录 题目: 解法1:暴力双for 1.想到的第一种方法两for循环解 复杂度分析 解法2:hash表 总结: 笔记: 题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标…

简单区间DP

文章目录 什么是区间DpAcWing 282. 石子合并题意分析思路解析状态表示状态计算 CODE需要注意的问题 什么是区间Dp 区间Dp指的是某些问题可以用区间来划分解决。 AcWing 282. 石子合并 题目链接:穿梭时间的画面的钟 题意分析 从一排石子中选择相邻的两堆进行合并…

2024-01-25 力扣高频SQL50题目1193每月交易

1.1193每月交易 1 count可以这样用。。 COUNT(IF(state approved, 1, NULL)) AS approved_count 如果 COUNT(if(state approved,1,0)),这里变成0,就不对了。因为count计数时候,只要里面不是null,就会算进去。 sum(if(state …

(学习日记)2024.01.27

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

行为型设计模式—迭代器模式

迭代器模式:也叫作游标模式,能在不暴露复杂数据结构内部细节的情况下遍历其中所有的元素。在迭代器的帮助下, 客户端可以用一个迭代器接口以相似的方式遍历不同集合中的元素。 当集合背后为复杂的数据结构,且希望对客户端隐藏其复…

漏洞原理文件上传漏洞

一 文件上传漏洞介绍(理论) 文件上传漏洞是一种常见的web应用程序漏洞,允许攻击者向服务器上传恶意文件。这种漏洞可在没有恰当的安全措施的情况下,将任意类型的文件上传到服务器上,从而可能导致以下安全问题&#xff…

【lesson1】高并发内存池项目介绍

文章目录 这个项目做的是什么?这个项目的要求的知识储备和难度?什么是内存池池化技术内存池内存池主要解决的问题malloc 这个项目做的是什么? 当前项目是实现一个高并发的内存池,他的原型是google的一个开源项目tcmalloc&#xf…

Python 字典及常见应用(Python Dctionary)

字典是python的内置基本数据类型之一,其他语言中可能会被称为“关联存储”或“关联数组”。它是一种映射关系,以包含在{}中的"键:值"对表示。字典是一种可变对象,键没有顺序。其主要用途是通过关键字存储、提取值。 目录 一、字典的…

3分钟搞定幻兽帕鲁联机,一键部署专属服务器

3分钟搞定幻兽帕鲁联机,一键部署专属服务器 访问帕鲁专题活动页 登录阿里云官网,用钉钉或者支付宝app扫码注册新用户(新用户福利较多,优惠力度大) 进入阿里云游戏联机服务器专题页,点击 一键购买及部署 即可…

记录一条sql查询:以逗号隔开的id字符串的查询

目录 前言表结构sql语句 前言 在一个项目中有两张表,一张是商品码表,一张是记录出库单明细的出库记录表,记录表中有一个字段保存了以逗号隔开的商品码表的id字符串,需要根据出库明细id查找到对应出库的商品码。 表结构 goods_det…

TypeScript(六) 循环语句

1. TypeScript循环语句 1.1. 简述 有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。   循环语句允许我们多次执行一个语句或语句组…

【开源】JAVA+Vue.js实现大学兼职教师管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 学生教师管理3.3 课程管理模块3.4 授课管理模块3.5 课程考勤模块3.6 课程评价模块3.7 课程成绩模块3.8 可视化图表 四、免责说明 一、摘要 1.1 项目介绍 大学兼职教师管理系统,旨…

阿里云0基础1分钟搞定幻兽帕鲁游戏联机服务器搭建

幻兽帕鲁(Palworld)是一款备受欢迎的多人在线角色扮演游戏,让玩家可以与其他玩家一起探索、组队和战斗。为了能顺畅地体验游戏,搭建一个高效、稳定的游戏服务器至关重要。阿里云提供快速、简化的服务器搭建方案,新手小…

代码随想录 Leetcode112. 路径总和

题目: 代码(首刷看解析 2024年1月30日 递归回溯 逻辑清晰版): class Solution { public:bool traversal(TreeNode* cur,int sum) {if (!cur->left && !cur->right && sum 0) return true;if (!cur->left &&am…

iOS 17.4 苹果公司正在加倍投入人工智能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

开发AI软件,构建多用户AIGC系统,实现图文创作及源码交付

在AI技术不断进步的今天,AI软件开发已成为一个热门的领域。而多用户AIGC系统作为AI软件开发的重要项目之一,呈现出极大的潜力和前景。 多用户AIGC系统旨在为用户提供一个全面的图文创作平台,借助AI的力量,使创作过程更加智能化和…

代码随想录算法训练营DAY7 | 哈希表(2)

一、LeetCode 454 四数相加II 题目链接:454.四数相加IIhttps://leetcode.cn/problems/4sum-ii/description/ 思路:建立HashMap,Key存储nums1、nums2数对之和,Value存储数对和出现次数,再遍历nums3、nums4数对确定答案…

研学活动报名平台源码开发方案

一、项目背景与目标 (一)项目背景 研学活动报名平台旨在为活动组织者提供方便快捷的研学活动管理工具,同时为用户提供全面的活动搜索、报名和支付等功能。通过该系统,活动组织者能够更好地管理活动报名信息,用户也可…

【Lazy ORM 整合druid 实现mysql监控】

Lazy ORM 整合druid 实现mysql监控 JDK 17 Lazy ORM框架地址 up、up欢迎start、issues 当前项目案例地址 框架版本描述spring-boot3.0.7springboot框架wu-framework-web1.2.2-JDK17-SNAPSHOTweb容器Lazy -ORM1.2.2-JDK17-SNAPSHOTORMmysql-connector-j8.0.33mysql驱动druid-…

自动化测试接口测试前的【准备及思路】

1、什么是接口测试 客户端(前端)与服务端(后端)的关系,一般小编会理解为“服务端负责赚钱养家,客户端负责貌美如花”。客户端更注重的是功能呈现及用户体验,怎么将强大的功能精彩的界面呈现给不…