《机器学习》决策树 集成学习 随机森林 参数及实例解析

news2024/9/20 0:44:01

目录

一、集成学习

1、含义

2、集成学习代表

        1)bagging方法

        2)boosting方法

        3)stacking方法

二、随机森林

1、什么是随机森林

2、特点

        1)数据采样随机

        2)特征选取随机

        3)森林

        4)基分类器为决策树

3、为什么使用随机森林?

4、随机森林生成步骤

5、库及参数介绍

1)n_estimators :(随机森林独有)

2)criterion:节点分割依据(同决策树)

3)max_depth:决策树最大深度,最大层数(同决策树)

4)min_samples_split :非叶子节点最小样本数 (同决策树)

5)min_samples_leaf  :最小叶子节点数样本数 (同决策树)

6)min_weight_fraction_leaf : (同决策树)

7)max_features : 最大特征数 (随机森林独有)

8)max_leaf_nodes:最大叶子结点数 (同决策树)

9)min_impurity_split:(同决策树)

10)bootstrap=True (随机森林独有)

11)n_jobs=1:

6、代码实现


一、集成学习

1、含义

        集成学习(Ensemble Learning)是一种通过将多个机器学习模型组合起来来解决问题的方法。在集成学习中,多个模型被训练并预测,然后通过一定的策略将它们的预测结果进行组合,从而得到最终的预测结果。

        集成学习的基本理论基础是"集思广益",即通过结合多个模型的优点提高整体的性能表现。通过集成学习,可以减小单一模型的局限性降低模型的方差提高模型的鲁棒性和预测稳定性。集成学习可以应用于分类问题、回归问题和聚类问题等多个领域。

2、集成学习代表

        1)bagging方法

                典型:随机森林

        2)boosting方法

                典型:Xgboost

        3)stacking方法

                典型:堆叠模型

二、随机森林

1、什么是随机森林

        随机森林(Random Forest)是一种集成学习方法,基于决策树构建的模型。随机森林在训练过程中生成多个决策树,并通过投票或平均的方式来进行最终的预测。

如图所示,即为随机森林的模型:

2、特点

        1)数据采样随机

        在每个决策树的训练过程中,随机森林会从原始训练集中有放回地抽取样本,用于构建决策树。这样可以增加样本的多样性,减小过拟合的风险。

        2)特征选取随机

        在每个决策树的训练过程中,随机森林会从原始训练集中有放回地抽取样本,用于构建决策树。这样可以增加样本的多样性,减小过拟合的风险。

        3)森林

        在进行预测时,随机森林会对每个决策树的预测结果进行投票(分类问题)或求平均(回归问题),以得到最终的预测结果。

        4)基分类器为决策树

        随机森林由多个决策树构成,每个决策树都是独立训练的。每个决策树都对输入数据进行特征选择和分裂,通过递归地选择最佳分割特征和阈值来构建决策树。

3、为什么使用随机森林?

        随机森林具有良好的泛化能力,对于处理高维数据大规模数据集也有较好的效果。它可以用于分类回归问题,并且能够给出特征的重要性评估,用于特征选择特征工程

        随机森林的训练速度较快,并且对于缺失值异常值具有较好的处理能力。因此,随机森林是机器学习中一种常用的集成学习方法。

4、随机森林生成步骤

5、库及参数介绍

class sklearn.ensemble.RandomForestClassifier(n_estimators=’warn’, 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, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)
1)n_estimators :(随机森林独有)

        随机森林中决策树的个数。

        在0.20版本中默认是10个决策树;

        在0.22版本中默认是100个决策树;

2)criterion节点分割依据(同决策树)

        默认为基尼系数,可选entropy,信息增益

3)max_depth:决策树最大深度,最大层数(同决策树

        default=(None)设置决策树的最大深度,默认为None。

        (1)数据少或者特征少的时候,可以不用管这个参数,按照默认的不限制生长即可

        (2)如果数据比较多特征也比较多的情况下,可以限制这个参数,范围在10~100之间比较好

4)min_samples_split :非叶子节点最小样本数 (同决策树)

        这个值限制了子树继续划分的条件,如果某节点的样本数少于设定值,则不会再继续分裂。默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则建议增大这个值。

5)min_samples_leaf  :最小叶子节点数样本数 (同决策树)

        这个值限制了叶子节点最少的样本数

6)min_weight_fraction_leaf : (同决策树)

         这个值限制了叶子节点所有样本权重和的最小值,

7)max_features : 最大特征数 (随机森林独有)

        随机森林允许单个决策树使用特征的最大数量。选择最适属性时划分的特征不能超过此值。

当为整数时,即最大特征数;当为小数时,训练集特征数*小数;

8)max_leaf_nodes:最大叶子结点数 (同决策树)

        通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。

9)min_impurity_split:(同决策树)

        这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动默认值1e-7。

10)bootstrap=True (随机森林独有)

        是否有放回的采样,按默认,有放回采样

11)n_jobs=1:

        并行job个数。这个在是bagging训练过程中有重要作用,可以并行从而提高性能。1=不并行;n:n个并行;-1:CPU有多少core,就启动多少job。

6、代码实现

import pandas as pd
from sklearn import tree
from sklearn.model_selection import train_test_split

# 回执混淆矩阵
def cm_plot(y, yp):    # 可视化混淆矩阵,网上都是包装好的,可以直接复制使用
    from sklearn.metrics import confusion_matrix
    import matplotlib.pyplot as plt

    cm = confusion_matrix(y, yp)
    plt.matshow(cm, cmap=plt.cm.Blues)
    plt.colorbar()
    for x in range(len(cm)):
        for y in range(len(cm)):
            plt.annotate(cm[x, y], xy=(y, x), horizontalalignment='center',verticalalignment='center')
            plt.ylabel('True label')
            plt.xlabel('Predicted label')
    return plt


# data = pd.read_csv('data.csv')
df = pd.read_csv("spambase.csv")  # 导入数据

x = df.iloc[:,:-1]  # 切分特征集和标签集
y = df.iloc[:,-1]

xtrain,xtest,ytrain,ytest = train_test_split(x,y,test_size=0.2,random_state=100)  # 对原始数据集进行切分

# 随机森林
from sklearn.ensemble import RandomForestClassifier   # 导入随机森林库
# 定义参数
rf = RandomForestClassifier(   # 定义模型并调整参数
    n_estimators=100,  # 决策树个数
    max_features=0.8,  # 最多传递多少个特征 80%
    random_state=0   # 随机种子
)

rf.fit(xtrain,ytrain)  # 对训练集进行训练

train_predicted = rf.predict(xtrain)  # 预测训练集本身正确率

from sklearn import metrics
# 打印分类报告
print(metrics.classification_report(ytrain,train_predicted))
# 绘制混淆矩阵
cm_plot(ytrain,train_predicted).show()

test_predicted = rf.predict(xtest)  # 对测试集进行测试,同时打印分类报告
print(metrics.classification_report(ytest,test_predicted))
cm_plot(ytest,test_predicted).show()

import matplotlib.pyplot as plt   # 导入绘图库

importances = rf.feature_importances_  # 将rf模型中特征的重要性评估保存在importances变量中
im = pd.DataFrame(importances,columns=['importances'])  # 将importances转换成DataFrame对象,并设置列名为importances
clos = df.columns  # 将数据集df的列名保存在clos变量中
clos_1 = clos.values   # 将clos转换成一个一维numpy数组,存放在clos_1中
clos_2 = clos_1.tolist()   # 将clos_1转换成一个python列表
clos = clos_2[0:-1]   # 取出除了最后一个的全部数据
im['clos'] = clos   #  将处理后的特征列名增加到DataFrame im中

im = im.sort_values(by=['importances'],ascending=False)[:10]  # 根据特征重要性的值对im进行降序排序,并选取前十个重要特征。

index = range(len(im))  # 生成一个范围对象,表示条形图的纵轴刻度
plt.yticks(index,im.clos)  # 设置纵轴的刻度标签为im中的特征列名
plt.barh(index,im['importances'])  # 绘制水平条形图,横轴表示特征重要性,纵轴表示特征名。
plt.show()

运行结果如下:

 

 

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

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

相关文章

LLAMA模型解析:快速掌握大模型LLM推理入门技巧

本文借助llama这个模型快速入门LLM的推理过程,技术细节很多都是通用的,也适合其他的LLM。本篇也可以作为CV快速入门NLP简易指南。 本文借助llama这个模型快速入门LLM的推理过程,很多技术细节都是通用的,也适合其他的LLM。这篇文章…

普元EOS-微前端调用base基座的ajax

1 前言 微前端调用EOS应用的服务或API,需要引入base基座,然后使用base基座中的ajax方法。 本文将介绍微前端的高开和低开使用base基座的Ajax的方法。 强烈建议不要自己引入axios或其他ajax库,因为EOS的服务接口都要求身份验证和授权&#…

分页查询面试记录和面试详情

文章目录 1.分页查询面试记录1.req和vo1.InterviewHistoryReq.java2.InterviewHistoryVO.java 2.InterviewController.java3.service1.InterviewHistoryService.java2.InterviewHistoryServiceImpl.java 4.测试 2.查询面试详情1.InterviewQuestionHistoryVO.java2.InterviewCon…

适合开发人员的网页爬虫工具DrissionPage

DrissionPage是一个基于Python的网页自动化工具,它集成了Selenium和Requests的功能,既能够控制浏览器进行用户界面的模拟操作,也能够直接收发数据包进行数据的获取和处理。 开源地址:DrissionPage: 基于python的网页自动化工具。既能控制浏览器,也能收发数据包。可兼顾浏…

CLion调试ROS(包括launch启动的ROS)

打开一个终端,切换到工作空间目录(形如:~/catkin_ws)。 在终端输入,source ./devel/setup.bash 启动Clion,一定要在输入上述命令的窗口启动Clion,否则会存在一些问题。 打开工程,这里也是一个…

【Java】——Java实现数组元素反转的两种方法

在编程中,我们经常会遇到需要对数组元素进行反转的需求。例如,给定一个整数数组arr {1, 2, 3, 4, 5},我们需要将其反转为{5, 4, 3, 2, 1}。下面我们将介绍两种实现数组元素反转的方法。 方法一:遍历数组一半的长度进行元素互换 …

Spring注解:优雅管理依赖的艺术

在Java企业级开发的广阔天地中,Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力,成为了众多开发者的首选。而Spring注解,作为这一框架的核心特性之一,更是将依赖管理提升到…

如何通过数字化资产管理提升企业运营效率

在当今快速发展的商业环境中,企业的资产管理正逐步向数字化迈进。数字化资产管理系统不仅帮助企业提高资产利用率,还能降低管理成本,提升整体运营效率。常达智能物联为各行业企业提供了领先的数字化资产管理解决方案,帮助企业实现…

AI入门指南(四):分类问题、回归问题、监督、半监督、无监督学习是什么?

文章目录 一、前言二、分类问题、回归问题是什么?分类问题概念常见算法分类问题的实际应用:银行贷款审批案例 回归问题概念常见算法回归问题实际应用:线性回归模型预测房价 小结 三、监督、半监督、非监督学习是什么?监督学习非监…

C语言基础(十五)

指针的使用&#xff1a; 测试代码1&#xff1a; #include <stdio.h> // 标准的 main 函数声明&#xff0c;包括可选的 envp 参数 int main(int argc, char *argv[], char *envp[]) { // argc 命令行参数的数量&#xff08;包括程序名&#xff09; // argv 指向字…

github源码指引:一个自制代码生成器(嵌入式脚本语言)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码目录&#xff1a;CodeTemp…

Global Illumination_Reflective Shadow Maps Deep Optimizations

之前写过一篇Global Illumination_Reflective Shadow Maps&#xff08;RSM&#xff09;、Virtual Point Light&#xff08;VPL&#xff09;&#xff0c;近期重拾传统GI技术的实际工程场景中的应用&#xff0c;于是从效率方面对RSM、LPV、VCT技术进行效率优化&#xff0c;后续逐…

HTML 全解析:从基础到实战

一、简介 HTML&#xff08;HyperText Markup Language&#xff09;即超文本标记语言&#xff0c;是用于创建网页的标准标记语言。它通过各种标签来定义网页的结构和内容&#xff0c;使得浏览器能够正确地显示网页。HTML 文档由 HTML 元素组成&#xff0c;这些元素通过标签来表…

桌面整理大师 - Mac(苹果电脑)桌面整理工具软件

桌面整理大师 与 DeskWidgets 来自同一开发者&#xff0c;是一款专为 macOS 打造的桌面分区整理工具。 与 DeskWidgets 的文件分区组件相比&#xff0c;桌面整理大师拥有更加强大的功能&#xff0c;支持调整分区的大小和样式、可快速查看非桌面目录的文件…… 桌面整理大师的宗…

【Docker】Docker学习02 | docker-cli的基本命令

本文首发于 ❄️慕雪的寒舍 简单了解一下docker client的常用命令&#xff0c;更多命令可以查看完整命令列表。不同命令之间的关系&#xff0c;可以查看下图。 如果你看不到图片&#xff0c;不用担心&#xff0c;后面对每个命令进行介绍的时候&#xff0c;会提到它们的作用的。…

内存之RAM、SRAM、DRAM、ROM、FLASH、SDRAM、DDR*(一篇文章就懂)

内存之RAM、SRAM、DRAM、ROM、FLASH、SDRAM、DDR* 内存 内存&#xff08;Memory&#xff09;指的是内存存储器&#xff0c;又称为主存&#xff0c;是CPU用来直接寻址和存储的空间&#xff0c;它相当于一座桥梁&#xff0c;用以负责诸如硬盘、主板、显卡等硬件上的数据与处理器…

高性价比开放式运动耳机有哪些?五大高性价比开放式耳机分享

作为一名数码爱好者&#xff0c;从93年入坑耳机、音响等各类电子产品以来&#xff0c;一直在测试不同品牌、不同价位的产品。现在开放式耳机比较热门&#xff0c;我自然也是不能错过的&#xff0c;开放式耳机拥有很多优点&#xff0c;很多采用人体工学设计&#xff0c;能够更加…

UE5打包iOS运行查看Crash日志

1、查看Crash 1、通过xCode打开设备 2、选择APP打开最近的日志 3、选择崩溃时间点对应的日志 4、选择对应的工程打开 5、就能看到对应的Crash日志 2、为了防止Crash写代码需要注意 1、UObject在RemoveFromRoot之前先判断是否Root if (SelectedImage && Selecte…

fl studio mobile2024最新官方版V4.6.8安卓版+iOS苹果版

fl studio mobile&#xff0c;一款非常好用的音乐制作软件。该软件具有丰富多样的音乐类型让大家选择&#xff0c;内置多个好用的编辑工具、渲染工具、特效工具等可以使用。用户可以自由使用软件中的任何道具&#xff0c;直接在手机上编曲&#xff0c;进行音乐创作&#xff0c;…

买超声波清洗机什么牌子好?好用的超声波清洗机推荐

尽管超声波清洗机对不少人而言较为新鲜&#xff0c;尤其是对非眼镜佩戴者&#xff0c;但它其实并不陌生&#xff0c;常现身于眼镜店作为专业清洁工具。有人或许认为&#xff0c;拂去眼镜尘埃仅需一擦即可&#xff0c;实际上&#xff0c;长时间佩戴后&#xff0c;镜片与框架累积…