首页 > 编程语言 >【机器学习】随机森林算法(看我以弱博强)

【机器学习】随机森林算法(看我以弱博强)

时间:2024-10-12 13:49:56浏览次数:9  
标签:训练 模型 feature 算法 随机 博强 以弱 森林

目录

算法引入:

算法介绍:

1. 集成学习:

2. 训练过程:

3. 分类和回归:

算法优点:

算法缺点:

算法实现:

1. 数据准备

2. 划分数据集

3. 创建随机森林模型

4. 训练模型

5. 预测

6. 评估模型

完整代码示例


人工智能领域在当今可谓炙手可热,在人工智能与机器学习领域,随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树来进行分类或回归预测。随机森林的核心思想是“集思广益”,即通过组合多个模型来提高预测的准确性和鲁棒性。以最终达到以弱博强的目的。

算法引入:

俗话说“三个臭皮匠顶个诸葛亮”,有一天班里要进行考试,班里有一名学霸,科目有语数外三门学科,学霸呢,每一科语数外都能考到95+,班里还有三名偏科学渣A、B、C,学生A呢语文能考100分,学生B呢,数学能考100分,学生C呢,英语能考100分,但是学生A、B、C的其他两门学科都不及格,学霸说:你们三个垃圾,你们都是战五渣,学生A、B、C很不服,想挫一挫学霸的锐气,但是他们每一个人成绩都没有学霸的成绩高,于是学生A、B、C想了一个办法,如果让学生A去做语文卷子、学生B去做数学卷子、学生C去做英语卷子,这样可以直接碾压学霸,毫无悬念的A、B、C以总成绩300分拿下学霸,这种以弱博强的算法思想就是随机森林算法。


算法介绍:

随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树来进行分类或回归预测。随机森林的核心思想是“集思广益”,即通过组合多个模型来提高预测的准确性和鲁棒性。从算法的名字来看,随机就是随机选取,这个具有不确定性,可能是在一个群体里面选一部分,森林则是由很多树构成,树呢在机器学习领域有一种叫决策树,随机森林就是通过很多决策树构成,决策树可以看一下我的这一篇博客:【机器学习】决策树算法-CSDN博客

1. 集成学习:

随机森林是一种集成学习方法,它结合了多个决策树的预测结果。首先我们要有很多决策树组成的随机森林,根据这个随机森林的结果,我们去预测一个新决策树的结果。

2. 训练过程:

自助采样:在构建每棵树时,随机森林使用自助采样(bootstrap sampling)从原始数据集中抽取样本,这意味着同一样本可能被多次抽取,而某些样本可能一次也不被抽取,这些自助采样都是随机选取的,带有不确定性。比如在下图中,我们有星星、云朵、星球、棒棒糖、猫咪、爱心图标,我们这些是随机选取、自助采样,可能会有重合的比如下图中(2,4)坐标,那么有一个新的事物我们可以根据选取的这样事物进行预测新事物的结果。
特征选择:在每个决策节点,随机森林不是考虑所有特征,而是随机选择一部分特征进行最佳分割点的搜索,例如:下图中每一个事物不是以整体作为单位去考虑的,而是随机选取了一部分。

3. 分类和回归:

分类:对于分类问题,每棵树会给出分类结果,随机森林通过多数投票法决定最终的分类。
回归:对于回归问题,每棵树会给出预测值,随机森林通过取这些预测值的平均值作为最终预测。


算法优点:

   - 模型随机性强,不易overfit,抗噪性强,表示对异常点outlier不敏感,具有很高的准确率。
   - 处理高维数据相对较快。
   - 树状结构,模型可解释度高,可以告诉你每个特征的重要性。

算法缺点:

   - 模型往往过于general,不具备正确处理过于困难的样本的能力。
   - 模型起点高,但是天花板低。

参数:
   - n_estimators:森林中树的数量。
   - max_features:寻找最佳分割时要考虑的特征数量。
   - max_depth:树的最大深度。
   - min_samples_split:分裂内部节点所需的最小样本数。
   - min_samples_leaf:叶节点所需的最小样本数。


算法实现:

随机森林算法的具体实现涉及到多个步骤,包括数据准备、模型训练、预测以及评估。下面我将详细介绍这些步骤,并提供一个完整的Python代码示例,使用scikit-learn库来实现随机森林算法。

1. 数据准备

首先,我们需要准备数据集。这里我们使用鸢尾花数据集(Iris dataset),这是一个常用的分类数据集。

2. 划分数据集

将数据集划分为训练集和测试集,以便在训练集上训练模型,并在测试集上评估模型的性能。

3. 创建随机森林模型

使用scikit-learn库中的RandomForestClassifier或RandomForestRegressor来创建随机森林模型。

4. 训练模型

使用训练集数据训练模型。

5. 预测

使用训练好的模型对测试集进行预测。

6. 评估模型

计算模型的准确率或其他评估指标,如均方误差。

完整代码示例

下面是一个按照上面所说的步骤,进行写完整的Python代码示例

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# 加载数据集 使用load_iris函数加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集 使用train_test_split函数将数据集划分为训练集和测试集,测试集占30%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建随机森林分类器 实例化RandomForestClassifier,设置树的数量为100
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)

# 训练模型 使用训练集数据训练模型
rf_classifier.fit(X_train, y_train)

# 预测测试集 使用训练好的模型对测试集进行预测
y_pred = rf_classifier.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

# 打印特征重要性 
feature_importances = rf_classifier.feature_importances_
print("Feature importances:")
for feature, importance in zip(iris.feature_names, feature_importances):
    print(f"{feature}: {importance:.2f}")

# 可视化特征重要性 使用Matplotlib库绘制特征重要性的条形图
import matplotlib.pyplot as plt
features = iris.feature_names
indices = np.argsort(feature_importances)
plt.title("Feature Importances")
plt.barh(range(len(indices)), feature_importances[indices], color="r", align="center")
plt.yticks(range(len(indices)), [features[i] for i in indices])
plt.xlabel("Relative Importance")
plt.show()

这个示例展示了如何使用随机森林算法进行分类任务,并评估模型的性能。你可以根据具体需求调整数据集、模型参数和评估指标。


随机森林是一种非常强大的机器学习算法,适用于处理各种复杂的数据集和预测任务。随机森林算法因其准确性和易用性而受到广泛应用,在·分类问题、回归问题、特征选择、数据降维等方面应用很广泛。执笔至此,感触彼多,全文将至,落笔为终,感谢各位的支持。 

标签:训练,模型,feature,算法,随机,博强,以弱,森林
From: https://blog.csdn.net/m0_73633807/article/details/142685504

相关文章

  • C#二分查找算法
    前言二分查找算法是一种在有序数组中查找特定元素的搜索算法。实现原理二分查找的实现依赖于以下几个关键步骤:计算查找范围的中间索引。比较中间索引处的值与目标值。根据比较结果调整查找范围(左半部分或右半部分)。重复上述步骤直到找到目标值或查找范围为空。动图演示......
  • 地平线双目深度估计参考算法 StereoNetPlus优化 思路解读
    【参考算法】地平线双目深度估计参考算法StereoNetPlus-v1.2.11.引言本文将介绍地平线基于公版的双目深度估计算法StereoNet做的优化设计。首先介绍了双目深度估计的原理以及双目点云和Lidar点云的对比,然后由公版StereoNet的介绍切入到地平线参考算法的针对性优化,最后对......
  • 编程算法 --- Polybius 方阵密码解密
      这段代码的作用是通过Polybius方阵密码的方式来解密一段只包含元音字母的密文。具体来说,它通过元音字母的全排列来生成多个可能的映射方案,然后将密文中的元音字母转换成数字序列,并根据这些数字对查找字母棋盘中的字母,尝试还原出可能的明文。程序会输出所有可能的明文,供人工......
  • 多代理强化学习综述:原理、算法与挑战
    引言多代理强化学习(Multi-AgentReinforcementLearning,MARL)是强化学习的一个重要分支,它将传统的单代理强化学习概念扩展到多代理环境中。在MARL中,多个代理通过与环境和其他代理的交互来学习最优策略,以在协作或竞争场景中最大化累积奖励。MAgent中代理之间的对抗(混合MARL示例......
  • 数据结构与算法 - 单链表 & 双链表 -- 概念+实现
    文章目录前言一、顺序表的缺陷二、链表是如何设计的?三、链表的分类四、链表的概念及其结构1、链表的概念:2、链表的结构五、不带头单向不循环链表的实现(一)、SList.h的实现(二)、SList.c的实现1、初始化2、创建结点3、头插4、尾插4、头删5、尾删6、指定p......
  • 198号资源-源程序:(SCI论文+程序)未知时延下无线传感器网络时钟同步算法研究-----已提供下
    ......
  • 代码随想录算法训练营day12|144.二叉树的前序遍历 94.二叉树的中序遍历 145.二叉
    学习资料:https://programmercarl.com/二叉树理论基础.html二叉树:满二叉树、完全二叉树、二叉搜索数、平衡二叉搜索树;链式存储、顺序存储;前序/中序/后序遍历递归法、迭代法,层序深度优先搜索dfs,广度优先搜索学习记录:144.二叉树的前序遍历(也要注重二叉数的输入方式;递归法比迭......
  • 【动物识别系统】Python+卷积神经网络算法+人工智能项目+深度学习+计算机课设项目
    一、介绍动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作......
  • 【交通标志识别系统】Python+卷积神经网络算法+人工智能+深度学习+图像识别+计算机课
    一、介绍交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Dj......
  • 【海洋生物识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Ten
    一、介绍海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物(‘蛤蜊’,‘珊瑚’,‘螃蟹’,‘海豚’,‘鳗鱼’,‘水母’,‘龙虾’,‘海蛞蝓’,‘章鱼’,‘水獭’,‘企鹅’,‘河豚’,‘魔鬼鱼’,‘......