首页 > 其他分享 >12.10

12.10

时间:2024-12-18 18:23:29浏览次数:4  
标签:score pred print train 测试 12.10 test

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

 

一、实验目的

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

二、实验内容

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

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

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

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

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

   1. 算法伪代码

开始

    加载iris数据集

    将数据集分为训练集和测试集(留出法,1/3作为测试集)

    训练随机森林模型

    使用五折交叉验证评估模型性能

    使用测试集测试模型性能

    输出性能指标(准确率、精度、召回率、F1值)

结束

 

   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

 

# 加载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=1/3, random_state=42)

 

# 训练随机森林模型

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

rf.fit(X_train, y_train)

 

# 使用五折交叉验证评估模型性能

cv_scores = cross_val_score(rf, X_train, y_train, cv=5)

 

# 使用训练集测试模型性能

y_train_pred = rf.predict(X_train)

 

# 计算训练集性能指标

train_accuracy = accuracy_score(y_train, y_train_pred)

train_precision = precision_score(y_train, y_train_pred, average='macro')

train_recall = recall_score(y_train, y_train_pred, average='macro')

train_f1 = f1_score(y_train, y_train_pred, average='macro')

 

# 使用测试集测试模型性能

y_test_pred = rf.predict(X_test)

 

# 计算测试集性能指标

test_accuracy = accuracy_score(y_test, y_test_pred)

test_precision = precision_score(y_test, y_test_pred, average='macro')

test_recall = recall_score(y_test, y_test_pred, average='macro')

test_f1 = f1_score(y_test, y_test_pred, average='macro')

 

# 输出性能指标

print("训练集性能指标:")

print(f"训练集准确率: {train_accuracy:.4f}")

print(f"训练集精度: {train_precision:.4f}")

print(f"训练集召回率: {train_recall:.4f}")

print(f"训练集F1值: {train_f1:.4f}")

 

print("\n测试集性能指标:")

print(f"测试集准确率: {test_accuracy:.4f}")

print(f"测试集精度: {test_precision:.4f}")

print(f"测试集召回率: {test_recall:.4f}")

print(f"测试集F1值: {test_f1:.4f}")

 

print("\n五折交叉验证平均准确率: {cv_scores.mean():.4f}")

 

库函数参数说明:

train_test_split: 用于将数据集分为训练集和测试集。

test_size=1/3: 测试集占总数据集的比例。

random_state=42: 随机数生成器的种子,确保结果可复现。

RandomForestClassifier: 随机森林分类器。

n_estimators=100: 森林中树的数量。

random_state=42: 随机数生成器的种子,确保结果可复现。

cross_val_score: 用于进行交叉验证。

cv=5: 交叉验证的折数。

accuracy_score, precision_score, recall_score, f1_score: 分别用于计算准确率、精度、召回率和F1值。

average='macro': 用于多分类问题,计算所有类别的平均值。

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

四、实验结果分析

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

2. 对比分析

准确率(Accuracy):模型预测正确的样本占总样本的比例。

精度(Precision):预测为正类的样本中,实际为正类的比例。

召回率(Recall):实际为正类的样本中,被预测为正类的比例。

F1值(F1 Score):精度和召回率的调和平均值,用于衡量模型的整体性能。

 

标签:score,pred,print,train,测试,12.10,test
From: https://www.cnblogs.com/zzqq1314/p/18615637

相关文章

  • 12.10
    5-移除计算除了内存分配和函数调用外,单条 C++ 语句的性能开销通常都很小。但是如果在循环中执行 100 万次这条语句,或是每次程序处理事件时都执行这条语句,那么这就是个大问题了。绝大多数程序都会有一个或多个主要的事件处理循环和一个或多个处理字符的函数。找出并优化这些循......
  • 2024.12.10(周二)
    机器学习大作业importpandasaspdimportnumpyasnpimportseabornassnsimportmatplotlib.pyplotaspltfromsklearn.model_selectionimporttrain_test_split,cross_val_score,GridSearchCVfromsklearn.preprocessingimportStandardScalerfromsklearn.line......
  • 12.10实验六:朴素贝叶斯算法实现与测试
      一、实验目的深入理解朴素贝叶斯的算法原理,能够使用Python语言实现朴素贝叶斯的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。 二、实验内容(1)从scikit-learn库中加载iris数据集,使用留出法留出1/3的样本作为测试集(注意同分布取样);(2)使用训练集训练朴......
  • 12.10 CW 模拟赛 T3. 循环
    算法很容易想到枚举短边断环之后\(\mathcal{O}(P)\)的求答案那么这个算法还有前途吗?可以发现,对于每次枚举断边,断\((i,i+1)\)和\((i-1,i)\)这两条边,变化量并不大,严格来说,均摊复杂度\(\mathcal{O}(P)\)具体实现上怎么处理呢?将断第\(x\)条边作为横......
  • 12.10 CW 模拟赛 T2. 乘法
    算法剪枝怎么都过不去\(50\%\),红温了不管了容易想到的是,枚举最终\(B\)进制数的位数,然后进行一个搜索来确定答案这样不够优秀,考虑折半搜索,我们将\(B\)进制数分为两个部分,然后分别判断两个部分对\(n\)取余的值,若可以,考虑归并具体怎么操作呢?对于左......
  • 2024.12.10 周二
    2024.12.10周二Q1.1100给你一个序列,你可以对这个序列中的每个数(0<=ai<100)进行拆分,使得最后整个序列单调不递减,询问是否有解。Q2.1200给定一数组,可任意改变顺序,问是否可使a1%a2%a3%...%an!=0。Q3.1300给定数组a,数字x,y。问<i,j>的对数使(ai+aj)%x==0,(ai-aj)%y==0。......
  • 12.10随笔
    这里是12.10随笔。题目留档:实现线性探测法的查找函数。函数接口定义:PositionFind(HashTableH,ElementTypeKey);其中HashTable是开放地址散列表,定义如下:defineMAXTABLESIZE100000/*允许开辟的最大散列表长度*/typedefintElementType;/*关键词类型用整型......
  • 【Python】【练习】24.12.10
    一、题目描述二、题目解答importrandomdefredEnv(k,rest):m=random.random()*restreturnmtotal=float(input("请输入红包金额:"))num=int(input("请输入红包个数:"))remain=totalforiinrange(num-1):money=redEnv(i,remain......
  • Diary - 2024.12.10
    AtcoderARC189EStraightPath。怎么都觉得很简单,我是不是废了???只是记录一下可能比较合理的思考过程。首先发现的是\(n=2,3\)必定无解。然后手玩一下\(n=4\),能找到一个\(\max=3\)的构造。于是大胆猜测下界就是\(3\)。对应构造:横的为\(1\),竖的为\(2\),对角线......
  • 12.10 CW 模拟赛 赛时记录
    前言最近发现只要每分钟都在做有意义的事就不算颓,同理的,这场考试只要每分钟都在想些事情,也就不算短期的主要目标就是利用好时间,其他的问题我基本上已经解决了,就是时间分配利用上的问题所以就只抓时间分配,这段时间先不去想别的,就好好把时间利用起来,不死磕,不畏......