📜  分类算法-随机森林

📅  最后修改于: 2020-12-10 05:37:43             🧑  作者: Mango


介绍

随机森林是一种监督学习算法,可用于分类和回归。但是,它主要用于分类问题。众所周知,森林由树木组成,更多的树木意味着更坚固的森林。同样,随机森林算法在数据样本上创建决策树,然后从每个样本中获取预测,最后通过投票选择最佳解决方案。它是一种集成方法,比单个决策树要好,因为它通过对结果求平均值来减少过度拟合。

随机森林算法的工作

我们可以通过以下步骤来了解随机森林算法的工作原理-

  • 步骤1-首先,从给定的数据集中选择随机样本。

  • 步骤2-接下来,该算法将为每个样本构造一个决策树。然后它将从每个决策树中获得预测结果。

  • 步骤3-在此步骤中,将对每个预测结果进行投票。

  • 步骤4-最后,选择投票最多的预测结果作为最终预测结果。

下图将说明其工作方式-

测试集

用Python实现

首先,从导入必要的Python包开始-

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

接下来,如下所示从其网络链接下载iris数据集:

path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

接下来,我们需要为数据集分配列名,如下所示:

headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

现在,我们需要将数据集读取为pandas数据框,如下所示:

dataset = pd.read_csv(path, names=headernames)
dataset.head()
sepal-length sepal-width petal-length petal-width Class
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa

数据预处理将在以下脚本行的帮助下完成-

X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values

接下来,我们将数据分为训练和测试拆分。以下代码将数据集拆分为70%的训练数据和30%的测试数据-

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)

接下来,在sklearn的RandomForestClassifier类的帮助下训练模型,如下所示-

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators=50)
classifier.fit(X_train, y_train)

最后,我们需要进行预测。可以在以下脚本的帮助下完成-

y_pred = classifier.predict(X_test)

接下来,按如下所示打印结果-

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)

输出

Confusion Matrix:
[
   [14 0 0]
   [ 0 18 1]
   [ 0 0 12]
]
Classification Report:
               precision       recall     f1-score       support
Iris-setosa        1.00         1.00        1.00         14
Iris-versicolor    1.00         0.95        0.97         19
Iris-virginica     0.92         1.00        0.96         12
micro avg          0.98         0.98        0.98         45
macro avg          0.97         0.98        0.98         45
weighted avg       0.98         0.98        0.98         45

Accuracy: 0.9777777777777777

随机森林的利与弊

优点

以下是随机森林算法的优点-

  • 它通过平均或组合不同决策树的结果来克服过拟合的问题。

  • 与单个决策树相比,随机森林在较大范围的数据项上效果很好。

  • 随机森林的方差小于单个决策树。

  • 随机森林非常灵活,并且具有很高的准确性。

  • 在随机森林算法中不需要数据缩放。即使在没有缩放的情况下提供数据后,它仍保持良好的准确性。

  • 在随机森林算法中不需要数据缩放。即使在没有缩放的情况下提供数据后,它仍保持良好的准确性。

缺点

以下是随机森林算法的缺点-

  • 复杂性是随机森林算法的主要缺点。

  • 与决策树相比,随机森林的建设更加困难且耗时。

  • 实现随机森林算法需要更多的计算资源。

  • 如果我们有大量的决策树集合,那么它就不太直观了。

  • 与其他算法相比,使用随机森林的预测过程非常耗时。