随机森林算法的Python实现

article/2025/8/21 18:45:40

随机森林主要应用于回归和分类。
它几乎可以将任何数据填进去,下文使用鸢尾花数据进行分类和预测

环境 python3.8
数据集 鸢尾花数据集

    def dataset(self):iris = load_iris()feature = pd.DataFrame(data=iris.data, columns=iris.feature_names)target = pd.DataFrame(data=map(lambda item: iris.target_names[item],iris.target), columns={'target_names'})feature_train, feature_test, target_train, target_test = \train_test_split(feature, target, test_size=0.3)return feature_train, feature_test, target_train, target_test

实验思路:
首先训练10个基分类器,每个基分类器为一个决策树;在预测时对每个基分类器投票结果进行统计倒排,选取票数最多的结果;其中‎每棵树的生长情况如下:‎
‎如果培训集中的案例数为 N,则随机取样 N 案例 - 但从原始数据中‎‎替换‎‎。此示例将是种植树的培训集。‎
‎如果有 M 输入变量,则指定一个数字 m<<M,以便在每个节点中随机从 M 中选择 m 变量,并且这些 m 上的最佳拆分用于拆分节点。在森林生长过程中,m 值保持不变。‎
‎每棵树都尽可能的生长。没有修剪。
查看随机森林官网描述
fit训练

    def fit(self, feature=None, label=None):'''训练模型,请记得将模型保存至self.models:param feature: 训练集数据,类型为ndarray:param label: 训练集标签,类型为ndarray:return: None'''# ************* Begin ************#n = len(feature)for i in range(self.n_model):# 在训练集N随机选取n个样本  #frac=1 样本可重复取 (样本只包含特征数据)randomSamples = feature.sample(n, replace=True, axis=0)# 在所有特征M随机选取m个特征 特征无重复 0.75表示选取4*0.75=3个特征randomFeatures = randomSamples.sample(frac=0.75, replace=False, axis=1)# 标记该模型选取的特征tags = self.connect(randomFeatures.columns.tolist())# 根据样本筛选出索引与之相同的lable即target_name# 使用loc标签索引获取randomLable = label.loc[randomSamples.index.tolist(),:]# for i,j in zip(randomFeatures.index.tolist(),,randomLable.index.tolist()):#	print(i,j)model = DecisionTreeClassifier()model = model.fit(randomFeatures, randomLable)self.models.append({tags: model})# ************* End **************#

预测

    def predict(self, features, target):''':param features: 测试集数据,类型为ndarray:param target: 测试集实际lable,类型为ndarray:return: 预测结果,类型为ndarray'''# ************* Begin ************#result = []vote = []for model in self.models:# 获取模型使用的训练特征modelFeatures = list(model.keys())[0].split('000')[:-1]# 提取出模型预测需要的标签test_data = features[modelFeatures]# 基分类器进行预测r = list(model.values())[0].predict(test_data)vote.append(r)# 将数组转换为矩阵 10行45列vote = np.array(vote)# print(vote.shape) # print(vote)for i in range(len(features)):# 对每棵树的投票结果进行排序选取最大的v = sorted(Counter(vote[:, i]).items(),key=lambda x: x[1], reverse=True)# 查看投票情况和实际标签对比print(v, "---",list(target)[i])result.append(v[0][0])return result# ************* End **************#def connect(self, ls):s = ''for i in ls:s += i + '000'return s

主函数

if __name__ == '__main__':Bcf = BaggingClassifier()featureAndTarget = Bcf.dataset()Bcf.fit(featureAndTarget[0],featureAndTarget[2])res = Bcf.predict(features=featureAndTarget[1], target=featureAndTarget[3]['target_names'])right = 0for i, j in zip(featureAndTarget[3]['target_names'], res):if i == j:right += 1#print(i + '\t' + j)print('准确率为' + str(right / len(res) * 100) + "%")

在这里插入图片描述
可以看出准确率很高啦,可以调整特征数量m参数,准确率也会不同。


http://chatgpt.dhexx.cn/article/n7hujcPP.shtml

相关文章

基于Matlab的随机森林算法实现(附算法介绍及代码详解)

本算例完整代码领取方式在文末展示~ 一、内容提要 在地学领域中&#xff0c;岩性的准确识别对于储层评价来说至关重要。因此&#xff0c;今天笔者想要分享的是随机森林算法在岩性识别中的应用与代码实现。 科普中国科学百科定义&#xff1a;随机森林&#xff08;Random fores…

随机森林 c语言,随机森林算法有哪些优缺点

什么是随机森林算法?随机森林算法有哪些优缺点?随机森林是一种有监督学习算法&#xff0c;是以决策树为基学习器的集成学习算法&#xff0c;随机森林非常简单&#xff0c;易于实现&#xff0c;计算开销也很小&#xff0c;但是它在分类和回归上表现出非常惊人的性能&#xff0…

【随机森林】深入浅出讲解随机森林算法

本文收录于《深入浅出讲解自然语言处理》专栏&#xff0c;此专栏聚焦于自然语言处理领域的各大经典算法&#xff0c;将持续更新&#xff0c;欢迎大家订阅&#xff01;​个人主页&#xff1a;有梦想的程序星空​个人介绍&#xff1a;小编是人工智能领域硕士&#xff0c;全栈工程…

随机森林算法总结

随机森林算法 个体学习器 个体学习器又称为基学习器&#xff08;base learner&#xff09;&#xff0c;由单个的学习算法训练数据得到&#xff0c;比如“决策树算法”&#xff0c;“神经网络算法”等等。在不正式的说法下&#xff0c;基学习器&#xff0c;弱学习器&#xff0…

Android动画(帧动画、补间动画、属性动画)讲解

Android动画&#xff08;帧动画、补间动画、属性动画&#xff09;讲解 首先我们来看看啥是帧动画、补间动画、属性动画。 介绍&#xff1a; 帧动画&#xff1a;是一种常见的动画形式&#xff08;Frame By Frame&#xff09;&#xff0c;其原理是在“连续的关键帧”中分解动画动…

Android动画学习记录一(Android动画种类、补间动画和帧动画)

Android动画学习记录一&#xff08;动画种类、补间动画和帧动画&#xff09; 动画种类、补间动画和帧动画 Android动画学习记录一&#xff08;动画种类、补间动画和帧动画&#xff09;一、动画种类二、View动画2.1 补间动画补间动画公有属性平移动画&#xff08;Translate&…

Android动画分类与总结

前言 动画的使用 是 Android 开发中常用的知识可是动画的种类繁多、使用复杂&#xff0c;每当需要 采用自定义动画 实现 复杂的动画效果时&#xff0c;很多开发者就显得束手无策本文将献上一份Android动画的全面介绍攻略&#xff0c;包括动画的种类、使用、原理等&#xff0c;…

Android动画分析(ValueAnimator)

动画创建 先看入口函数&#xff1a; 参数很熟悉了&#xff0c;具体看里面做了什么&#xff0c;其实也很简单&#xff0c;创建一个实例对象&#xff0c;并将参数设置到对象中。 第一个参数暂时先不看&#xff0c;看第二个参数&#xff0c;**anim.setObjectValues(values)**重…

好看的android动画效果

这段时间看到一些比较好看的android动画效果&#xff0c;下面我就给大家一些我比较喜欢的动画效果&#xff0c;并附上源码希望对你们有用处。 1.很简单却很酷的粒子破碎效果 介绍&#xff1a; 实现思路 1.新建一个 Bean Particle&#xff0c;表示一个粒子对象&#xff1b;新…

Android 动画系列二之补间动画

1. 前言 Android三种动画中的第二种——补间动画(Tween)&#xff0c;和帧动画不同&#xff0c;帧动画 是通过连续播放图片来模拟动画效果&#xff0c;而补间动画开发者只需指定动画开始&#xff0c;以及动画结束"关键帧"&#xff0c; 而动画变化的"中间帧"…

Android动画大合集

android中的动画实现方式繁多&#xff0c;在项目中也经常用到动画&#xff0c;网上有很多人也都进行了一些总结&#xff0c;但是感觉还是零零散散&#xff0c;自己总结一下才能加深印象&#xff0c;以后有时间了&#xff0c;也可以从各个分类里进一步去补充完善。 如果喜欢看G…

Android中动画详细讲解

一、前言 Android动画经常会在切换activity、数据加载时会用到动画效果&#xff0c;以前接触的比较少&#xff0c;用的都是封装好的动画效果&#xff0c;自己写的比较少&#xff0c;今天心血来潮想写一个自己设计的动画效果&#xff0c;发现学习动画代码比较简单&#xff0c;但…

android 动画中插值器Interpolator详解

1、插值器简介–Interpolator 通俗易懂的说&#xff0c;Interpolator负责控制动画变化的速率&#xff0c;即确定了 动画效果变化的模式&#xff0c;使得基本的动画效果能够以匀速、加速、减速、抛物线速率等各种速率变化 动画是开发者给定开始和结束的“关键帧”&#xff0c;…

Android中的属性动画

1.属性动画简介 接下来我们学习Android动画中的第三种动画——属性动画(Property Animation) Animation一般动画就是我们前面学的帧动画和补间动画&#xff01;Animator则是本节要讲的属性动画&#xff01; 1.1为什么要用属性动画 补间动画功能比较单调,只有四种动画(透明度…

android 动画库

1. Spruce(安卓动画库)&#xff08;是一个轻量级的动画库&#xff0c;可以帮助排版屏幕上的动画。使用有很多不同的动画库时&#xff0c;开发人员需要确保每个视图都能够在适当的时间活动。&#xff09; 2. Litho&#xff08;是一个非常强大的框架&#xff0c;以声明的方式构建…

android动画类型有哪几种,Android动画概念大揭秘

前言 说起Android里面的动画,我可能会立马想起平移、旋转、渐变、缩放等动画效果,但是对于他们的属性就记的不太清了,知道的都是皮毛而且很容易忘记,每次需要用到的时候总要去baidu或者google,完全无法做到灵活应用,信手拈来。所以抽时间重新温故了一下动画相关的知识,把…

Android 动画分类

前言 动画的使用 是 Android 开发中常用的知识可是动画的种类繁多、使用复杂&#xff0c;每当需要 采用自定义动画 实现 复杂的动画效果时&#xff0c;很多开发者就显得束手无策本文将献上一份Android动画的全面介绍攻略&#xff0c;包括动画的种类、使用、原理等&#xff0c;能…

Android动画

这篇博客主要总结一下自己在项目中对动画的一些使用。我写博客&#xff0c;其实更多的是总结自己在工作中用到的一些知识。比如某一段时间一个知识点相关的技术用的比较多&#xff0c;那我会总结一下。其实&#xff0c;对于Android动画的总结&#xff0c;这是几个月前就应该写完…

Android动画之帧动画

在Android开发时&#xff0c;为了实现一些动态的炫酷的效果&#xff0c;我们常用到帧动画&#xff0c;View动画&#xff08;补间动画&#xff09;和属性动画&#xff0c;今天就来总结下我在使用帧动画的实现方式。 1、什么是帧动画&#xff1f; 帧动画就是顺序播放一组预先定…

【Android】动画

概念 动画实际上就是在指定的时间段内持续的修改某个属性的值&#xff0c;使得该值在指定取值范围之内平滑的过渡 android中的动画分为&#xff1a;View动画、帧动画和属性动画 帧动画 Frame动画是一系列图片按照一定的顺序展示的过程&#xff0c;它的原理是在一定的时间段内切…