首页 > 编程语言 >机器学习:随机森林决策树学习算法及代码实现

机器学习:随机森林决策树学习算法及代码实现

时间:2024-08-25 21:22:04浏览次数:12  
标签:predict 学习 算法 train im clos test importances 决策树

1、概念

        随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树来进行分类或回归预测。随机森林的核心原理是“集思广益”,即通过组合多个弱学习器(决策树)的预测结果来提高整体模型的准确性和健壮性。

2、集成学习(Ensemble Learning)

        集成学习是一种机器学习方法,它结合多个学习器的预测结果来提高整体模型的性能。随机森林是集成学习的一种实现方式。

3、决策树(Decision Tree)

         决策树是一种监督学习算法,它通过学习简单的决策规则来预测目标值。每个决策树都是一个二叉树,每个节点代表一个特征的测试,每个分支代表测试的结果,每个叶节点代表一个预测结果。

4、Bagging(自助采样聚合)

        随机森林使用Bagging方法来减少模型的方差。Bagging是一种通过从原始数据集中随机抽取样本(有放回抽样)来构建多个训练集的方法。每个决策树都是在这些不同的训练集上训练得到的。

5、投票机制

        对于分类问题,随机森林通过多数投票的方式来确定最终的预测结果。每个决策树都会给出一个预测,随机森林会统计每个类别的得票数,得票数最多的类别被选为最终预测结果。

6、特征重要性

        随机森林可以评估每个特征对模型预测的贡献度,即特征重要性。这通常是通过观察在构建树时,某个特征被用于分割的次数来确定的。

7、处理能力

        随机森林能够处理高维数据,并且对于缺失数据具有一定的鲁棒性。它也可以处理分类和回归问题。

8、优点:     

  • 通常具有较高的准确率。
  • 对于高维数据表现良好。
  • 能够提供特征重要性的估计。
  • 对于数据集中的异常值和噪声具有一定的鲁棒性。

9、缺点

  • 训练时间可能较长,尤其是在数据集很大或特征很多的情况下。
  • 模型可能会占用较多的内存。
  • 模型的解释性不如单个决策树。

10、数据预处理,找到数据的特征与标签

data = pd.read_csv("spambase.csv")  # 读取数据集
x = data.iloc[:, :-1]  # 选取数据集中的特征列(除了最后一列)
y = data.iloc[:, -1]  # 选取数据集中的最后一列作为标签

11、划分训练集和测试集

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=100)

12、创建随机森林分类器实例

rf = RandomForestClassifier(n_estimators=100, max_features=0.8, random_state=0)  # 创建随机森林分类器实例
rf.fit(x_train, y_train)  # 使用训练集数据训练模型

13、打印分类报告

predict_train = rf.predict(x_train)  # 使用训练集数据进行预测
print(metrics.classification_report(y_train, predict_train))  # 打印训练集的分类报告
predict_test = rf.predict(x_test)  # 使用测试集数据进行预测
print(metrics.classification_report(y_test, predict_test))  # 打印测试集的分类报告

14、数据可视化

import matplotlib.pyplot as plt  # 导入matplotlib.pyplot,用于数据可视化
from pylab import mpl  # 导入pylab的mpl模块

# 获取每一项特征所占的权重(重要性)
importances = rf.feature_importances_
# 转换成数组,重新命名
im = pd.DataFrame(importances, columns=["importances"])
# 从原表格中获取所有列名称,将其转换成列表格式,除去最后一列
clos = data.columns
clos_1 = clos.values
clos_2 = clos_1.tolist()
clos = clos_2[:-1]  # 切片操作,获取除了最后一列的所有列名
# 将名称添加到im
im["clos"] = clos
# 对importances进行排序,获取前10个
im = im.sort_values(by=["importances"], ascending=False)[:10]

index = range(len(im))  # 创建一个索引列表
plt.yticks(index, im.clos)  # 设置y轴的刻度标签为特征名称
plt.barh(index, im["importances"])  # 绘制水平条形图
plt.show()  # 显示图形

15、结果

16、完整代码

import pandas as pd  # 导入pandas库,用于数据处理
data = pd.read_csv("spambase.csv")  # 读取数据集
x = data.iloc[:, :-1]  # 选取数据集中的特征列(除了最后一列)
y = data.iloc[:, -1]  # 选取数据集中的最后一列作为标签

from sklearn.model_selection import train_test_split  # 导入train_test_split函数

# 将数据集分割为训练集和测试集,测试集占20%
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=100)

from sklearn.ensemble import RandomForestClassifier  # 导入RandomForestClassifier
rf = RandomForestClassifier(n_estimators=100, max_features=0.8, random_state=0)  # 创建随机森林分类器实例
rf.fit(x_train, y_train)  # 使用训练集数据训练模型

from sklearn import metrics  # 导入metrics库,用于模型评估
predict_train = rf.predict(x_train)  # 使用训练集数据进行预测
print(metrics.classification_report(y_train, predict_train))  # 打印训练集的分类报告
predict_test = rf.predict(x_test)  # 使用测试集数据进行预测
print(metrics.classification_report(y_test, predict_test))  # 打印测试集的分类报告

import matplotlib.pyplot as plt  # 导入matplotlib.pyplot,用于数据可视化
from pylab import mpl  # 导入pylab的mpl模块

# 获取每一项特征所占的权重(重要性)
importances = rf.feature_importances_
# 转换成数组,重新命名
im = pd.DataFrame(importances, columns=["importances"])
# 从原表格中获取所有列名称,将其转换成列表格式,除去最后一列
clos = data.columns
clos_1 = clos.values
clos_2 = clos_1.tolist()
clos = clos_2[:-1]  # 切片操作,获取除了最后一列的所有列名
# 将名称添加到im
im["clos"] = clos
# 对importances进行排序,获取前10个
im = im.sort_values(by=["importances"], ascending=False)[:10]

index = range(len(im))  # 创建一个索引列表
plt.yticks(index, im.clos)  # 设置y轴的刻度标签为特征名称
plt.barh(index, im["importances"])  # 绘制水平条形图
plt.show()  # 显示图形

标签:predict,学习,算法,train,im,clos,test,importances,决策树
From: https://blog.csdn.net/mohanyelong/article/details/141533440

相关文章

  • 机器学习之——决策树构建原理
    0前言本文主要讲述了决策树背后的数学原理以及构建方法,并通过实例数据一步步构建决策树,帮助读者理解。本文使用了大量的配图帮助读者理解。1理论基础1.1决策树的原型决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割......
  • 【pytorch深度学习——小样本学习策略】网格搜索和遗传算法混合优化支持向量机的小样
    最近需要根据心率血氧数据来预测疲劳度,但是由于心率血氧开源数据量较少,所以在训练模型时面临着样本数量小的问题,需要对疲劳程度进行多分类,属于小样本,高维度问题。在有限样本的条件之下,必须要需要选择合适的深度学习算法同时满足模型的泛化能力和学习精度。其次,由于小样本学习的......
  • 机器学习-梯度下降
    介绍试想一下,你在一个山坡上寻找一个最快的下坡方法。首先360360360度旋转一周你会找到一个当前最陡峭的方向,沿着这个方向走一步。重复上面的操作,继续旋转......
  • UE5学习笔记17-让人物的视线和鼠标移动时的方向一致,并且不让人物模型旋转,只改变视线方
    一、创建标准动画帧    1.我想让人物在装备武器后根据鼠标的移动方向改变人物的视线方向,并且人物模型不会改变朝向    2.我的动画中存在一个四个方向瞄准的动画,将左下,坐上,左转,右上,右下,右转,中上,中下,中,的动画的某一帧保留,具体流程如下(记得复制一份动画资源,可......
  • 基于粒子群算法(PSO)优化CNN-BiGUR-Attention风电功率预测研究(Matlab代码实现)
           ......
  • Android Qcom USB Driver学习(九)
    高通的某些平台将电源管理移植到了ADSPSubsystem,分析一下其中比较关心的部分Architecture———————————————————————————————————————|GenericTypeCDrvierPowerSupplyFramework| |G......
  • 机器学习简介
    机器学习简介Learnfromdata、深度学习经典定义:利用经验改善系统自身的性能[T.Mitchell教科书,1997]。数据->算法->模型基本术语数据:数据集;训练;测试示例(instance);样例(example)样本(sample)属性(attribute);特征(feature);属性值属性空间;样本空间;输入空间特......
  • 20-学习卷积核
    importtorchimporttorch.nnasnnX=torch.rand((6,8))Y=torch.rand((6,7))#(批量⼤⼩、通道、⾼度、宽度)X=X.reshape((1,1,6,8))Y=Y.reshape((1,1,6,7))lr=3e-2#构造卷积层PyTorch会使用默认的初始化方法,例如Xavier初始化或Kaim初始化,来......
  • 学习之adb命令
    adb命令作用:用来操作手机系统的类似于window的cmd,linux的bash如果添加环境变量的adb不能识别设备通常是因为存在两个不同的版本如下:adbdevices如果没有发现,可以尝试手动连接设备adbconnect127.0.0.1:62001查看前台应用activity应用名称adbshelldumpsysact......
  • 从零开始学习C++之枚举与模拟
    枚举和模拟是C++中最为基础的算法,也是之后赛时部分分的算法首选。枚举顾名思义,枚举就是将所有值全部扫一遍。枚举算法的流程图如下:我们很容易就可以写出伪代码:for(枚举区间){ 代码,例: if(条件) { 输出 }}模拟模拟就是将做的事情通过程序一步步完成,有时候很简......