首页 > 其他分享 >机器学习:集成学习之随机森林

机器学习:集成学习之随机森林

时间:2024-08-30 22:25:20浏览次数:5  
标签:集成 1.00 predict 学习 train 随机 test 0.94

目录

前言

一、集成学习

1.集成学习的含义

2.集成学习的代表

3.集成学习的应用

二、随机森林

1.随机森林的特点

2.随机森林生成步骤

3.随机森林优点

4.随机森林的缺点

三、代码实现

1.完整代码

2.数据预处理

3.创建并训练模型

4.测试模型

总结


前言

        随机森林是一种集成学习方法,主要用于分类和回归任务。它通过构建多个决策树并将其结果结合起来,提高模型的准确性。每棵树在训练时使用数据的随机子集和特征的随机子集,从而降低过拟合风险,并增强模型的泛化能力。最终预测是通过对所有树的预测结果进行投票(分类)或平均(回归)来实现的。

 

一、集成学习

1.集成学习的含义

        集成学习是将多个基础学习器进行组合,来实现比单一学习器显著优越的学习性能

 

2.集成学习的代表

  • bagging方法:典型的是随机森林
  • boosting方法:典型的是Xgboost
  • stacking方法:堆叠模型

 

3.集成学习的应用

  1. 分类问题集成
  2. 回归问题集成
  3. 特征选取集成

 

 

二、随机森林

1.随机森林的特点

  1. 数据采样随机:随机从训练集中选取自定百分比的数据
  2. 特征选取随机:随机从特征中选取自定百分比的特征
  3. 森林:很多树
  4. 基分类器为决策树

 

2.随机森林生成步骤

  1. 生成多个决策树
    1. 从原始数据集中通过Bootstrap抽样生成多个子集,每个子集用于训练一棵决策树。
    2. 在每棵树的训练过程中,随机选择特征子集进行节点分裂,增加树的多样性。
  2. 预测与投票
    1. 对于分类任务,通过对所有决策树的预测结果进行投票,选择票数最多的类别作为最终预测。
    2. 对于回归任务,通过对所有决策树的预测结果进行平均,得到最终的预测值。

 

3.随机森林优点

  1. 具有极高的准确率。
  2. 随机性的引入,使得随机森林的抗噪声能力很强。
  3. 随机性的引入,使得随机森林不容易过拟合。
  4. 能够处理很高维度的数据,不用做特征选择。
  5. 容易实现并行化计算。

 

4.随机森林的缺点

  1. 当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大。
  2. 随机森林模型还有许多不好解释的地方,有点算个黑盒模型,

 

 

三、代码实现

  • 本次使用的是多特征二分类数据

1.完整代码

import pandas as pd
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('spambase.csv')

x = data.iloc[:, :-1]  # 取出特征数据
y = data.iloc[:, -1]   # 取出标签

x_train, x_test, y_train, y_test = \
    train_test_split(x, y, test_size=0.3, random_state=0)

"""
n_estimators:决策树的个数
max_feature:特征的个数
"""
from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(
    n_estimators=100
    , max_features=0.8  # 80%的特征
    , random_state=0
)
rf.fit(x_train, y_train)

from sklearn import metrics

train_predict = rf.predict(x_train)
print(metrics.classification_report(y_train, train_predict))

test_predict = rf.predict(x_test)
print(metrics.classification_report(y_test, test_predict))

cm_plot(y_test, test_predict).show()

输出:

  • 可视化混淆矩阵——测试集

  • 混淆矩阵
              precision    recall  f1-score   support

           0       1.00      1.00      1.00      1954
           1       1.00      1.00      1.00      1263

    accuracy                           1.00      3217
   macro avg       1.00      1.00      1.00      3217
weighted avg       1.00      1.00      1.00      3217

              precision    recall  f1-score   support

           0       0.94      0.97      0.95       831
           1       0.95      0.91      0.93       549

    accuracy                           0.94      1380
   macro avg       0.95      0.94      0.94      1380
weighted avg       0.94      0.94      0.94      1380

 

2.数据预处理

  • 取出训练集,测试集的特征数据和标签
import pandas as pd
from sklearn.model_selection import train_test_split

data = pd.read_csv('spambase.csv')

x = data.iloc[:, :-1]
y = data.iloc[:, -1]

x_train, x_test, y_train, y_test = \
    train_test_split(x, y, test_size=0.3, random_state=0)

 

3.创建并训练模型

  • 创建一个100个决策树的随机森林,每棵树选取80%的特征进行训练
"""
n_estimators:决策树的个数
max_feature:特征的个数
"""
from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(
    n_estimators=100
    , max_features=0.8  # 80%的特征
    , random_state=0
)
rf.fit(x_train, y_train)

 

4.测试模型

  • 使用训练集数据和测试集数据进行测试,得到结果
from sklearn import metrics

train_predict = rf.predict(x_train)
print(metrics.classification_report(y_train, train_predict))

test_predict = rf.predict(x_test)
print(metrics.classification_report(y_test, test_predict))

cm_plot(y_test, test_predict).show()

输出:

  • 虽然训练集数据进行测试时正确率非常高,看起来像过拟合
  • 但是不用担心,测试集正确率并没有下降多少
  • 说明该模型并没有过拟合
  • 可以看出随机森林不仅正确率高,还不容易过拟合
              precision    recall  f1-score   support

           0       1.00      1.00      1.00      1954
           1       1.00      1.00      1.00      1263

    accuracy                           1.00      3217
   macro avg       1.00      1.00      1.00      3217
weighted avg       1.00      1.00      1.00      3217

              precision    recall  f1-score   support

           0       0.94      0.97      0.95       831
           1       0.95      0.91      0.93       549

    accuracy                           0.94      1380
   macro avg       0.95      0.94      0.94      1380
weighted avg       0.94      0.94      0.94      1380

 

总结

        本篇讲述了集成学习的概念,随机森林的概念,特点,步骤和优缺点,最后使用代码实例演示了随机森林的使用。

标签:集成,1.00,predict,学习,train,随机,test,0.94
From: https://blog.csdn.net/weixin_65047977/article/details/141537122

相关文章

  • 机器学习:DBSCAN算法(内有精彩动图)
    目录前言一、DBSCAN算法1.动图展示(图片转载自网络)2.步骤详解3.参数配置二、代码实现1.完整代码2.代码详解1.导入数据2.通过循环确定参数最佳值总结前言        DBSCAN(Density-BasedSpatialClusteringofApplicationswithNoise)是一种基于密度的聚类......
  • Redis基础知识学习笔记(一)
    文章目录Redis简介Redis简介REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统,是跨平台的非关系型数据库,其是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)......
  • 深度学习:图像数据分析的革命
    深度学习:图像数据分析的革命在当今数据驱动的世界中,图像数据分析已成为一个热门领域,而深度学习技术在其中扮演着核心角色。深度学习,特别是卷积神经网络(CNN),已经在图像识别、分类和处理方面取得了显著的成就。本文将详细介绍如何使用深度学习进行图像数据分析,并提供实际的代......
  • 计算机毕业设计express+Node.js+vue毕业生交流学习平台g1el1
    设计框架:Vue1.   表现层:写多个vue页面,负责接收用户请求数据和处理后的结果显示2.   控制器层:又多个控制器组成,这些控制器用于拦截用户请求,并调用业务逻辑组件的业务逻辑方法,并处理用户请求,根据不同的处理结果发送到相应的表现层组件3.   业务逻辑层:由实现所需业......
  • python学习总结(一)
    @TOC<hrstyle="border:solid;width:100px;height:1px;"color=#000000size=1">1.变量元组类型b=()列表类型b=[]字典类型b={}简单类型b=123a=’123‘c=Trued=5.0命名规则1、开头必须以字母或下划线_开头2、区分大小写3、除了开头,其余字母、数字、下划线均......
  • CMake构建学习笔记12-libzip库的构建
    如果要更方便地压缩/解压缩文件或者文件夹,除了使用基于zlib的minizip库,更推荐使用另一个基于zlib的库libzip,个人认为其接口设计更科学一点,文档也更丰富一点。不过libzip库本身的构建倒是没什么特别的,关键指令如下所示:#配置CMakecmake..-G"$Generator"-Ax64`-DCMAK......
  • JS小案例:单个按钮绑定时钟开启和暂停以及随机点名
     单个按钮开启暂停时钟案例单个按钮绑定时钟案例中,核心在于进行value值的判断,每次点击按钮都会进行一次value值判断以及value值更改HTML源码:<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title>一个按钮绑定时钟开始和暂停</title> </head> <bodyonlo......
  • js基础学习
    1.js是动态语言,变量类型是可变的。varx=10;varx='pink';2.八进制(0开头)、十六进制(0x开头)3.字符串多个嵌套时,外双内单/外单内双。模版字符串:为了简化字符串拼接。`我今年${age}了`转义字符:4.typeof变量 可以检测类型---控制台颜色也可以检测类型5.转成字符串......
  • PyTorch深度学习实战(26)—— PyTorch与Multi-GPU
    当拥有多块GPU时,可以利用分布式计算(DistributedComputation)与并行计算(ParallelComputation)的方式加速网络的训练过程。在这里,分布式是指有多个GPU在多台服务器上,并行指一台服务器上的多个GPU。在工作环境中,使用这两种方式加速模型训练是非常重要的技能。本文将介绍PyTorch中......
  • Yolov5入门介绍(官网文档学习笔记)
    一、yolov5是什么yolov5是yolo的第五次迭代,旨在提供高速、高精度的目标检测模型官方文档:ComprehensiveGuidetoUltralyticsYOLOv5-UltralyticsYOLODocs二、yolov5的优点1、高速、高精度 (例如R-CNN目标检测有两部:先生成候选框再分类)2、基于pytorch搭建,使用于各......