sklearn基础--『监督学习』之随机森林分类

随机森林分类 算法是一种基于集成学习(ensemble learning)的机器学习算法,

它的基本原理是通过对多个决策树的预测结果进行平均或投票,以产生最终的分类结果。

随机森林算法可用于回归分类 问题。

关于随机森林算法在回归问题 上的应用可参考:sklearn基础--『监督学习』之随机森林回归

随机森林分类 算法可以应用于各种需要进行分类或预测的问题,如垃圾邮件识别信用卡欺诈检测疾病预测 等,

它也可以与其他机器学习算法进行结合,以进一步提高预测准确率。

1. 算法概述

随机森林的基本原理是构建多棵决策树,每棵树都是基于原始训练数据的一个随机子集进行训练。在构建每棵树时,算法会随机选择一部分特征进行考虑,而不是考虑所有的特征。

然后,对于一个新的输入样本,每棵树都会进行分类预测,并将预测结果提交给"森林"进行最终的分类决策。

一般来说,森林会选择出现次数最多的类别作为最终的分类结果。

理论上来看,随机森林分类 应该比决策树分类有更加好的准确度,特别是在高维度的数据情况下。

2. 创建样本数据

为了后面比较随机森林分类算法和决策树算法的准确性,创建分类多一些(8个分类标签)的样本数据。

python 复制代码
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification

# 分类数据的样本生成器
X, y = make_classification(
    n_samples=1000, n_classes=8, n_clusters_per_class=2, n_informative=6
)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)

plt.show()

3. 模型训练

首先,分割训练集测试集

python 复制代码
from sklearn.model_selection import train_test_split

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)

这次按照9:1的比例来划分训练集和测试集。

决策树分类模型来训练数据:

python 复制代码
from sklearn.tree import DecisionTreeClassifier

reg_names = [
    "ID3算法",
    "C4.5算法",
    "CART算法",
]

# 定义
regs = [
    DecisionTreeClassifier(criterion="entropy"),
    DecisionTreeClassifier(criterion="log_loss"),
    DecisionTreeClassifier(criterion="gini"),
]

# 训练模型
for reg in regs:
    reg.fit(X_train, y_train)

# 在测试集上进行预测
y_preds = []
for reg in regs:
    y_pred = reg.predict(X_test)
    y_preds.append(y_pred)

for i in range(len(y_preds)):
    correct_pred = np.sum(y_preds[i] == y_test)
    print("决策树【{}】 预测正确率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))

# 运行结果
决策树【ID3算法】 预测正确率:43.00%
决策树【C4.5算法】 预测正确率:42.00%
决策树【CART算法】 预测正确率:42.00%

随机森林分类模型来训练数据:

python 复制代码
from sklearn.ensemble import RandomForestClassifier

reg_names = [
    "ID3算法",
    "C4.5算法",
    "CART算法",
]

# 定义
regs = [
    RandomForestClassifier(criterion="entropy"),
    RandomForestClassifier(criterion="log_loss"),
    RandomForestClassifier(criterion="gini"),
]

# 训练模型
for reg in regs:
    reg.fit(X_train, y_train)

# 在测试集上进行预测
y_preds = []
for reg in regs:
    y_pred = reg.predict(X_test)
    y_preds.append(y_pred)

for i in range(len(y_preds)):
    correct_pred = np.sum(y_preds[i] == y_test)
    print("随机森林【{}】 预测正确率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))

# 运行结果
随机森林【ID3算法】 预测正确率:64.00%
随机森林【C4.5算法】 预测正确率:63.00%
随机森林【CART算法】 预测正确率:69.00%

可以看出,随机森林分类 的准确性确实比决策树分类 提高了。

不过,运行过程中也可以发现,随机森林 的训练时间会比决策树长一些。

4. 总结

随机森林分类算法的优势在于:

  1. 抗过拟合能力强:由于采用随机选择特征的方式,可以有效地避免过拟合问题。
  2. 泛化能力强:通过对多个决策树的结果进行投票或平均,可以获得更好的泛化性能。
  3. 对数据特征的选取具有指导性:在构建决策树时会对特征进行选择,这可以为后续的特征选择提供指导。
  4. 适用于大规模数据集:可以有效地处理大规模数据集,并且训练速度相对较快。

当然,随机森林分类算法也存在一些劣势:

  1. 需要大量的内存和计算资源:由于需要构建多个决策树,因此需要更多的内存和计算资源。
  2. 需要调整参数:性能很大程度上取决于参数的设置,如树的数量、每个节点的最小样本数等,这些参数的设置需要一定的经验和实验。
  3. 对新样本的预测性能不稳定:由于是通过投票或平均多个决策树的结果来进行预测,因此对新样本的预测性能可能会受到影响。
相关推荐
菜小包42 分钟前
什么是AI Agent ?在并行科技MAAS平台上怎么搭建自己的Agent?
人工智能·机器学习
pythonSuperman1 小时前
Correlation Matrix of Model Logits
人工智能·深度学习·机器学习
神经星星1 小时前
在线教程丨字节开源 InfiniteYou 图像生成框架,实现高保真面部特征迁移
人工智能·深度学习·机器学习
ayiya_Oese1 小时前
[环境配置] 2. 依赖库安装
人工智能·python·深度学习·神经网络·目标检测·机器学习·计算机视觉
BFT白芙堂2 小时前
Franka 机器人x Dexterity Gen引领遥操作精细任务新时代
人工智能·算法·机器学习·具身智能·franka机器人·科研机器人·机器人解决方案
红队it3 小时前
【机器学习算法】基于python商品销量数据分析大屏可视化预测系统(完整系统源码+数据库+开发笔记+详细启动教程)✅
python·机器学习·数据分析
思陌Ai算法定制3 小时前
图神经网络+多模态:视频动作分割的轻量高效新解法
人工智能·深度学习·神经网络·机器学习·音视频·医学影像
_一条咸鱼_5 小时前
深入剖析 AI 大模型的 Embeddings 原理
人工智能·深度学习·机器学习
databook5 小时前
当决策树遇上脏数据:连续值与缺失值的解决方案
python·机器学习·scikit-learn
tilblackout6 小时前
机器学习详解(19):长短期记忆网络LSTM原理详解
人工智能·机器学习·lstm