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

 

 

posted @   奶油冰激凌  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示