Machine Learning 简明教程

Machine Learning - Random Forest

随机森林是一种机器学习算法,它使用决策树的集成来进行预测。该算法最初由 Leo Breiman 在 2001 年提出。该算法背后的关键思想是创建大量的决策树,其中每个决策树都在不同的数据子集上进行训练。然后将这些单个树的预测结果结合起来,生成最终预测。

Working of Random Forest Algorithm

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

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

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

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

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

下一张图展示了随机森林算法是怎么工作的 −

random forest algorithm

随机森林是一种灵活性很高的算法,可以同时用于分类和回归任务。在分类任务中,算法使用各个树的预测众数来做出最后的预测。在回归任务中,算法使用各个树的预测均值。

Advantages of Random Forest Algorithm

随机森林算法比其他机器学习算法有很多优势。一些主要优势如下 −

  1. Robustness to Overfitting − 随机森林算法以其对过拟合的鲁棒性著称。这是因为该算法使用了一堆决策树,从而帮助降低了数据中异常值和噪声的影响。

  2. High Accuracy − 随机森林算法以其很高的精度著称。这是因为该算法将多个决策树的预测结合在一起,从而帮助降低了个别决策树的影响,这些决策树可能存在偏差或不准确。

  3. Handles Missing Data − 随机森林算法无需内插即可处理缺失数据。这是因为该算法仅考虑每个数据点的可用特征,而不要求所有特征都存在于所有数据点中。

  4. Non-Linear Relationships − 随机森林算法可以处理特征和目标变量之间的非线性关系。这是因为该算法使用决策树,而决策树可以对非线性关系建模。

  5. Feature Importance − 随机森林算法可以提供有关模型中每个特征重要性的信息。这些信息可用于识别数据中最关键特征,也可用于特征选择和特征工程。

Implementation of Random Forest Algorithm in Python

让我们看一下 Python 中随机森林算法的实现。我们将使用 scikit-learn 库实现该算法。scikit-learn 库是一个流行的机器学习库,它提供各种机器学习算法和工具。

Step 1 − Importing the Libraries

我们将从导入必要的库开始。我们将使用 pandas 库进行数据处理,并使用 scikit-learn 库实现随机森林算法。

import pandas as pd
from sklearn.ensemble import RandomForestClassifier

Step 2 − Loading the Data

接下来,我们将数据加载到 pandas 数据框中。对于本教程,我们将使用著名的 Iris 数据集,这是一个用于分类任务的经典数据集。

# Loading the iris dataset

iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learningdatabases/iris/iris.data', header=None)

iris.columns = ['sepal_length', 'sepal_width', 'petal_length','petal_width', 'species']

Step 3 − Data Preprocessing

在我们使用数据训练模型之前,我们需要对其进行预处理。这涉及分离特征和目标变量,然后将数据拆分为训练集和测试集。

# Separating the features and target variable
X = iris.iloc[:, :-1]
y = iris.iloc[:, -1]

# Splitting the data into training and testing sets
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.35, random_state=42)

Step 4 − Training the Model

接下来,我们将根据训练数据训练我们的随机森林分类器。

# Creating the Random Forest classifier object
rfc = RandomForestClassifier(n_estimators=100)

# Training the model on the training data
rfc.fit(X_train, y_train)

Step 5 − Making Predictions

一旦我们训练好模型,就可以使用它对测试数据进行预测。

# Making predictions on the test data
y_pred = rfc.predict(X_test)

Step 6 − Evaluating the Model

最后,我们将使用各种指标(例如准确度、精确率、召回率和 F1 值)对模型的性能进行评估。

# Importing the metrics library
from sklearn.metrics import accuracy_score, precision_score,
recall_score, f1_score

# Calculating the accuracy, precision, recall, and F1-score
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')

print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1-score:", f1)

Complete Implementation Example

以下是在 python 中使用 iris 数据集的随机森林算法的完整实现示例 −

import pandas as pd
from sklearn.ensemble import RandomForestClassifier

# Loading the iris dataset
iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learningdatabases/iris/iris.data', header=None)

iris.columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']

# Separating the features and target variable
X = iris.iloc[:, :-1]
y = iris.iloc[:, -1]

# Splitting the data into training and testing sets
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.35, random_state=42)

# Creating the Random Forest classifier object
rfc = RandomForestClassifier(n_estimators=100)

# Training the model on the training data
rfc.fit(X_train, y_train)
# Making predictions on the test data
y_pred = rfc.predict(X_test)
# Importing the metrics library
from sklearn.metrics import accuracy_score, precision_score,
recall_score, f1_score

# Calculating the accuracy, precision, recall, and F1-score
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')

print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1-score:", f1)

这将为我们提供随机森林分类器的以下性能指标 −

Accuracy: 0.9811320754716981
Precision: 0.9821802935010483
Recall: 0.9811320754716981
F1-score: 0.9811157396063056