首页 > 其他分享 >《机器学习》—— 随机森林实现二分类问题

《机器学习》—— 随机森林实现二分类问题

时间:2024-08-25 21:27:06浏览次数:12  
标签:None 机器 features max 分类 随机 test 节点

文章目录

一、什么是随机森林

随机森林(Random Forest)是一种集成学习方法,属于监督学习算法,主要用于分类和回归任务。它通过在数据集的多个子集上构建多个决策树,并输出这些树预测结果的众数(对于分类问题)或平均值(对于回归问题)来工作。随机森林以其高准确率不易过拟合以及能够有效评估变量的重要性等特点而广受欢迎。

二、随机森林的主要特点

  • 集成学习:通过结合多个决策树的预测结果来做出最终决策,可以提高模型的泛化能力。
  • 随机性:在构建每棵树时,随机选择部分特征(特征子集)和样本(有放回抽样,称为bootstrap sampling),这有助于减少过拟合并增加模型的多样性。
  • 并行性:由于每棵树的构建是独立的,因此可以并行化计算,提高训练速度。
  • 易于使用和调参:Scikit-learn 提供了易于使用的接口和丰富的参数,使得随机森林模型易于构建和调优。

三、随机森林参数

  • Python中是使用sklearn库中的 sklearn.ensemble 中的 RandomForestClassifier 类来实现随机森林的方法

  • sklearn.ensemble.RandomForestClassifier 中有很多的参数的默认值如下:

    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
    )
    
  • 一些重要参数的讲解:

    • n_estimators :

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

      • 节点分割依据,默认为基尼系数。
      • 可选【entropy:信息增益】
    • max_depth

      • default=(None)设置决策树的最大深度,默认为None。
      • (1)数据少或者特征少的时候,可以不用管这个参数,按照默认的不限制生长即可
      • (2)如果数据比较多特征也比较多的情况下,可以限制这个参数,范围在10~100之间比较好】
    • min_samples_split :

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

      • 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
      • 叶是决策树的末端节点。 较小的叶子使模型更容易捕捉训练数据中的噪声。 一般来说,我更偏向于将最小叶子节点数目设置为大于50。在你自己的情况中,你应该尽量尝试多种叶子大小种类,以找到最优的那个。
      • 比如,设定为50,此时,上一个节点(100个样本)进行分裂,分裂为两个节点,其中一个节点的样本数小于50个,那么这两个节点都会被剪枝
    • min_weight_fraction_leaf :

      • 这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。【一般不需要注意】
    • max_features :

      • 随机森林允许单个决策树使用特征的最大数量。选择最适属性时划分的特征不能超过此值。
      • 当为整数时,即最大特征数;当为小数时,训练集特征数*小数;
        if “auto”, then max_features=sqrt(n_features).
        If “sqrt”, then max_features=sqrt(n_features).
        If “log2”, then max_features=log2(n_features).
        If None, then max_features=n_features.
      • 增加max_features一般能提高模型的性能,因为在每个节点上,我们有更多的选择可以考虑。 然而,这未必完全是对的,因为它降低了单个树的多样性,而这正是随机森林独特的优点。 但是,可以肯定,你通过增加max_features会降低算法的速度。 因此,你需要适当的平衡和选择最佳max_features。
    • max_leaf_nodes:

      • 通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。
      • 比如,一颗决策树,如果不加限制的话,可以分裂100个叶子节点,如果设置此参数等于50,那么最多可以分裂50个叶子节点
    • min_impurity_split:

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

      • 是否有放回的采样,按默认,有放回采样
    • n_jobs=1

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

四、案例的代码实现

  • 这里有一份关于统计出现在文件中的关键字的概率,来判断此文件是否删除的数据集

    • 最后一列为标签列,标签为1的表示要删除,为0的表示不要删除
    • 每一行代表一条文件数据,一共4000+数据
    • 如下图所示:
      在这里插入图片描述
  • 步骤:

    • 1、读取数据
    • 2、划分训练集和测试集
    • 3、构建模型并训练
    • 4、将测试集传入模型进行测试
  • 1、读取数据

    import pandas as pd
    # 用pandas方法读取数据,数据存放在名为spambase.csv的文件中
    data = pd.read_csv("spambase.csv")
    
  • 2、划分训练集和测试集

    X = data.iloc[:, :-1]  # 读取除了最后一列的所有数据,作为训练和测试数据
    Y = data.iloc[:, -1]  # 读取最后一列,作为标签
    # 导入sklearn库中的train_test_split方法对数据进行切分
    from sklearn.model_selection import train_test_split
    # 划分20%的数据作为测试集数据,其余的作为训练集数据,并抛出一个随机种子,为了以后每次运行所划分的数据都与第一次相同
    x_train, x_test, y_train, y_test = \
        train_test_split(X, Y, test_size=0.2, random_state=100)
    # x_train:训练集
    # x_test:测试集
    # y_train:训练集标签
    # y_test:测试集标签
    
  • 3、构建模型并训练

    # 导入随机森林方法
    from sklearn.ensemble import RandomForestClassifier
    # 调用方法,并用一个变量接收
    # 因为此训练数据并不是很多,所以一些参数都以默认的值进行训练
    rf = RandomForestClassifier(
        n_estimators=100,
        max_features=0.8,
        random_state=0
    )
    # 传入训练集,和训练集标签
    rf.fit(x_train, y_train)
    
  • 4、将测试集传入模型进行测试

  • 调用以下两种方法对模型进行评估

    • predict 方法接受一个数组(或类似数组的结构,如列表的列表、Pandas DataFrame等),其中包含了要预测的目标变量的新数据点。然后,它使用训练好的模型对这些数据点进行预测,并返回一个包含预测结果的数组。

    • metrics.classification_report 是 scikit-learn(一个流行的 Python 机器学习库)中的一个函数,用于展示主要分类指标的文本报告。这个函数特别适用于评估分类模型的性能,尤其是在处理多类分类问题时。它提供了每个类别的精确度(precision)、召回率(recall)、F1 分数(F1-score)和支持度(support,即每个类别的真实样本数量)的详细报告。

      from sklearn import metrics
      # 传入测试集,并查看测试出的标签结果
      test_predicted = rf.predict(x_test)
      print(test_predicted)
      # 传入测试集标签(每个测试数据的真实标签)和测试出的标签结果
      print(metrics.classification_report(y_test, test_predicted))
      
    • 结果如下:
      在这里插入图片描述
      在这里插入图片描述

    • 从各个指标的分数来看,随机森林模型的分类性能还是很强的

标签:None,机器,features,max,分类,随机,test,节点
From: https://blog.csdn.net/weixin_73504499/article/details/141474653

相关文章

  • 《机器学习》—— OpenCV 对图片的各种操作
    文章目录1、安装OpenCV库2、读取、显示、查看图片3、对图片进行切割4、改变图像的大小5、图片打码6、图片组合7、图像运算8、图像加权运算1、安装OpenCV库使用pip是最简单、最快捷的安装方式pipinstallopencv-python==3.4.2还需要安装一个包含了其他一些图像......
  • 机器学习:随机森林决策树学习算法及代码实现
    1、概念        随机森林(RandomForest)是一种集成学习方法,它通过构建多个决策树来进行分类或回归预测。随机森林的核心原理是“集思广益”,即通过组合多个弱学习器(决策树)的预测结果来提高整体模型的准确性和健壮性。2、集成学习(EnsembleLearning):        集......
  • 机器学习之——决策树构建原理
    0前言本文主要讲述了决策树背后的数学原理以及构建方法,并通过实例数据一步步构建决策树,帮助读者理解。本文使用了大量的配图帮助读者理解。1理论基础1.1决策树的原型决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割......
  • 机器学习-梯度下降
    介绍试想一下,你在一个山坡上寻找一个最快的下坡方法。首先360360360度旋转一周你会找到一个当前最陡峭的方向,沿着这个方向走一步。重复上面的操作,继续旋转......
  • 机器学习简介
    机器学习简介Learnfromdata、深度学习经典定义:利用经验改善系统自身的性能[T.Mitchell教科书,1997]。数据->算法->模型基本术语数据:数据集;训练;测试示例(instance);样例(example)样本(sample)属性(attribute);特征(feature);属性值属性空间;样本空间;输入空间特......
  • 【Kaggle】练习赛《有毒蘑菇的二分类预测》(下)
    前言上篇《有毒蘑菇的二分类预测》(上)用ColumnTransformer和Pipeline技术来提升缺失值和建模的方法,本篇将用特征工程的方法,将特征扩展,由原先的21个特征扩展成118个特征,再用深度学习的方法进行建模以达到较好的成绩,同时,在这篇里增加了上篇没有EDA部分,更好的展示数据集......
  • [行业调研] 2024世界机器人大会
    展会见闻记录看到的零碎信息从身体结构的维度机械臂:吸取小物体,放到另一个区域。这种任务在各种环境下都能精准完成,相对于人类有优势。灵巧手:看到各种自由度的手,手掌/手指正面覆盖了很多触觉传感器,有些甚至还布置了摄像头。AGV:仓库托运重物,物流机器人。仿生机器人:......
  • POLIR-Society-Organization-真实社政: 人性{黑、白、灰}: + 管理Strategy的(整体/组织
    手机实名制+虚拟卡号手机实名制防止电诈减少犯罪发生;虚拟卡号确实有正面意义与负面意义正面意义:"虚拟号"的政策本身是好的没问题的;例如,社会性的研究;即使“不法分子”使用“虚拟号”诈骗犯罪,群众的“警惕性”更高更易察觉;因为:“虚拟号段”已经“预先分类”过,筛选......
  • 图伸神经网络GCN实现图内点云分类任务(物体的部件分类)
    点云分类任务数据集下载关键代码数据集结构网络模型模型训练测试模型+可视化结果可能会出现的问题pyg没有配置好懒人专属(代码链接)本项目是一个简单的使用图中点分类代码,内涵完整的网络搭建、模型训练、模型保存、模型调用、可视化、的全过程。可以帮助初学者快速熟......
  • 机器学习详解-第二章-实践方法论-学习笔记-[DataWhale X 李宏毅苹果书 X AI夏令营]
    在调整模型的过程中可能会遇到许多问题,这里为了处理这些问题(前期初学情况),从而给出了一个章节用于学习相关的技巧。1.模型偏差模型偏差可能会影响模型训练,我们在训练的时候,将所有的函数集合在一起得到一个函数的集合,但是这个函数的集合大小是我们不确定的,可能会因为太小,其中的......