Machine Learning 简明教程
Machine Learning - Random Forest
随机森林是一种机器学习算法,它使用决策树的集成来进行预测。该算法最初由 Leo Breiman 在 2001 年提出。该算法背后的关键思想是创建大量的决策树,其中每个决策树都在不同的数据子集上进行训练。然后将这些单个树的预测结果结合起来,生成最终预测。
Working of Random Forest Algorithm
借助以下步骤,我们可以了解随机森林算法的工作原理:
-
Step 1 - 首先,从给定数据集开始选择随机样本。
-
Step 2 − 接着,这个算法会为每个样本建一个决策树。然后它会从每个决策树中获取预测结果。
-
Step 3 − 在这一步中,投票将针对每个预测结果进行。
-
Step 4 − 最后,选择投票最多的预测结果作为最终的预测结果。
下一张图展示了随机森林算法是怎么工作的 −
随机森林是一种灵活性很高的算法,可以同时用于分类和回归任务。在分类任务中,算法使用各个树的预测众数来做出最后的预测。在回归任务中,算法使用各个树的预测均值。
Advantages of Random Forest Algorithm
随机森林算法比其他机器学习算法有很多优势。一些主要优势如下 −
-
Robustness to Overfitting − 随机森林算法以其对过拟合的鲁棒性著称。这是因为该算法使用了一堆决策树,从而帮助降低了数据中异常值和噪声的影响。
-
High Accuracy − 随机森林算法以其很高的精度著称。这是因为该算法将多个决策树的预测结合在一起,从而帮助降低了个别决策树的影响,这些决策树可能存在偏差或不准确。
-
Handles Missing Data − 随机森林算法无需内插即可处理缺失数据。这是因为该算法仅考虑每个数据点的可用特征,而不要求所有特征都存在于所有数据点中。
-
Non-Linear Relationships − 随机森林算法可以处理特征和目标变量之间的非线性关系。这是因为该算法使用决策树,而决策树可以对非线性关系建模。
-
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