随机森林(Random Forest)是一种集成学习方法,由多个决策树组成,可用于分类和回归任务。
基本原理
随机森林的核心思想是构建多个决策树,并将这些决策树的结果进行综合。在构建每棵决策树时,采用了两种随机化策略:
数据采样随机:使用自助采样法(Bootstrap Sampling)从原始训练数据集中有放回地抽取一定数量的样本,形成一个新的训练子集,用于训练每一棵决策树。这意味着每棵树的训练数据可能会有重复和缺失,使得每棵树所学习到的模式有所不同。
特征选择随机:在每个节点进行分裂时,不是考虑所有的特征,而是随机选择一部分特征,然后从这些随机选择的特征中选取最优的特征进行分裂。这种方式增加了树之间的多样性。
优点
高准确性:通过集成多个决策树,随机森林能够有效降低过拟合的风险,提高模型的泛化能力,从而在大多数情况下能获得较高的预测准确性。
处理高维数据:可以处理包含大量特征的数据,而且在处理过程中不需要进行特征选择的预处理,因为随机森林在构建决策树时会自动选择有价值的特征。
对缺失值和异常值鲁棒:对数据中的缺失值和异常值具有较好的容忍度,即使数据存在一定的噪声,也能保持较好的性能。
可解释性较好:虽然随机森林由多个决策树组成,但可以通过计算特征的重要性来理解每个特征对预测结果的贡献程度,具有一定的可解释性。
缺点
计算复杂度较高:由于需要构建多个决策树,训练和预测的时间相对较长,尤其是当数据集较大或决策树数量较多时,计算资源的消耗会比较大。
缺乏对模型的精细控制:相比于单个决策树,随机森林的模型结构更为复杂,难以对其进行精细的调整和控制。
应用场景
金融领域:用于信用风险评估、欺诈检测等,例如根据客户的信用记录、收入情况等特征预测其违约的可能性。
医疗领域:辅助疾病诊断,如根据患者的症状、检查结果等信息判断患者是否患有某种疾病。
图像识别领域:对图像进行分类和识别,例如区分不同类型的动物、植物等。
代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = load_iris()
# 将数据转换为DataFrame格式,方便查看(可选步骤)
data = pd.DataFrame(data= np.cbind(iris['data'], iris['target']),
columns= iris['feature_names'] + ['target'])
# 划分特征(X)和目标变量(y)
X = iris.data
y = iris.target
# 划分训练集和测试集,按照8:2的比例划分,随机种子设为42以保证可重复性
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建随机森林分类器对象,这里设置一些常见参数示例,可按需调整
# n_estimators表示树的数量,这里设置为100棵树
model = RandomForestClassifier(n_estimators=100)
# 使用训练集训练模型
model.fit(X_train, y_train)
# 使用测试集进行预测
y_pred = model.predict(X_test)
# 计算模型在测试集上的准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型在测试集上的准确率: {accuracy}")
# 查看特征重要性,了解各个特征对分类结果的贡献程度
feature_importances = model.feature_importances_
feature_names = iris.feature_names
plt.bar(feature_names, feature_importances)
plt.xlabel('特征')
plt.ylabel('重要性')
plt.title('随机森林中各特征重要性')
plt.show()
数据准备阶段:
首先通过load_iris函数加载鸢尾花数据集,这个数据集在sklearn中是内置的,方便获取和使用。
接着把数据整理成pandas的DataFrame格式(这一步是可选的,主要为了更清晰直观地查看数据情况),然后从数据集中划分出特征数据(X)和目标变量(y)。
再使用train_test_split函数按照 8:2 的比例将数据集划分为训练集和测试集,并且设置了随机种子为 42,确保每次划分数据集的结果是一致的、可重复的。
模型构建与训练阶段:
创建了RandomForestClassifier类的对象,这里设置了n_estimators参数为 100,意味着随机森林中将包含 100 棵决策树,当然这个参数可以根据实际情况进行调整优化。
调用fit方法使用训练集数据对模型进行训练,让模型学习数据中的特征和目标变量之间的关系。
模型评估阶段:
利用训练好的模型对测试集数据进行预测,得到预测结果y_pred。
通过accuracy_score函数计算模型在测试集上的准确率,以此来衡量模型的分类效果,了解模型对鸢尾花品种预测的准确程度。
特征重要性分析阶段:
使用模型的feature_importances_属性获取各个特征的重要性得分,它反映了每个特征在随机森林进行分类决策过程中的相对重要程度。
借助matplotlib库绘制柱状图,将各个特征及其对应的重要性直观地展示出来,帮助我们进一步了解哪些特征对判断鸢尾花品种起到更关键的作用。