2024.10.10

实验八:随机森林算法实现与测试

一、实验目的

深入理解随机森林的算法原理,进而理解集成学习的意义,能够使用 Python 语言实现

随机森林算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

二、实验内容

(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注

意同分布取样);

(2)使用训练集训练随机森林分类算法;

(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选

择;

(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验八的

部分。

 

三、算法步骤、代码、及结果

   1. 算法伪代码

(1). 导入必要的库  

    - numpy  

    - sklearn.datasets (load_iris)  

    - sklearn.model_selection (train_test_split, cross_val_score)  

    - sklearn.ensemble (RandomForestClassifier)  

    - sklearn.metrics (accuracy_score, precision_score, recall_score, f1_score, classification_report, confusion_matrix)  

 

(2). 加载数据集  

    - iris = load_iris()  

    - X, y = iris.data, iris.target  

 

(3). 数据集分割  

    - 使用train_test_split分割数据集为训练集和测试集  

    - 输入: X, y, test_size=0.33, random_state=42, stratify=y  

    - 输出: X_train, X_test, y_train, y_test  

 

(4). 创建随机森林分类器实例  

    - rf_model = RandomForestClassifier(n_estimators=100, random_state=42)  

 

(5). 训练模型  

    - rf_model.fit(X_train, y_train)  

 

(6). 使用交叉验证评估模型性能  

    - 定义scoring字典: accuracy, precision_weighted, recall_weighted, f1_weighted  

    - 对于每个metric,在训练集上使用cross_val_score进行评估  

 

(7). 打印交叉验证结果  

    - 输出每个metric的平均值和标准差  

 

(8). 使用测试集评估模型性能  

    - y_pred = rf_model.predict(X_test  

    - 计算准确度、精确率、召回率及F1值  

 

(9). 打印测试结果  

    - 输出测试集的各项指标  

 

(10). 生成分类报告和混淆矩阵  

    - 打印classification_reportconfusion_matrix

   2. 算法主要代码

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.metrics import classification_report, confusion_matrix

# 1. 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 2. 留出法分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

# 3. 创建和训练随机森林分类器
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

# 4. 使用五折交叉验证评估模型性能
scoring = {
    'accuracy': 'accuracy',
    'precision': 'precision_weighted',
    'recall': 'recall_weighted',
    'f1': 'f1_weighted'
}

# 评估模型性能
cv_results = {metric: cross_val_score(rf_model, X_train, y_train, cv=5, scoring=scoring[metric]) for metric in scoring}

# 打印结果
for metric, values in cv_results.items():
    print(f"{metric}:\n 平均值: {np.mean(values):.2f}, 标准差: {np.std(values):.2f}\n")

# 5. 使用测试集评估模型性能
y_pred = rf_model.predict(X_test)

# 计算各项指标
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:.2f}")
print(f"测试集精确率: {precision:.2f}")
print(f"测试集召回率: {recall:.2f}")
print(f"测试集F1: {f1:.2f}")

# 生成分类报告和混淆矩阵
print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

# 计算混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩阵:")
print(conf_matrix)

 

调用库方法(函数参数说明)

1.load_iris()

 

来源:sklearn.datasets

作用:加载Iris数据集。

2.train_test_split()

 

来源:sklearn.model_selection

参数:

X:特征数据。

y:目标数据。

test_size:测试集的比例。

random_state:随机数生成器的种子。

stratify:保持训练集和测试集的类别比例。

作用:将数据集划分为训练集和测试集。

3.KMeans()

 

来源:sklearn.cluster

参数:

n_clusters:聚类的数量。

random_state:随机数生成器的种子。

作用:创建一个K均值聚类模型实例。

4.fit()

 

来源:sklearn.base

参数:

X_train:训练集的特征数据。

作用:训练K均值聚类模型。

5.predict()

来源:sklearn.base

参数:

X_test:测试集的特征数据。

作用:对测试集进行聚类预测。

6.silhouette_score()

来源:sklearn.metrics

参数:

X:特征数据。

labels:聚类标签。

作用:计算轮廓系数,评估聚类性能。

7.cross_val_score()

来源:sklearn.model_selection

参数:

estimator:评估的模型。

X:特征数据。

y:目标数据。

cv:交叉验证的折数。

scoring:评分函数。

作用:使用交叉验证评估模型性能。

8.classification_report()

来源:sklearn.metrics

参数:

y_true:真实标签。

y_pred:预测标签。

target_names:类别名称。

作用:输出一个详细的分类报告。

9.confusion_matrix()

 

来源:sklearn.metrics

参数:

y_true:真实标签。

y_pred:预测标签。

作用:输出混淆矩阵。

   3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

posted @ 2024-10-10 00:14  kuku睡  阅读(24)  评论(0)    收藏  举报