首页 > 编程语言 >12.12实验八:随机森林算法实现与测试

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

时间:2024-12-12 21:55:21浏览次数:4  
标签:iris F1 train 算法 score 12.12 测试 随机

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

一、实验目的

深入理解随机森林的算法原理,进而理解集成学习的意义,能够使用 Python 语言实现随机森林算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

 

二、实验内容

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

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

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

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

 

 

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

   1. 算法伪代码

开始

 

   - 特征 X = iris.data

   - 标签 y = iris.target

 

   - 使用留出法,测试集占 1/3

   - 确保分层抽样以保持标签分布

 

   - 设置树的数量为 100

   - 设置随机种子以确保结果可重复

 

   - 调用训练方法

 

   - 准确度

   - 精度(加权)

   - 召回率(加权)

   - F1 值(加权)

 

   - 对训练集进行交叉验证

   - 计算每个评分指标的平均值

 

   - 调用预测方法

 

   - 显示准确度、精度、召回率和 F1 值

 

结束

 

   2. 算法主要代码

完整源代码\调用库方法(函数参数说明)

'''

Created on 2024年12月12日

 

@author: 席酒

'''

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 make_scorer, accuracy_score, precision_score, recall_score, f1_score, classification_report

 

# 加载 iris 数据集

iris = load_iris()

X = iris.data # 特征

y = iris.target # 标签

 

# 使用留出法将数据集分为训练集和测试集,测试集占 1/3

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

 

# 创建随机森林分类器

rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)

 

# 训练模型

rf_classifier.fit(X_train, y_train)

 

# 定义评分指标

scoring = {

'accuracy': make_scorer(accuracy_score),

'precision': make_scorer(precision_score, average='weighted'),

'recall': make_scorer(recall_score, average='weighted'),

'f1': make_scorer(f1_score, average='weighted')

}

 

# 进行五折交叉验证

scores = {metric: cross_val_score(rf_classifier, X_train, y_train, cv=5, scoring=scorer).mean() for metric, scorer in scoring.items()}

 

print("交叉验证结果:")

print(scores)

 

# 使用测试集进行预测

y_pred = rf_classifier.predict(X_test)

 

# 输出分类报告

report = classification_report(y_test, y_pred)

print("测试集分类报告:")

print(report)

 

 

 

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

 

 

 

四、实验结果分析

1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)

 

 

 

2. 对比分析

 

类别

精度 (Precision)

召回率 (Recall)

F1 值 (F1 Score)

支持 (Support)

0

1.00

1.00

1.00

16

1

0.80

0.94

0.86

17

2

0.93

0.76

0.84

17

总体

0.90

0.90

0.90

50

标签:iris,F1,train,算法,score,12.12,测试,随机
From: https://www.cnblogs.com/yindantong/p/18603512

相关文章

  • 每日一道算法题之拓扑排序之按照最小字典输出
    importjava.io.*;importjava.util.*;publicclassMain{publicstaticintn=100001;publicstaticintm=100001;publicstaticArrayList<ArrayList<Integer>>graph=newArrayList<>();publicstaticPriorityQueue&......
  • 12.12随笔
    这里是12.12随笔。题目留档:7-1整型关键字的散列映射分数30作者DS课程组单位浙江大学给定一系列整型关键字和素数p,用除留余数法定义的散列函数H(key)=key%p将关键字映射到长度为p的散列表中。用线性探测法解决冲突。输入格式:输入第一行首先给出两个正整数n(≤1000......
  • 每日一刷——二叉树的构建——12.12
    第一题:最大二叉树题目描述:654.最大二叉树-力扣(LeetCode)我的想法:我感觉这个题目最开始大家都能想到的暴力做法就是遍历找到数组中的最大值,然后再遍历一遍,把在它左边的依次找到最大值,但是emmm,感觉效率很低,时间上肯定过不了然后其实我会觉得这个题目跟大根堆和小根堆有......
  • 12.12 数据结构,创建顺序表
    1.思维导图2.创建顺序表程序代码:1>头文件seqList.h:#ifndef__SEQLIST_H__#define__SEQLIST_H__#include<stdio.h>#include<stdlib.h>#include<string.h>//数据类型重命名typedefintDataType;//宏定义线性表的最大容量#defineMAX30//定义顺序表的结构体......
  • 算法资料
    1.代码模板资料:1.OIWiki2.AcWing3.https://www.cnblogs.com/lightmon5210/p/181837184.https://www.cnblogs.com/2017py/p/15628937.html5.https://blog.csdn.net/weixin_45697774/article/details/1054932186.《算法竞赛》(罗勇军)7.《算法竞赛进阶指南》(李煜东)2.库函数资......
  • 12.12 CW 模拟赛 T3. 消除贫困
    思路朴素容易发现一个人资金变化是这样的:对于\(op=1\)的情况,会将其直接变成\(x\)对于\(op=2\)的情况,将其变成\(\max(x,当前值)\)直接用线段树暴力的维护即可巧妙容易发现\(op=2\)相当于一个大保底,我们先倒着处理出每个人到\(i\)位置至少有多少......
  • 12.12 CW 模拟赛 T1. 理想路径
    前言作为一个别的不行抗伤无敌的\(\rm{man}\),区区反向\(\rm{rk\1}\)不足为惧\(\rm{HD0X}\)巨佬场切\(2700\),\(\%\%\%\)思路朴素先把考场上一些基础的想法搬过来考虑一个环什么时候会导致产生字典序负环,这个好像还比较显然,就是如果出去的那个点的字典序小......
  • 排序算法-希尔排序
    介绍希尔排序也称缩小增量排序,属于插入排序中的一种排序算法,是在插入排序的基础上进行的改进,采用分组策略进行排序。相关特点时间复杂度:最好:O(n)、最坏:O(n2)、平均:O(n1.3)辅助空间复杂度:O(1)稳定性:不稳定排序原理希尔排序通过设定一个初始增量,将数组元素分组进行插入排序......
  • 【算法基础】图的存储与遍历
    一、图的存储在我们存储图的时候,主要使用邻接矩阵、邻接表两种方式来存储。通常邻接矩阵存储稠密图(边多),临界矩阵存储稀疏图(边少)。1.1邻接矩阵存储邻接矩阵听起来比较高大上,其实就是用二维数组来表示\(a\)点与\(b\)点之间有一条边。例如在上述无向图中\(1\)与\(4\)之......
  • 12.11实验七:K 均值聚类算法实现与测试
      一、实验目的深入理解K均值聚类算法的算法原理,进而理解无监督学习的意义,能够使用Python语言实现K均值聚类算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。 二、实验内容 (1)从scikit-learn库中加载iris数据集,使用留出法留出1/3的样本作为测......