Machine Learning With Python 简明教程

Classification Algorithms - Random Forest

Introduction

随机森林是一种监督学习算法,用于分类和回归。但它主要用于分类问题。我们知道森林是由树木组成的,树越多,森林就越健壮。同样,随机森林算法针对数据样本创建决策树,然后从每个决策树中获取预测,最后通过投票方式选择最佳解决方案。它是一种集成方法,优于单个决策树,因为它通过平均结果来减少过度拟合。

Working of Random Forest Algorithm

借助以下步骤,我们可以了解随机森林算法的工作原理:

  1. Step 1 - 首先,从给定数据集开始选择随机样本。

  2. Step 2 − 接着,这个算法会为每个样本建一个决策树。然后它会从每个决策树中获取预测结果。

  3. Step 3 − 在这一步中,投票将针对每个预测结果进行。

  4. Step 4 − 最后,选择投票最多的预测结果作为最终的预测结果。

以下图表将说明其工作原理——

test set

Implementation in Python

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

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

接下来,从其 Web 链接下载 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)

Output

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

Pros and Cons of Random Forest

Pros

以下是 Random Forest 算法的优点 −

  1. 它通过对不同的决策树的结果进行平均或组合来克服过拟合的问题。

  2. 与单个决策树相比,随机森林适用于范围更广的数据项。

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

  4. 随机森林非常灵活且具有非常高的准确性。

  5. 随机森林算法不需要对数据进行缩放。即使在不缩放的情况下提供数据,它也能保持良好的准确性。

  6. 随机森林算法不需要对数据进行缩放。即使在不缩放的情况下提供数据,它也能保持良好的准确性。

Cons

以下是 Random Forest 算法的缺点 −

  1. 复杂度是 Random forest 算法的主要缺点。

  2. 与决策树相比,构建 Random forest 困难得多且耗时。

  3. 实现 Random Forest 算法需要更多的计算资源。

  4. 如果我们有大量决策树,它不太直观。

  5. 与其他算法相比,使用随机森林进行预测非常耗时。