一文读懂随机森林!


哈喽,大家好! 
今天聊聊关于随机森林算法!
在机器学习领域,随机森林是一种强大且常用的集成学习算法。
它的设计理念来源于决策树,并通过将多个决策树的预测结果进行组合来提高模型的性能和泛化能力。
在本文中,我们将以简单易懂的方式介绍随机森林算法,包括其基本原理、公式解释和示例代码。
大白话解释
随机森林就像一片茂密的森林,由许多决策树构成。
每棵决策树都是一颗独立的树,它们共同为我们提供了一个预测结果,这个结果是由所有树的预测结果加权平均而得到的。
这样做的好处是,即使其中某些决策树预测错误,其他决策树的正确预测结果也会对最终的预测结果产生积极影响。
基本原理
随机森林算法的基本原理如下:
从原始数据集中随机抽取一部分数据,形成一个新的子集(有放回抽样)。
使用这个子集训练一棵决策树,并对每个节点使用某种优化算法进行划分。
重复步骤1和2多次,形成多棵决策树。
对于新的输入样本,将其输入到每棵决策树中进行预测,然后根据所有决策树的预测结果进行投票或平均,得到最终的预测结果。
公式解释一下
随机森林的公式解释如下:
输入数据集:,其中 
 是特征向量,
 是对应的标签。
每棵决策树的训练数据集:
,其中 
 由 
 随机抽取形成。
决策树的预测结果:
,表示给定输入 
 的预测结果。
随机森林的预测结果:
,其中 
 是决策树的数量。
示例数据集结合Python代码示例
下面是一个简单的示例,展示了如何使用Python中的sklearn库来构建和训练一个随机森林模型。
# 导入所需库和数据集from sklearn.ensemble import RandomForestClassifierfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_split# 加载鸢尾花数据集iris = load_iris()X, y = iris.data, iris.target# 将数据集划分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# 创建随机森林分类器rf_classifier = RandomForestClassifier(n_estimators=100)# 使用训练集训练模型rf_classifier.fit(X_train, y_train)# 使用测试集进行预测y_pred = rf_classifier.predict(X_test)
以上示例代码演示了如何使用随机森林分类器对鸢尾花数据集进行分类。首先,我们导入必要的库和数据集。
然后,我们将数据集划分为训练集和测试集,通常使用80%的数据作为训练集,20%的数据作为测试集。然后,我们创建一个随机森林分类器对象,并指定n_estimators参数为100,表示构建100棵决策树。
接下来,我们使用训练集对模型进行训练,调用fit()方法并将训练集的特征和标签作为参数传入。最后,我们使用测试集进行预测,调用predict()方法并传入测试集的特征,得到预测结果y_pred。
再举一个例子
下面是一个用于可视化展示随机森林原理的 Python 代码示例,使用了matplotlib库和sklearn库中的make_moons生成月亮形状的数据集:
import numpy as npimport matplotlib.pyplot as pltfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.datasets import make_moons# 生成月亮形状的数据集X, y = make_moons(n_samples=100, noise=0.3, random_state=42)# 创建随机森林分类器rf_classifier = RandomForestClassifier(n_estimators=10, random_state=42)rf_classifier.fit(X, y)# 获取每个决策树的预测结果tree_predictions = np.zeros((len(X), len(rf_classifier.estimators_)))for i, tree in enumerate(rf_classifier.estimators_):    tree_predictions[:, i] = tree.predict(X)# 可视化每个决策树的决策边界plt.figure(figsize=(10, 6))for i in range(len(rf_classifier.estimators_)):    ax = plt.subplot(2, 5, i + 1)    ax.scatter(X[:, 0], X[:, 1], c=y, cmap='bwr', alpha=0.5)    ax.set_xlim([-2.5, 2.5])    ax.set_ylim([-2.5, 2.5])    xx, yy = np.meshgrid(np.linspace(-2.5, 2.5, 100), np.linspace(-2.5, 2.5, 100))    Z = rf_classifier.estimators_[i].predict(np.c_[xx.ravel(), yy.ravel()])    Z = Z.reshape(xx.shape)    ax.contourf(xx, yy, Z, alpha=0.3, cmap='bwr')    ax.set_title(f'Tree {i+1}')plt.tight_layout()plt.show()
以上代码首先使用make_moons函数生成了一个月亮形状的数据集。然后,创建一个含有10棵决策树的随机森林分类器,并用生成的数据集训练模型。接下来,通过循环遍历每棵决策树,将它们的预测结果存储在tree_predictions中。
最后,利用matplotlib库进行可视化展示,绘制每个决策树的决策边界。在图像中,数据点被散点图表示,颜色表示类别。决策边界由等高线图表示,不同的颜色区域表示不同类别的预测结果。每个子图的标题是对应决策树的编号。
运行以上代码可以看到,随机森林中的每棵决策树都尝试对数据进行分类,每个决策树都有自己的决策边界。随机森林通过组合所有决策树的预测结果来得出最终的预测,从而提高了整体的准确性和鲁棒性。

最后
随机森林算法是一种强大而灵活的集成学习算法,通过组合多个决策树的预测结果来提高模型的准确性和稳定性。
它适用于各种机器学习任务,包括分类和回归。本文通过大白话解释、基本原理、公式解释和示例代码的方式介绍了随机森林算法。
希望本文对大家有帮助! 
也欢迎关注、点赞、转发!👇
到顶部