【ML】机器学习中的随机森林算法
在数据分析领域,每种算法都有其价格。但如果我们考虑整体场景,那么业务问题最多有一个分类任务。考虑到数据的性质,直观地知道要采用什么变得相当困难。随机森林在金融、医疗保健、营销等领域具有多种应用。它们广泛用于欺诈检测、客户流失预测、图像分类和股票市场预测等任务。但今天我们将讨论最受数据专家信赖的顶级分类器技术之一,那就是随机森林分类器。随机森林还有一种回归算法技术,将在此处介绍。术语中的“森林”一词
🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】 深度学习【DL】
🖍foreword
✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。
如果你对这个系列感兴趣的话,可以关注订阅哟👋
文章目录
随机森林算法简介
在数据分析领域,每种算法都有其价格。但如果我们考虑整体场景,那么业务问题最多有一个分类任务。考虑到数据的性质,直观地知道要采用什么变得相当困难。随机森林在金融、医疗保健、营销等领域具有多种应用。它们广泛用于欺诈检测、客户流失预测、图像分类和股票市场预测等任务。
但今天我们将讨论最受数据专家信赖的顶级分类器技术之一,那就是随机森林分类器。随机森林还有一种回归算法技术,将在此处介绍。
术语中的“森林”一词表明它将包含很多树木。该算法包含一组决策树来进行分类,并且当涉及决策树模型的过度拟合时,它也被认为是一种节省技术。决策树模型具有高方差和低偏差,这可能会给我们带来相当不稳定的输出,这与常用的逻辑回归不同,逻辑回归具有高偏差和低方差。这是随机森林可以解决的唯一问题。但在详细讨论随机森林之前,让我们快速浏览一下树的概念。
“决策树是一种分类技术,也是一种回归技术。当通过从根创建分支(本质上是数据中存在的条件)并提供称为叶子的输出来对数据做出决策时,它的效果非常好。”
在现实世界中,森林是树木的组合,而在机器学习世界中,随机森林是决策树的组合/集合。
因此,在我们将决策树组合起来创建森林之前,让我们先了解什么是决策树。
想象一下你将要花费一笔大笔开支,比如买一辆汽车。假设您想获得适合您预算的最佳车型,您不会只是走进陈列室然后走出去,而是开车出去。是这样吗?
因此,假设您想购买一辆可容纳 4 名成人和 2 名儿童的汽车,您更喜欢燃油效率最高的 SUV,您更喜欢一些奢华的产品,例如优质扬声器、天窗、舒适的座椅,并且您有入围车型 A 和 B。
A型是你的朋友X推荐的,因为扬声器很好,而且燃油效率最好。
B型是你的朋友Y推荐的,因为它有6个舒适的座位,扬声器好,天窗好,燃油效率低,但他觉得其他功能让她相信这是最好的。
B型也是你的朋友Z推荐的,因为它有6个舒适的座椅,扬声器更好,天窗也很好,在她的评价中燃油效率很好。
您很可能会选择模型 B,因为您的朋友对这个模型有多数投票。您的朋友已经根据他们选择的功能和基于他们自己逻辑的决策模型进行了投票。
想象一下你的朋友 X、Y、Z 作为决策树,你创建了一个只有很少决策树的随机森林,并根据结果选择了大多数人推荐的那个。
这就是分类器随机森林的工作原理。
什么是随机森林?
维基百科的定义
随机森林或随机决策森林是一种用于分类、回归和其他任务的集成学习方法,通过在训练时构建大量决策树来进行操作。对于分类任务,随机森林的输出是大多数树选择的类别。对于回归任务,返回各个树的均值或平均预测。
随机森林特征
关于随机森林的一些有趣事实 – 特点
- 随机森林的准确率一般都很高
- 它的效率在大数据集中尤其显着
- 提供分类中重要变量的估计
- 生成的森林可以保存和重复利用
- 与其他模型不同,它不会过度拟合更多功能
随机森林如何工作?
随机森林是决策树的集合,每棵树独立地进行预测,然后对值进行平均(回归)/最大投票(分类)以得出最终值。
该模型的优点在于根据特征创建具有不同子特征的不同树。为每棵树选择的特征是随机的,因此树不会变深,并且仅关注特征集。
最后,当它们组合在一起时,我们创建了一个决策树集合,它提供了经过充分学习的预测。
构建随机森林的示例
现在让我们构建一个随机森林模型来购买汽车
其中一棵决策树可以检查座位数量和天窗可用性等功能,并决定是或否
这里,决策树认为座椅参数的数量大于 6,因为买家更喜欢 SUV 并且更喜欢带天窗的汽车。该树将为满足这两个标准的模型提供最高值,如果不满足其中一个参数,则将其评分较低;如果两个参数均不满足,则将其评分最低。让我们看一下下面的示例:
另一个决策树可以检查立体声质量、座椅舒适度和天窗可用性等功能,并决定是或否。这还将根据这些参数的结果对模型进行评级,并根据满足的标准决定是或否。下面也说明了同样的情况。

另一个决策树可以检查座椅数量、座椅舒适度、燃油效率和天窗可用性等功能,并决定是或否。下面给出了相同的决策树。
每个决策树可能会根据数据集给出是或否。每棵树都是独立的,我们使用决策树的决策完全取决于特定树所关注的特征。如果决策树考虑所有特征,树的深度将不断增加,导致模型过拟合。
更有效的方法是将这些决策树组合起来,并根据每棵树的输出创建最终的决策者。那将是一个随机森林
一旦我们收到每个决策树的输出,我们就会使用多数票来做出决定。要将其用作回归模型,我们将取这些值的平均值。
让我们看看随机森林如何看待上述场景。
每棵树的数据是使用称为装袋的方法选择的,该方法从每棵树的数据集中选择一组随机数据点。所选数据可以再次使用(替换)或保留(不替换)。每棵树都会根据提供的数据子集随机选择特征。这种随机性提供了找到特征重要性的可能性,影响大多数决策树的特征将是最重要的特征。
现在,一旦使用数据子集和自己的特征集构建了树,每棵树都将独立执行以提供其决策。在分类的情况下,该决定将是“是”或“否”。
然后,将使用堆叠等方法创建树的集合,这将有助于减少分类错误。最终的输出由最大投票法进行分类决定。
让我们看一下下面的示例。
每个决策树都会根据自己的数据和特征子集独立做出决定,因此结果不会相似。假设决策树 1 建议“购买”,决策树 2 建议“不购买”,决策树 3 建议“购买”,则最大投票将是“购买”,随机森林的结果将是“购买”
每棵树有 3 个主要节点
- 根节点
- 叶节点
- 决策节点
做出最终决策的节点称为“叶节点”,决策的功能在“决策节点”中进行,“根节点”是存储数据的位置。
请注意,选择的特征将是随机的,并且可能在树中重复,这提高了效率并补偿了丢失的数据。在分裂节点时,只考虑特征的子集,并使用该子集中最好的特征进行分裂,这种多样性带来了更好的效率。
当我们创建随机森林机器学习模型时,决策树是基于特征的随机子集创建的,并且树被进一步分割。熵或获得的信息是用于决定树分裂的重要参数。创建分支时,子分支的总熵应小于父节点的熵。如果熵下降,获得的信息也会下降,这是用于阻止树进一步分裂的标准。
它与决策树有何不同?
决策树提供单一路径并同时考虑所有特征。因此,这可能会创建更深的树,从而导致模型过度拟合。随机森林创建多棵具有随机特征的树,树的深度不是很深。
提供决策树集成选项还可以最大化效率,因为它对结果进行平均,从而提供通用结果。
虽然决策树结构在很大程度上取决于训练数据,并且即使训练数据发生微小变化也可能发生巨大变化,但特征的随机选择在结构随数据变化而变化方面几乎没有偏差。通过添加 Bagging 等技术来选择数据,可以进一步减少这种情况。
话虽如此,随机森林所需的存储和计算能力比决策树更多。
总之,随机森林提供了比决策树更好的准确性和效率,这是以存储和计算能力为代价的。
让我们通过超参数进行正则化
超参数帮助我们对模型进行一定程度的控制,以确保更好的效率,下面是一些常用调整的超参数。
N_estimators = 此参数帮助我们确定森林中树木的数量,数量越高,我们创建的聚合模型就越稳健,但这会花费更多的计算能力。
max_depth = 该参数限制每棵树的层数。创建更多级别可以增加在每棵树中考虑更多特征的可能性。深树会创建过度拟合模型,但在随机森林中,这将被克服,因为我们将在最后进行集成。
max_features -此参数帮助我们限制每棵树要考虑的最大特征数。这是决定效率的重要参数之一。一般来说,使用 CV 的网格搜索将使用该参数的各种值来执行,以达到理想值。
bootstrap = 这将帮助我们决定用于采样数据点的方法,是否有替换。
max_samples – 这决定了训练数据中应使用的数据百分比。该参数一般不被触及,因为不用于训练的样本(袋外数据)可以用于评估森林,并且优选使用整个训练数据集来训练森林。
现实世界的随机森林
作为一种可用于分类和预测的机器学习模型,加上良好的效率,这是各个领域的流行模型。
随机森林可以应用于任何多维度的数据集,因此在识别零售业的客户忠诚度、预测金融业的股票价格、向客户推荐产品甚至识别制造业中化学品的正确成分时,它是一个流行的选择行业。
凭借其预测和分类的能力,它在大多数领域比大多数经典模型产生更好的效率。
实时用例
随机森林一直是价格预测、财务报表欺诈检测的首选模型,在这些领域发表的各种研究论文都推荐随机森林作为最准确的生成模型。
随机森林模型已被证明可以在基于特征的疾病预测方面提供良好的准确性 (Ref-3)
随机森林模型已用于在 3D 经颅超声中检测中脑内帕金森相关病变。这是通过训练模型从先验知识中了解器官排列、大小、形状以及叶节点预测器官类别和空间位置而开发的。这样,它提供了改进的类别可预测性。
此外,随机森林技术能够同时关注训练数据的观测值和变量,以开发个体决策树,并分别对分类采取最大投票和对回归问题采取总平均值。它还使用一种装袋技术,以随机方式进行观察,并选择无法代表所有决策树根部的重要变量的所有列。通过这种方式,随机森林通过惩罚准确性来仅生成相互依赖的树。我们有一个经验法则,可以使用随机森林从观察中选择子样本。如果我们考虑训练数据的 2/3 观测值并且 p 是列数,那么
- 对于分类,我们采用 sqrt(p) 列数
- 对于回归,我们采用 p/3 的列数。
如果您想提高模型的准确性,可以调整上述经验法则。
让我们解释装袋和随机森林技术,其中我们绘制两个样本,一个为蓝色,另一个为粉红色。
从上图中,我们可以看到 Bagging 技术选择了一些观测值,但选择了所有列。另一方面,随机森林选择了一些观察结果和一些列来创建不相关的个体树。
下面给出了随机森林分类器的示例想法
上图让我们了解每棵树是如何生长的,以及树的深度根据所选样本的变化,但在最终过程中,进行投票以进行最终分类。此外,当我们处理回归问题时,会进行平均。
分类器对比 - 回归器
随机森林分类器处理具有离散标签或更好地称为类别的数据。
示例 - 患者是否患有癌症、某人是否有资格获得贷款等。
随机森林回归器处理具有数字或连续输出的数据,并且它们不能按类定义。
例如——房屋价格、奶牛产奶量、公司总收入等。
随机森林的优点和缺点
- 它减少了决策树的过度拟合并有助于提高准确性
- 它对于分类和回归问题都很灵活
- 它适用于分类值和连续值
- 它自动处理数据中存在的缺失值
- 不需要数据标准化,因为它使用基于规则的方法。
然而,尽管有这些优点,随机森林算法也有一些缺点。
- 它需要大量的计算能力和资源,因为它构建了大量的树来组合它们的输出。
- 它还需要很多时间进行训练,因为它结合了很多决策树来确定类别。
- 由于决策树的集合,它也受到可解释性的影响,无法确定每个变量的重要性。
随机森林的应用
银行业
银行分析需要付出很大的努力,因为它包含很高的损益风险。客户分析是银行业最常用的研究之一。诸如客户贷款违约机会或检测任何欺诈交易等问题,随机森林可能是一个不错的选择。
上面的表示是一棵树,它根据账户余额、信贷期限、付款状态等条件来决定客户是否有资格获得贷款信贷。
医疗保健行业
在制药行业,随机森林可用于识别某种药物的潜力或药物所需的化学物质的成分。它还可以在医院中用于识别患者所患的疾病、患者患癌症的风险以及许多其他疾病,早期分析和研究在这些疾病中发挥着至关重要的作用。
使用 Python 应用随机森林
Python 中的随机森林回归
对于回归,我们将处理包含基于职位的员工工资的数据。我们将用它来根据员工的职位预测其工资。
让我们导入库和加载数据:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv(‘Salaries.csv')
df.head()
X =df.iloc[:, 1:2].values
y =df.iloc[:, 2].values
由于数据集非常小,我们不会执行任何分割。我们将直接进行数据拟合。
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators = 10, random_state = 0)
model.fit(X, y)
您是否注意到我们通过设置 n_estimators=10 只创建了 10 棵树?树的数量由你决定。由于数据集很小,10 棵树就足够了。
现在我们来预测一个等级为 6.5 的人的工资
y_pred =model.predict([[6.5]])
经过预测,我们可以看到,该员工达到6.5级后,必须获得167000的工资。让我们想象一下,以更好的方式解释它。
X_grid_data = np.arange(min(X), max(X), 0.01)
X_grid_data = X_grid.reshape((len(X_grid_data), 1))
plt.scatter(X, y, color = 'red')
plt.plot(X_grid_data,model.predict(X_grid_data), color = 'blue')
plt.title('Random Forest Regression’)
plt.xlabel('Position')
plt.ylabel('Salary')
plt.show()
Python 中的随机森林分类器
为了进行分类,我们将使用社交网络广告数据,其中包含根据个人年龄和工资购买的产品的信息。让我们导入库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
现在让我们看看数据集:
df = pd.read_csv('Social_Network_Ads.csv')
df
仅供参考,该数据集包含 400 行和 5 列。
X = df.iloc[:, [2, 3]].values
y = df.iloc[:, 4].values
现在我们将分割数据进行训练和测试。我们将用75%的数据进行训练,其余用于测试。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
现在我们将使用 sklearn 库中的 StandardScaler 标准化数据。
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
缩放后,现在让我们看看数据的头部。
现在是时候拟合我们的模型了。
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 0)
model.fit(X_train, y_train)
我们制作了 10 棵树,并使用“熵”作为标准,因为它用于减少数据中的杂质。如果您愿意,您可以增加树的数量,但目前我们将其限制为 10 棵。
现在装修已经结束了。我们将预测测试数据。
y_prediction = model.predict(X_test)
预测后,我们可以通过混淆矩阵进行评估,看看我们的模型表现如何。
from sklearn.metrics import confusion_matrix
conf_mat = confusion_matrix(y_test, y_prediction)
伟大的。正如我们所看到的,我们的模型表现良好,错误分类率非常低,这很有趣。现在让我们可视化我们的训练结果。
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1,X2,model.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Random Forest Classification (Training set)')
plt.xlabel('Age')
plt.ylabel('Salary')
plt.legend()
plt.show()
现在让我们以同样的方式可视化测试结果。
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1,X2,model.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),alpha=0.75,cmap= ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Random Forest Classification (Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()
总结
当我们试图避免构建决策树时过度拟合时,随机森林效果很好。此外,当数据主要包含分类变量时,它也能正常工作。其他算法(例如逻辑回归)在处理数值变量时可能表现出色,但在根据条件做出决策时,随机森林是最佳选择。这完全取决于分析师如何调整参数以提高准确性。由于它使用基于规则的方法,因此过度拟合的可能性通常较小。但同样,选择最佳算法取决于数据和分析师。随机森林是一种非常流行的机器学习模型,因为它提供了良好的效率,所使用的决策与人类思维非常相似。理解特征重要性的能力有助于我们解释模型,尽管它更像是一个黑盒模型。提供的效率和几乎不可能过拟合是该模型的巨大优势。这实际上可以用于任何行业,发表的研究论文证明了这个简单而伟大的模型的有效性。
更多推荐
所有评论(0)