首页 > 其他分享 >12.24日报

12.24日报

时间:2025-01-14 20:23:05浏览次数:1  
标签:F1 score 训练 日报 12.24 train 测试 test

完成机器学习实验四,以下为实验内容:

实验四:SMO 算法实现与测试

一、实验目的

深入理解支持向量机(SVM)的算法原理,能够使用 Python 语言实现支持向量机的训 练与测试,并且使用五折交叉验证算法进行模型训练与评估。

二、实验内容

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

(2)使用训练集训练支持向量机—SMO 分类算法;

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

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

 

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

   1. 算法伪代码

    1. 导入必要的库

   - 导入数据集加载库

   - 导入数据划分库

   - 导入支持向量机分类器库

   - 导入分类报告生成库

   - 导入精确度、召回率和F1分数计算库

   - 导入NumPy库

 

2. 加载iris数据集

   - 使用datasets.load_iris()函数加载iris数据集,获取特征集X和标签集y

 

3. 数据划分

   - 使用train_test_split函数将特征集X和标签集y划分为训练集和测试集

   - 设置测试集大小为1/3,随机种子为42

 

4. 初始化支持向量机分类器

   - 创建SVC实例svm_model,设置核函数为'linear',惩罚参数C为1.0

 

5. 训练模型

   - 使用训练集X_train和y_train训练svm_model模型

 

6. 交叉验证评估模型性能

   - 使用cross_val_score函数对训练集进行5折交叉验证,并计算准确率

   - 打印每一折的准确率分数和平均准确率

 

7. 测试训练集性能

   - 使用训练好的模型svm_model对训练集X_train进行预测,得到预测结果y_train_pred

   - 使用classification_report函数生成训练集的性能报告,并打印

 

8. 测试测试集性能

   - 使用训练好的模型svm_model对测试集X_test进行预测,得到预测结果y_test_pred

   - 使用classification_report函数生成测试集的性能报告,并打印

 

9. 计算并打印精确度、召回率和F1分数

   - 使用precision_score函数计算训练集的精确度,并打印

   - 使用recall_score函数计算训练集的召回率,并打印

   - 使用f1_score函数计算训练集的F1分数,并打印

   - 重复上述步骤计算并打印测试集的精确度、召回率和F1分数

 

10. 结束

   2. 算法主要代码

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

# 导入必要的库
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.svm import SVC
from sklearn.metrics import classification_report
from sklearn.metrics import precision_score, recall_score, f1_score
import numpy as np

# 加载 iris 数据集并留出测试集
iris = datasets.load_iris()
X, y = iris.data, iris.target

# 使用留出法留出 1/3 的样本作为测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42)

# 使用训练集训练支持向量机—SMO 分类算法
svm_model = SVC(kernel='linear', C=1.0)
svm_model.fit(X_train, y_train)

# 使用五折交叉验证对模型性能进行评估
scores = cross_val_score(svm_model, X_train, y_train, cv=5, scoring='accuracy')
print(f"训练准确率分数为每一折:{scores}")
print(f"平均训练准确率:{np.mean(scores)}")

# 使用训练集测试模型的性能
y_train_pred = svm_model.predict(X_train)
print("训练集结果:")
print(classification_report(y_train, y_train_pred, labels=np.unique(y_train), target_names=iris.target_names))

# 使用测试集测试模型的性能
y_test_pred = svm_model.predict(X_test)
print("\n测试集结果:")
print(classification_report(y_test, y_test_pred, labels=np.unique(y_test), target_names=iris.target_names))

# 计算并打印精确度、召回率和F1分数
print("\n精确度、召回率和F1分数:")
print(f"训练集:")
print(f"精确度(查准率): {precision_score(y_train, y_train_pred, average='weighted', labels=np.unique(y_train))}")
print(f"召回率(查全率): {recall_score(y_train, y_train_pred, average='weighted', labels=np.unique(y_train))}")
print(f"F1分数: {f1_score(y_train, y_train_pred, average='weighted', labels=np.unique(y_train))}")

print(f"\n测试集:")
print(f"精确度(查准率): {precision_score(y_test, y_test_pred, average='weighted', labels=np.unique(y_test))}")
print(f"召回率(查全率): {recall_score(y_test, y_test_pred, average='weighted', labels=np.unique(y_test))}")
print(f"F1分数: {f1_score(y_test, y_test_pred, average='weighted', labels=np.unique(y_test))}")

1. datasets.load_iris()

说明:加载鸢尾花(iris)数据集。

参数:无。

返回值:返回一个包含鸢尾花数据集的特征集(X)和标签集(y)的对象。

默认值:无参数。

2. train_test_split(X, y, test_size=1/3, random_state=42)

说明:将数据集X和y划分为训练集和测试集。

参数:

X:特征集。

y:标签集。

test_size:测试集的比例,默认为0.25(即25%)。

random_state:随机数生成器的种子,默认为None。设置相同的种子可以确保每次划分的结果相同。

返回值:返回训练集的特征集(X_train)、测试集的特征集(X_test)、训练集的标签集(y_train)和测试集的标签集(y_test)。

3. SVC(kernel='linear', C=1.0)

说明:创建支持向量机(SVM)分类器实例。

参数:

kernel:核函数,默认为'rbf'。其他选项包括'linear'、'poly'、'sigmoid'等。

C:惩罚参数C,控制误差项的强度,默认为1.0。较小的值表示更严格的限制。

返回值:返回一个SVC实例。

4. fit(X_train, y_train)

说明:训练模型。

参数:

X_train:训练集的特征集。

y_train:训练集的标签集。

返回值:返回训练好的模型。

5. cross_val_score(svm_model, X_train, y_train, cv=5, scoring='accuracy')

说明:进行交叉验证,并计算指定的评分指标。

参数:

svm_model:评估的模型。

X_train:训练集的特征集。

y_train:训练集的标签集。

cv:交叉验证的折数,默认为5。

scoring:评分指标,默认为‘accuracy’。其他选项包括‘precision’、‘recall’、‘f1’等。

返回值:返回一个数组,包含每次交叉验证的评分。

6. predict(X_train) 和 predict(X_test)

说明:对训练集和测试集进行预测。

参数:

X_train:训练集的特征集。

X_test:测试集的特征集。

返回值:返回预测的标签集。

7. classification_report(y_true, y_pred, labels=np.unique(y_train), target_names=iris.target_names)

说明:生成性能报告,包括精确度、召回率、F1分数等。

参数:

y_true:真实的标签集。

y_pred:预测的标签集。

labels:标签列表,如果为None,则使用y_true中的所有唯一标签,默认为None。

target_names:标签名称列表,用于报告中标签的显示。

返回值:返回一个字符串,包含性能报告。

8. precision_score(y_true, y_pred, average='weighted', labels=np.unique(y_train))

说明:计算精确度。

参数:

y_true:真实的标签集。

y_pred:预测的标签集。

average:计算平均值的方法,默认为'binary'。其他选项包括'micro'、'macro'、'weighted'、None等。

labels:标签列表,如果为None,则使用y_true中的所有唯一标签,默认为None。

返回值:返回精确度的值。

9. recall_score(y_true, y_pred, average='weighted', labels=np.unique(y_train))

说明:计算召回率。

参数:同precision_score。

返回值:返回召回率的值。

10. f1_score(y_true, y_pred, average='weighted', labels=np.unique(y_train))

说明:计算F1分数。

参数:同precision_score。

返回值:返回F1分数的值。

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

 

 

四、实验结果分析

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

 

 

2. 对比分析

训练集性能:

准确率:0.97(97%)

精确度(查准率):0.9703

召回率(查全率):0.97

F1分数:0.97

测试集性能:

准确率:1.00(100%)

精确度(查准率):1.0

召回率(查全率):1.0

F1分数:1.0

对比分析:

准确率对比:

 

训练集准确率为97%,而测试集准确率达到了100%。测试集的准确率略高于训练集,这表明模型在未见过的测试数据上表现非常好,甚至超过了在训练数据上的表现。

精确度对比:

 

训练集精确度为97.03%,测试集精确度为100%。测试集的精确度更高,表明模型在测试集上几乎没有做出错误的正类预测。

召回率对比:

 

训练集召回率为97%,测试集召回率为100%。测试集的召回率更高,表明模型在测试集上能够成功识别所有的正类样本。

F1分数对比:

 

训练集F1分数为97%,测试集F1分数为100%。测试集的F1分数更高,综合反映了测试集上精确度和召回率的优异表现。

总结:

模型在测试集上的表现非常出色,所有关键性能指标(准确率、精确度、召回率、F1分数)都达到了100%,这在实际应用中是非常罕见的,可能表明模型对iris数据集的分类非常准确。

训练集的性能略低于测试集,但差距不大,且训练集的性能已经非常高。这可能表明模型在训练数据上已经学到了足够的特征来准确分类测试数据。

由于测试集的性能指标均为100%,因此不存在过拟合的问题。模型在训练集和测试集上都显示出了很好的泛化能力。

标签:F1,score,训练,日报,12.24,train,测试,test
From: https://www.cnblogs.com/lijianlongCode13/p/18671506

相关文章

  • 12.25日报
    完成大型数据库实验二熟悉常用的HDFS操作,以下为实验内容实验2熟悉常用的HDFS操作  1.实验目的(1)理解HDFS在Hadoop体系结构中的角色;(2)熟练使用HDFS操作常用的Shell命令;(3)熟悉HDFS操作常用的JavaAPI。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3......
  • 12.26日报
    完成机器学习实验五,以下为实验内容:实验五:BP神经网络算法实现与测试一、实验目的深入理解支持向量机(SVM)的算法原理,能够使用Python语言实现支持向量机的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。  二、实验内容(1)从scikit-learn库中加载iris数据集,使......
  • 12.27日报
    完成大型数据库实验三熟悉常用的HBASE操作,以下为实验内容:实验3熟悉常用的HBase操作  1.实验目的        (1)理解HBase在Hadoop体系结构中的角色;        (2)熟练使用HBase操作常用的Shell命令;        (3)熟悉HBase操作常用的JavaAPI。2.实验平台......
  • 12.31日报
    完成大型数据库实验五,以下为实验内容:实验5MapReduce初级编程实践 1.实验目的(1)通过实验掌握基本的MapReduce编程方法;(2)掌握用MapReduce解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04)(2)Hadoop版本:3......
  • 12.18日报
    完成机器学习实验,并完成大型数据库实验,以下为实验内容:实验一:数据准备与模型评估一、实验目的熟悉Python的基本操作,掌握对数据集的读写实现、对模型性能的评估实现的能力;加深对训练集、测试集、N折交叉验证、模型评估标准的理解。 二、实验内容(1)利用pandas库从本地读......
  • 12.19日报
    继续完成机器学习实验二,以下为部分实验内容:实验二:逻辑回归算法实现与测试一、实验目的深入理解对数几率回归(即逻辑回归的)的算法原理,能够使用Python语言实现对数几率回归的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。  二、实验内容1)从scikit-learn库中......
  • 12.20日报
    完成大型数据库实验一熟悉常用的linux操作和hadoop操作,以下为今日实验内容:1.实验目的Hadoop运行在Linux系统上,因此,需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作,为顺利开展后续其他实验奠定基础。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ub......
  • 华尔街日报无需登录查看不可查看内容
    使用第三方接口来为当前页面提供服务的脚本,简单编写,使用应用程序接口调用保存页面实现永久存储及达到阅读某街日报内容(接口无需加速)对于那些可能很快变化的网页,这个脚本会非常有用。本站保存的网页不包含脚本和动态对象,所以是安全的,不会有弹窗或其他恶意程序。油猴脚本地址:华尔......
  • 2024.12.24(MyBatis知识点)
    SSM=springmvc+spring+mybatis组合框架的一员,是一种持久层框架持久层主要是完成与数据库的相关操作,数据库访问对象(DataAccessObject),所以也称为DAO层框架是一个半成品的软件,需要我们遵守对应的规范去完成开发工作框架类型 框架作用 典型代表持久性框架 专注于解决数......
  • 软工寒假日报(一)
    今天开始简单了解了python爬虫,并安装了相关依赖importrequestsfrombs4importBeautifulSoupimportpandasaspd#爬取一个页面的数据defscrape_page(url):headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,li......