L1练习-鸢尾花数据集处理(分类/聚类)

背景

前文(《AI 自学 Lesson1 - Sklearn(开源Python机器学习包)》)以鸢尾花数据集的处理为例,本文将完善其代码,在使用 sklearn 的部分工具包基础上,增加部分数据预处理、数据分析和数据可视化。

由于鸢尾花数据集适用于进行分类和聚类的练习,这里使用多种分类和聚类方式,并验证其准确性。同时在概念部分对分类和聚类的种类、库、用法等进行补充介绍。

并在文首附上跑通资源,便于直接查看处理结果。

一、补充概念

1. 分类

sklearn 中,常见的分类算法涵盖了从简单的线性模型到复杂的非线性模型。以下是一些常见的分类算法及其对应的库名称:

算法名称库名称描述适用场景
1逻辑回归(Logistic Regression)sklearn.linear_model.LogisticRegression基于逻辑函数的线性分类模型,用于二分类或多分类问题。线性可分的二分类或多分类任务。
2支持向量机(SVM)sklearn.svm.SVC, sklearn.svm.LinearSVC高效的分类算法,适用于处理高维空间和非线性分类问题。高维数据、复杂的非线性分类任务。
3K近邻(KNN)sklearn.neighbors.KNeighborsClassifier基于距离测量进行分类,适用于小型数据集。小数据集、特征空间维度较低的分类任务。
4决策树(Decision Tree)sklearn.tree.DecisionTreeClassifier基于树状结构的分类模型,能够处理非线性分类任务。非线性数据的分类,易于解释和可视化。
5随机森林(Random Forest)sklearn.ensemble.RandomForestClassifier集成多个决策树,提升分类的准确性和鲁棒性。处理大规模、高维数据,减少过拟合。
6朴素贝叶斯(Naive Bayes)sklearn.naive_bayes.GaussianNB, sklearn.naive_bayes.MultinomialNB基于贝叶斯定理的概率分类模型,假设特征之间相互独立。文本分类、特征独立的分类任务。
7梯度提升树(Gradient Boosting)sklearn.ensemble.GradientBoostingClassifier通过多个弱分类器的组合逐步提升分类性能,适用于复杂数据。非线性、高维数据的复杂分类任务。
8极限梯度提升(XGBoost)xgboost.XGBClassifier高效的梯度提升算法实现,适合处理大规模数据,性能优异。高性能分类任务,常用于竞赛和大数据处理。
9多层感知器(MLP)sklearn.neural_network.MLPClassifier基于神经网络的多层感知器模型,能够处理复杂的非线性分类问题。深度学习相关的分类任务,非线性数据的分类。

2. 聚类

sklearn 中,常见的聚类算法涵盖了从基本的距离度量方法到更复杂的层次聚类和密度聚类。以下是常用的聚类算法及其对应的库名称:

算法名称库名称描述适用场景
1K均值聚类(K-Means Clustering)sklearn.cluster.KMeans基于质心的聚类算法,通过质心划分数据,适用于线性可分数据。线性可分的数据,聚类数已知的情况下。
2层次聚类(Hierarchical Clustering)sklearn.cluster.AgglomerativeClustering通过构建层次树对数据进行聚类,能够发现数据的层次结构。需要构建层次结构的聚类任务。
3DBSCAN(密度聚类)sklearn.cluster.DBSCAN基于密度的聚类算法,能够发现任意形状的簇,适合带噪声数据。发现任意形状的簇,处理噪声数据。
4均值漂移(Mean Shift Clustering)sklearn.cluster.MeanShift基于核密度估计的非参数聚类算法,能够自动找到簇的数量。高密度区域的聚类,适合未知簇数的情况。
5谱聚类(Spectral Clustering)sklearn.cluster.SpectralClustering基于图论的聚类算法,适合非线性或高维数据。非线性数据或高维空间的聚类任务。
6高斯混合模型(Gaussian Mixture Model, GMM)sklearn.mixture.GaussianMixture基于概率模型的聚类算法,假设数据来自多个高斯分布的混合。处理复杂分布的聚类任务,适合有重叠的簇。
7Birch(平衡迭代减少与聚类)sklearn.cluster.Birch高效的层次聚类算法,适合处理大规模数据集。大规模数据的层次聚类任务。
8亲和传播(Affinity Propagation)sklearn.cluster.AffinityPropagation通过消息传递进行聚类,适用于自动确定簇数。自动发现簇数,适合不需要预设簇数的聚类任务。
9MiniBatch K-Meanssklearn.cluster.MiniBatchKMeansKMeans 的小批量变体,适合处理大规模数据。大规模数据集的聚类任务,提升计算效率。

在后续代码部分,将使用【分类】中的 逻辑回归、k近邻、支持向量机、朴素贝叶斯、决策树 分别对鸢尾花数据集进行处理,并判断各模型算法的准确性;【聚类】中的 K均值聚类、层次聚类、DBSCAN 分别对鸢尾花数据集进行聚类处理,,并判断各模型算法的准确性。


3. 交叉验证

交叉验证是用于评估模型泛化能力的技术,它通过多次划分数据集来减少偶然性,常见的是 K折交叉验证(K-Fold Cross-Validation),即将数据分成K份,每次用其中的一份作为验证集,剩下的作为训练集,重复K次,最后取平均准确率作为模型的性能评估。

通过多次划分数据集,减少模型在某一特定训练集上表现过好的风险,保证模型在未知数据上的性能稳定。

作用

  • 稳定性:通过多次分割数据,确保模型在不同数据集上的表现一致。
  • 评估泛化能力:避免模型过拟合到某一个特定的训练集。
  • 综合评估模型性能:通过平均和标准差的计算,得到模型在多次验证下的表现。

4. F1得分(F1 Score)

  • F1得分 是用于分类任务中的一种综合指标,它是 精确率(Precision)召回率(Recall) 的调和平均数,主要用于不平衡数据集(即某些类别出现的频率较高,另一些类别则较低)。
    • 精确率(Precision):模型预测为正类的样本中,真正为正类的比例。
    • 召回率(Recall):真实为正类的样本中,模型正确预测为正类的比例。
    F1得分的公式为:

F1= 2 \times \frac{Precision \times Recall}{Precision + Recall}


5. 超参数调优

KNN 的一个关键超参数是 K值(近邻个数),不同的 K 值会影响模型的性能。为了找到最合适的 K 值,我们可以使用 网格搜索(Grid Search) 结合交叉验证来进行超参数调优。此外,还可以调优距离度量方法(如 p 值,决定使用欧几里得距离或曼哈顿距离等)。

通过网格搜索或随机搜索选择最优的超参数组合,能够显著提升模型性能,避免欠拟合或过拟合。

作用

  • 优化模型性能:通过选择合适的超参数,可以显著提升模型的表现。
  • 避免过拟合:调整参数如正则化强度、树的深度等,可以防止模型过度拟合训练数据。
  • 增强泛化能力:经过调优后的模型在未知数据上能有更好的预测能力。

二、代码

1. 准备阶段

#导入内置的鸢尾花数据
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
 
iris = load_iris()
print(iris)


#导入所需包
import seaborn as sns #数据可视化
import matplotlib.pyplot as plt #绘图
import pandas as pd #数据分析

from sklearn.model_selection import train_test_split #数据划分
from sklearn.preprocessing import StandardScaler #数据标准化

from sklearn.linear_model import LogisticRegression #逻辑回归
from sklearn.neighbors import KNeighborsClassifier #K近邻分类
from sklearn.svm import SVC #支持向量机
from sklearn.naive_bayes import GaussianNB #朴素贝叶斯
from sklearn.tree import DecisionTreeClassifier #决策树
from sklearn.metrics import accuracy_score 

from sklearn.cluster import KMeans, AgglomerativeClustering, DBSCAN #聚类库
from sklearn.metrics import adjusted_rand_score, silhouette_score
from sklearn.preprocessing import StandardScaler

from sklearn.model_selection import cross_val_score #K折交叉验证
from sklearn.model_selection import GridSearchCV #超参数调优-网格搜索


#数据集属性描述
print("特征值:\n",iris.data)
print("目标值:\n",iris["target"])
print("特征值名字:\n",iris.feature_names)
print("目标值名字:\n",iris.target_names)
print("数据集描述:\n",iris.DESCR)


iris_d = pd.DataFrame(data=iris.data,columns=['sepal length', 'sepal width', 'petal length', 'petal width'])

iris_d

#查看数据类型信息
iris_d.info()

2. 数据可视化

iris_d["target"] = iris.target


#定义函数iris_plot,定义三个变量
#使用seaborn进行数据可视化,对应函数变量第一位为数据,第二位为横轴名,第三位为纵轴名
def iris_plot(data,col1,col2):
    sns.lmplot(x=col1,y=col2,data=data,hue="target",fit_reg=False)
    plt.show()#显示可视化图表

#使用数据为iris_d,横轴为名为sepal width,纵轴名为petal length
iris_plot(iris_d,'sepal width','petal length')

3. 数据预处理

分为数据划分和数据转换。

#定义数据、标签
X = iris.data
y = iris.target

#进行数据划分
X_train, X_test, y_train, y_test = train_test_split(X
                                                    ,y
                                                    ,random_state=42
                                                    #,stratify=y
                                                    ,test_size=0.3
                                                    #,shuffle=True
                                                    )
#将完整数据集的70%作为训练集,30%作为测试集,
#可通过使得设置 stratify=y 测试集和训练集中各类别数据的比例与原始数据集比例一致(stratify分层策略)
#可通过设置 shuffle=True 提前打乱数据


print("训练集的目标值形状:\n",y_train.shape)
print("测试集的目标值形状:\n",y_test.shape)


#构建转换器实例
scaler = StandardScaler( )
 
#拟合及转换
scaler.fit_transform(X_train)
X_scaled = scaler.fit_transform(X)

4. 分类

# 1. 逻辑回归
logistic_model = LogisticRegression(max_iter=200)
logistic_model.fit(X_train, y_train)
y_pred_logistic = logistic_model.predict(X_test)
accuracy_logistic = accuracy_score(y_test, y_pred_logistic)
print(f"逻辑回归分类准确率: {accuracy_logistic:.2f}")

# 2. K近邻(KNN)
knn_model = KNeighborsClassifier(n_neighbors=5)
knn_model.fit(X_train, y_train)
y_pred_knn = knn_model.predict(X_test)
accuracy_knn = accuracy_score(y_test, y_pred_knn)
print(f"K近邻分类准确率: {accuracy_knn:.2f}")

# 3. 支持向量机
svm_model = SVC()
svm_model.fit(X_train, y_train)
y_pred_svm = svm_model.predict(X_test)
accuracy_svm = accuracy_score(y_test, y_pred_svm)
print(f"支持向量机分类准确率: {accuracy_svm:.2f}")

# 4. 朴素贝叶斯
nb_model = GaussianNB()
nb_model.fit(X_train, y_train)
y_pred_nb = nb_model.predict(X_test)
accuracy_nb = accuracy_score(y_test, y_pred_nb)
print(f"朴素贝叶斯分类准确率: {accuracy_nb:.2f}")

# 5. 决策树
tree_model = DecisionTreeClassifier()
tree_model.fit(X_train, y_train)
y_pred_tree = tree_model.predict(X_test)
accuracy_tree = accuracy_score(y_test, y_pred_tree)
print(f"决策树分类准确率: {accuracy_tree:.2f}")

输出结果

逻辑回归分类准确率: 1.00

K近邻分类准确率: 1.00

支持向量机分类准确率: 1.00

朴素贝叶斯分类准确率: 0.98

决策树分类准确率: 1.00

分析

  1. 在鸢尾花数据集上,逻辑回归K近邻支持向量机决策树 都能达到 100% 的分类准确率,这说明这些模型在处理这个简单的三分类问题时表现非常好。
  2. 朴素贝叶斯 的准确率稍微低一点,约为 98%,这可能是由于鸢尾花数据集中的特征分布并非完全符合朴素贝叶斯的独立性假设,但仍然是一个较好的结果。

5. 聚类

# 1. K均值聚类
kmeans = KMeans(n_clusters=3, random_state=42)
y_pred_kmeans = kmeans.fit_predict(X_scaled)
ari_kmeans = adjusted_rand_score(y, y_pred_kmeans)
silhouette_kmeans = silhouette_score(X_scaled, y_pred_kmeans)
print(f"K均值 - Adjusted Rand Index: {ari_kmeans:.2f}, Silhouette Score: {silhouette_kmeans:.2f}")

# 2. 层次聚类
hierarchical = AgglomerativeClustering(n_clusters=3)
y_pred_hierarchical = hierarchical.fit_predict(X_scaled)
ari_hierarchical = adjusted_rand_score(y, y_pred_hierarchical)
silhouette_hierarchical = silhouette_score(X_scaled, y_pred_hierarchical)
print(f"层次聚类 - Adjusted Rand Index: {ari_hierarchical:.2f}, Silhouette Score: {silhouette_hierarchical:.2f}")

# 3. DBSCAN
dbscan = DBSCAN(eps=0.5, min_samples=5)
y_pred_dbscan = dbscan.fit_predict(X_scaled)
# 由于DBSCAN的标签中可能有-1(表示噪声),需过滤掉噪声点计算ARI和轮廓系数
ari_dbscan = adjusted_rand_score(y, y_pred_dbscan)
if len(set(y_pred_dbscan)) > 1:  # 如果存在多个簇
    silhouette_dbscan = silhouette_score(X_scaled, y_pred_dbscan)
else:
    silhouette_dbscan = -1  # 如果只有一个簇或噪声
print(f"DBSCAN - Adjusted Rand Index: {ari_dbscan:.2f}, Silhouette Score: {silhouette_dbscan:.2f}")

代码说明

  1. K均值:我们设置簇的数量为3(因为鸢尾花数据集包含3类标签),并使用 Adjusted Rand Index (ARI)Silhouette Score 来评估聚类效果。
  2. 层次聚类:我们同样设定簇数量为3,使用凝聚层次聚类(自底向上)。
  3. DBSCAN:使用基于密度的聚类方法,不需要指定簇的数量,但我们设置 eps=0.5min_samples=5 来控制聚类的密度参数。该方法对噪声点(标记为-1)进行自动处理。

输出结果

K均值 - Adjusted Rand Index: 0.62, Silhouette Score: 0.46
层次聚类 - Adjusted Rand Index: 0.62, Silhouette Score: 0.45
DBSCAN - Adjusted Rand Index: 0.44, Silhouette Score: 0.36

分析:

  1. K均值聚类层次聚类 在鸢尾花数据集上的表现相似,ARI 均为 0.62,Silhouette Score 也接近,这表明它们能够较好地将数据聚成三类,且与真实标签有较高的一致性。
  2. DBSCANARISilhouette Score 较低(如 0.44 和 0.36),这表明它在该数据集上的效果不如前两种算法。由于鸢尾花数据集的分布较为规则,DBSCAN 的密度聚类特性并不适合这个数据集。

6. 交叉验证

# 使用准确率作为评估标准
scores = cross_val_score(knn_model, X, y, cv=5, scoring='accuracy')

# 输出交叉验证的平均准确率和标准差
print(f"KNN - 交叉验证准确率: {scores.mean():.2f} ± {scores.std():.2f}")


# 使用加权F1得分作为评估标准
scores = cross_val_score(knn_model, X, y, cv=5, scoring='f1_weighted')

# 输出加权F1得分的平均值和标准差
print(f"KNN - 加权F1得分: {scores.mean():.2f} ± {scores.std():.2f}")

代码说明

  • scores.mean():计算5次交叉验证的平均准确率。
    • 交叉验证返回的是5次验证的准确率数组,scores.mean() 对这些值取平均,作为模型在不同划分下的总体表现。均值代表模型的总体准确率水平
  • scores.std():计算5次交叉验证准确率的标准差。
    • 标准差用于衡量模型准确率的波动程度。标准差越小,说明模型在不同数据划分下的表现越稳定;反之,如果标准差较大,表示模型的性能在不同数据集划分上差异较大,可能不够稳定。

7. 超参数调优

# 定义需要调优的超参数范围
param_grid = {
    'n_neighbors': [3, 5, 7, 9, 11],  # K值(邻居数)
    'weights': ['uniform', 'distance'],  # 权重
    'p': [1, 2]  # p=1 曼哈顿距离, p=2 欧几里得距离
}

# 使用网格搜索与K折交叉验证结合
grid_search = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5, scoring='accuracy')
grid_search.fit(X, y)

# 输出最佳参数和对应的交叉验证得分
print(f"最佳超参数组合: {grid_search.best_params_}")
print(f"最佳交叉验证准确率: {grid_search.best_score_:.2f}")

简单来说就是通过字典给超参数不同维度的设置选择,使用搜索即是将所有组合的正确率都进行验证,并通过 grid_search.best_params_ 返回出最优组合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/891765.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

集合框架09:泛型概述、泛型类、泛型接口

1.泛型概述 泛型的本质是参数化类型&#xff0c;把类型作为参数传递&#xff1b; 常见有泛型类、泛型接口、泛型方法 语法&#xff1a;<T,...> T称为类型占位符&#xff0c;表示一种引用类型&#xff1b; 好处&#xff1a;1.提高代码的重用性&#xff1b;2.防止类型类…

Ubuntu22.04环境下源码安装OpenCV 4.8.1

因为项目需要用OpenCV对yolov8模型进行推理&#xff0c;通过DNN模块&#xff0c;之前本地的OpenCV版本是4.5.4&#xff08;好像安装完ROS2 humble之后系统就自带了opencv&#xff09;&#xff0c;加载onnx模型一直报错&#xff0c;网上查询到需要4.7以上&#xff0c;干脆直接升…

山西农业大学20241014

01-VUE 一 VUE1. VUE2 和 VUE32. VUE概述2.1 构建用户界面2.2 渐进式 3. 创建Vue实例3.1 引入vue -- 下载方式3.2 引入vue方式3.3. 代码演示 4. Vue语法4.1 插值表达式 {{}}4.2 响应式特性4.2.1 响应式4.2.2 如何访问 和 修改data中的数据 5. Vue开发插件 一 VUE 1. VUE2 和 V…

JQuery基本操作(一)

获取表单元素的值 $(选择器).val(); //获取 $(选择器).val(值); //赋值 <body><div>用户名&#xff1a;<input type"text" id"userName"/><button id"get">获取值</button><button id"set">设…

LeetCode题练习与总结:最小高度树--310

一、题目描述 树是一个无向图&#xff0c;其中任何两个顶点只通过一条路径连接。 换句话说&#xff0c;任何一个没有简单环路的连通图都是一棵树。 给你一棵包含 n 个节点的树&#xff0c;标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表&#xff08;每…

Elasticsearch 入门

ES 概述 ES 是一个开源的高扩展的分布式全文搜索引擎。 倒排索引 环境准备 Elasticsearch 官方地址&#xff1a;https://www.elastic.co/cn/ 下载地址&#xff1a; 注意&#xff1a;9300 端口为 Elasticsearch 集群间组件的通信端口&#xff0c;9200 端口为浏览器访问的 h…

【Flutter、H5、Web?前端个人总结】分享从业经历经验、自我规范准则,纯干货

前言 hi&#xff0c;正式接触web前端已经经过了两年的时间&#xff0c;从大学的java后端转型到web前端&#xff0c;再到后续转战Flutter&#xff0c;逐渐对前端有了一些心得体会&#xff0c;其实在当下前端的呈现形式一直在变化&#xff0c;无论你是用原生、还是web还是混编的…

2024第四届”认证杯“数学中国全国大学生数学竞赛参赛通知

2024第四届“认证杯”数学中国 全国大学生数学竞赛报名通知 为了培养人才、服务教学、促进高等学校数学课程的改革和建设&#xff0c;增加大学生学习数学的兴趣&#xff0c;培养分析、解决问题的能力&#xff0c;发现和选拔数学创新人才&#xff0c;为青年学子提供一个展示数…

STARnak, LTR 模型笔记

未完成. 1. 简述 CIKM 23 的一篇论文, 任务为 Learning To Rank, 输入为 候选集合, 输出为 有序列表, 用于 top-n 推荐场景. 思考: 它是要替代 ctr 预估么?它跟 mind 这种召回, 有啥大的不一样么? 2. 网络结构 u u u: 将用户(或 query) 记为 u H q d X , d Y , . . . H…

【Python爬虫实战】正则:多字符匹配、开头与结尾定位、分组技术详解

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、匹配多个字符 &#xff08;一&#xff09;匹配任意多个字符 &#xff0…

一次Fegin CPU占用过高导致的事故

记录一下 一次应用事故分析、排查、处理 背景介绍 9号上午收到CPU告警&#xff0c;同时业务反馈依赖该服务的上游服务接口响应耗时太长 应用告警-CPU使用率 告警变更 【WARNING】项目XXX,集群qd-aliyun,分区bbbb-prod,应用customer,实例customer-6fb6448688-m47jz, POD实例CP…

使用OpenCV实现基于FisherFaces的人脸识别

引言 随着人工智能技术的发展&#xff0c;人脸识别已经成为日常生活中不可或缺的一部分。在众多的人脸识别算法中&#xff0c;FisherFaces 方法因其简单易用且具有良好的识别效果而备受青睐。本文将详细介绍如何使用Python和OpenCV库实现基于FisherFaces的人脸识别系统&#x…

2024-10-15 学习人工智能的Day7

在简单的了解完学习人工智能所需的高数、线代、概率论后&#xff0c;我们又重新开始了国庆的学习&#xff0c;因为已经有十余天没有接触python&#xff0c;所以今天的内容主要是对之前学习的python的回顾与总结&#xff0c;然后对各个部分进行了简单的实践&#xff0c;在最后学…

el-table表格里面有一条横线

表格里面 有一条横线&#xff0c; 出现原因&#xff1a;是自定义了表格头.使用了固定列&#xff08;fixed&#xff09;&#xff0c;定宽。就很难受。。。 添加样式文件&#xff1a; <style lang"scss" scoped>::v-deep {.el-table__fixed-right {height: 100%…

【unity框架开发起步】一些框架开发思维和工具类封装

文章目录 前言一、Editor操作二、快捷导出unity包三、快捷打开存储目录四、封装概率函数五、方法过时六、partial 关键字&#xff0c;拆开合并类七、从数组中随机取⼀个数值并进⾏返回1、实现2、object 类优化3、泛型&#xff0c;结构复⽤利器4、params 关键字优化 八、abstrac…

自定义类型:结构体【上】

一.结构体类型的声明 结构是一些值的集合&#xff0c;这些值称为成员变量&#xff0c;结构的每个成员可以是不同类型的变量。结构的声明基本形式&#xff1a; struct tag {member-list; }variable-list;例如描述一个学生&#xff1a; 二.结构体变量的创建和初始化 我们直接先来…

Golang正则表达式详解:regexp包的应用与最佳实践

Golang正则表达式详解&#xff1a;regexp包的应用与最佳实践 引言基本概念与正则表达式基础正则表达式简介基本语法和字符普通字符元字符 常用的正则表达式模式示例 regexp 包的基本用法导入 regexp 包编译正则表达式CompileMustCompile 简单匹配MatchMatchString 示例 高级匹配…

Qt小bug — LINK : fatal error LNK1158: 无法运行“rc.exe“

Qt小bug —— LINK &#xff1a;fatal error LNK1158&#xff1a;无法运行"rc.exe" 环境 Qt 5.14.2 MSVC 2015 x64 现象 解决 在电脑上找到rc.exe 和rcdll.dll &#xff08;一般在C:\Program Files(x86)\Windows Kits*\bin\x64下面&#xff09;拷贝到 C:\Qt\Qt5…

从SQL Server过渡到PostgreSQL:理解模式的差异

前言 随着越来越多的企业转向开源技术&#xff0c;商业数据库管理员和开发者也逐渐面临向PostgreSQL迁移的需求。 虽然SQL Server和PostgreSQL共享许多数据库管理系统&#xff08;RDBMS&#xff09;的基本概念&#xff0c;但它们在处理某些结构上的差异可能会让人感到困惑&…

吴恩达深度学习笔记(3)--深度学习的实际应用

训练、开发、测试集 目前超参数的确定依赖于实验迭代调整&#xff0c;将数据集划分为&#xff1a;训练、开发&#xff08;验证&#xff09;、测试集会使迭代效率更高。 如果数据少的时候用传统的分割方法&#xff1a;60/20/20&#xff0c;数据量大的时候则都可以。 确保开发和…