11.12
实验八:随机森林算法的实现与测试
一、实验目的
深入理解随机森林的算法原理,进而理解集成学习的意义,能够使用 Python 语言实现随机森林算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。
二、实验内容
(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注
意同分布取样);
(2)使用训练集训练随机森林分类算法;
(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选
择;
(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验八的
部分。
三、算法步骤、代码、及结果
1. 算法伪代码
输入:
D = {X, y} # 训练数据集 X 和对应的标签 y
T # 随机森林中的决策树个数
输出:
F = {Tree_1, Tree_2, ..., Tree_T} # 构建的 T 棵决策树的集合
步骤:
1. 初始化空的森林 F = {}
2. 对于 i 从 1 到 T:
a. 从训练集 D 中有放回地随机抽取一个子集 D_i,大小与 D 相同(自助采样法)。
b. 在 D_i 上训练一个决策树 Tree_i,使用以下过程:
i. 对于每个节点:
- 随机选择特征的一个子集 F' ⊆ F
- 在 F' 上选择最佳划分特征和切分点
- 根据选择的划分特征和切分点分裂节点
ii. 直到达到停止条件(例如最大树深度或最小样本数)
c. 将训练好的 Tree_i 加入到森林 F 中
3. 返回森林 F
输入:
F = {Tree_1, Tree_2, ..., Tree_T} # 训练好的决策树集合
x # 输入的特征向量
输出:
y_pred # 输入 x 的预测标签
步骤:
1. 初始化一个空的预测数组 votes = {}
2. 对于每棵树 Tree_i ∈ F:
a. 使用 Tree_i 对 x 进行预测,得到预测结果 y_i
b. 将 y_i 添加到 votes 中,统计每个标签出现的次数
3. 根据 votes 中的标签出现次数,选择出现最多的标签作为最终预测 y_pred
4. 返回 y_pred
2. 算法主要代码
完整源代码\调用库方法(函数参数说明)
# 导入必要的库 from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score import numpy as np # 1. 加载数据集 iris = load_iris() X = iris.data # 特征数据 y = iris.target # 标签数据 # 2. 使用留出法,将数据集分为训练集和测试集(1/3 测试集,2/3 训练集) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42) # 3. 创建随机森林分类器并训练模型 rf_clf = RandomForestClassifier(random_state=42) rf_clf.fit(X_train, y_train) # 4. 使用五折交叉验证评估模型性能(准确度) cv_scores = cross_val_score(rf_clf, X_train, y_train, cv=5, scoring='accuracy') # 输出交叉验证准确度 print("Cross-validation accuracy scores:", cv_scores) print("Average cross-validation accuracy:", np.mean(cv_scores)) # 5. 使用训练好的模型在测试集上进行预测 y_pred = rf_clf.predict(X_test) # 6. 计算并输出模型的各项性能指标 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(f"Accuracy: {accuracy}") print(f"Precision: {precision}") print(f"Recall: {recall}") print(f"F1 Score: {f1}")
3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!