数据集入门:机器要学会一门功课,靠的是整理成『教材』而不是堆数据
你有没有想过:一台从没上过学的程序(我们常叫它"模型"或"机器"),是怎么"学会"分辨手写数字、判断一封邮件是不是垃圾邮件的?它不是天生就会,也不是靠谁给它灌进一句口诀。答案是:有人喂给它一本编好的教材,它照着教材一遍遍学,最后学成了。
这本"教材",就是今天的主角:数据集(dataset)。
很多初学者在这里会踩一个最深的误区,以为"数据集 = 越多越好的原始数据",拼命堆资料程序就能变聪明。这一篇要讲清楚的,正是反过来的一件事:机器能学会功课,靠的不是你塞给它多少零散数据,而是有人把数据整理成一套结构规整、带着参考答案的"教材"。就像你复习考试,把一屋子乱堆的草稿纸塞给同学,他学不会;你帮他整理成一本带例题、带答案解析的习题册,他才真能看进去。
听懂了这句话,整篇的顺序你已经握在手里了:先看教材长什么样、为什么散题不算教材;再拆开这本教材看里面一格一格装的是什么;然后看它怎么分门别类;最后看这套教材到手后怎么拿去"教"和"考"。我们现在就从第一问开始。
一、数据集是什么:为什么一堆散数据成不了『教材』?
先给程序下个定义。你自己随手记下的几条零散信息,比如"今天周二""楼下咖啡 18 块""张三考了 85",能叫数据集吗?不能。它们没有放在一起共同干一件事。
那什么才叫数据集?Google 的机器学习速成课给过一个干净利落的官方定义:数据集是一组示例(example)。Google MLCC
别小看"一组"和"示例"这两个词,它们就是散题和习题册的分水岭。把这句话拆开看,一份算得上是数据集的东西,通常得同时满足三件事:
- 按同一套逻辑组织起来了,而不是随手乱堆。数据是按主题、按时间、按来源归好类的,不是一锅乱炖。AI铺子
- 多半是有行列结构的表格,至少是带规范结构的形态。CSV、电子表格、数据库表都很典型。
- 是为了一个目标服务的。这份数据是拿来干嘛的?是预测房价、认手写数字,还是别的?没有目的就谈不上"集"。
有 AI 科普作者打过一个特别贴切的比方:数据像厨师做菜的食材,模型像学生从课本里学到的知识。菜鸟教程
光有食材不叫菜,得有人照着菜谱把它们洗净、切好、编好顺序,才是能下锅的东西。同样,**零散数据只是原料,数据集是把原料按教辅的规矩整理好的成品。**你把十道不相干的题塞给老师,老师攒不成一套能教课的试卷;把这十道题按难度排好、按知识点归类、每道后面附上解析,它才从一堆字变成了教材。
既然它是教材,那教材的质量就决定了学生能学成什么样。这里的道理一句话就能概括:垃圾进,垃圾出(Garbage In, Garbage Out),数据质量直接决定模型效果。 Google 官方则用更稳妥的说法强调同样的事:高质量的数据集有助于模型实现目标,质量较低的数据集会妨碍模型。Google MLCC
教材本身编得烂——答案标错、例题印花、缺页漏印——学生再聪明也学不好。所以"数据越多越好"是个陷阱,干净又规整的一小本习题册,胜过堆成山的错题草稿。
刚才那本习题册,它到底长什么样?下一页我们拆开看。
二、拆开一本数据集:里面一行一格装的是什么?
说数据集是"习题册",那它印出来是什么版式?大多数入门数据集就是一张大表:一行一条记录,一列一个栏目,像你们班的花名册那样。这份表格型的结构,是机器能理解数据的第一块地基。在我们自己造一张假想课前,先看 Google 官方那张示意图长什么样:

图注:一行格子代表了"一个示例":这一条数据有好几个特征值,每个小方格就是一个特征的取值。图里没有列名和答案列,那部分常识由下一段的示例表格来补全。Google MLCC
Google 官方的原话是:你可以把表格的每一行认为是一个示例,把每一列视为一个潜在的特征或标签。这是一句可以当提纲记下来的"表格心智"。为了让你一眼记住这三种角色,我邀请西瓜出场。做 AI 的中文教材(包括各校《机器学习》课)爱用"西瓜数据"当统一例子:判断西瓜好不好,看它的色泽、根蒂、敲声,最后猜它是好瓜还是坏瓜。技术栈
把西瓜数据排成一张表,大概长这样:
| 样本(一行=一个示例/样本) | 特征/属性:色泽 | 特征/属性:根蒂 | 特征/属性:敲声 | 标签/标记(要猜的答案) |
|---|---|---|---|---|
| 一个样本 | 青绿 | 蜷缩 | 浊响 | 好瓜 |
| 一个样本 | 乌黑 | 稍蜷 | 沉闷 | 坏瓜 |
| 一个样本 | 浅白 | 硬挺 | 清脆 | ?还是好瓜 |
现在三种角色你都能指着表格说清了:
-
样本(sample,也叫示例、instance),就是表格里的一行。它代表"一条完整的数据",好比一个来上课的学生。国内教材常把"样本"和"示例"混用,指同一条记录。技术栈
-
特征(feature,也叫属性、attribute),就是表格里的每一列。它描述这个样本某方面好不好观察的表现:色泽、根蒂、敲声,就是描述一只西瓜的"属性"。数据库里你叫它"栏目",机器学习里它叫"特征"。一份教材把好几种特征拼成一条完整记录,这整条(一个样本的全部特征值)有时也被称作"特征向量"。技术栈
-
标签(label,教科书常译作标记),就是你想让程序猜的那一格标准答案:这瓜到底是好瓜还是坏瓜。它就像习题册附在每道题后面的参考答案,程序要学着把它猜对。
这里有个考试爱埋的坑必须点破:"样本"这个词有歧义。在某些上下文里它单指一条数据(一行),换个上下文它又可能指整个数据集(几十行全算一个"采集到的样本")。读到"样本"先看句子的语境,别一根筋。另外,如果一份数据里面每一行都带上了参考答案,这样一条"带标签的示例",教材里专门给它一个名字,叫样例(example)。技术栈
把这张表戳在脑子里,我们得到一把能指着任何数据流判断角色的尺子:一行一样本、一列一特征、末尾那一格要猜的答案叫标签。 而这个"标签"到底有没有,恰好是给数据集分门别类的第一把尺子。
三、判据一:这份教材带不带标准答案?——监督 vs 无监督
理解了表格里的角色,你要面对数据集时第一个先问的问题就是:这份教材后面,带不带参考答案?
这个问题的答案,把机器学习劈成两大门派,名字起得有点唬人,但意思极朴素:
-
监督学习(supervised learning):每个样本都带着参考答案,也就是带标签。程序看着"输入长这样、答案是这个"成对出现的例题,学着在两者之间建立联系。它学完能干两类活:要猜的答案是类别(这瓜是好是坏、是猫是狗),叫分类;要猜的是连续数值(比如说这朵花会开多高),叫回归。AI铺子
-
无监督学习(unsupervised learning):只给你一堆特征,没有标准答案。没有老师批改,程序只能自己观察这些数据天然能分成几堆,把长得像的归到一起,这就叫聚类。好比把面前一百张没标注的水果照片自己按颜色分分堆。AI铺子
要分清它俩,最省事的办法是记住那句口诀:有标记 = 有老师教 = 监督;没标记 = 自己摸索 = 无监督。 有人给你判对错、批改作业,叫有监督;完全没人管你,只能自己把相似的东西揉成堆,叫无监督。技术栈
做个一步到位的对照:
| 关键 | 监督学习 | 无监督学习 |
|---|---|---|
| 每个样本带不带参考答案 | 带(有标签) | 不带(只有特征) |
| 程序守着猜的标准答案干活 | 是 | 自己归堆 |
| 代表任务 | 分类、回归 | 聚类 |
| 生活类比 | 有老师,作业交上去有人判对错 | 没老师,自己把相似的东西分堆 |
(还有个小弟叫半监督:少量样本带标签、大量样本没标签,为的是省下人工打标签的成本,考试点到即可。)AI铺子
好,第一把尺子问的是"带不带答案",也就是它教不教得会。第二把尺子却完全是另一件事——它问的不是内容有没有答案,而是这份数据本身长什么样、能不能整整齐齐塞进表格。别把这两把尺子搅在一起,后者正是下一章。
四、判据二:数据能不能整整齐齐塞进表格?每种长什么样?
监督还是无监督,看的是"带不带标准答案";结构化还是非结构化,看的是"数据本身长什么样"。两套名字都像"大概念分类",却净是初学者最容易混在一起的两套评判标准。这里有张便签:以后读到"结构化",只问一句——这份数据能不能不经过任何特殊处理,就整齐地排进行和列、塞进一张表格(Excel 或数据库表)里? 能,就是结构化;不能,就是非结构化。IBM
具体展开看看三种:
-
结构化数据:有明确的预定义格式,行和列整整齐齐。姓名、电话号码、财务表里的公司名和费用值,都是它。它用表格存(Excel、关系数据库都行),好查好分析,也最常直接喂给机器学习算法。IBM
-
非结构化数据:没有固定格式、格式还复杂。文本(邮件、网络评论、文档)、图像、音频、视频都是它。IBM
-
半结构化数据:卡在中间,没有严格的表格模样,但带着标签和元数据能识别结构。JSON、XML、CSV 和邮件(标题行规范、正文自由)都算半结构化。IBM
一句话感受那点操作差异:结构化数据"更易于操作分析",翻起来像查你的奖学金表格;非结构化数据"需要专门技能和工具解析分析",读起来像读一整本没目录没页码的书。IBM
注意:不同教材对某些格式的归类口径可能不一样。比如 IBM 把 CSV 归进半结构化,有的中文教材却把 CSV 直接归进结构化表格。考试如果考这种边界题,请以你自家课本的口径为准,这里给的是主流厂商的说法,不必当作死标准。
判据两把尺子都拿到了,光说不练没用。要给每种形态配一个你亲眼见过样子、能背出来的代表数据集,学到才牢。三种里最直观的是表格型的结构化,代表是**鸢尾花(Iris)**数据集:测量三种鸢尾花 Setosa、Versicolour、Virginica 的品相,每类 50 条,共 150 条,每条用 4 个测量特征(花萼长宽、花瓣长宽)记录。要判断一朵花属于三类里的哪一类。实用深度学习
表格好懂,那图像类数据长什么样?眼见为实。下面这个是教材里必背的手写数字集 MNIST:一批 28×28 的灰度小图,内容是手写的 0 到 9 十个数字:

图注:这就是图像类(非结构化)数据集给人的第一印象:几十个小格子里各写着一个风格不同的手写数字,程序要学会对着每个数字猜它是 0 还是 9。具体的样本张数、像素规格请看下一段落文字说明。实用深度学习
MNIST 的完整数字是 70000 个样本,拆成 60000 个用来训练、10000 个用来测试,每张是 28×28 的手写数字小图,标签是 0 到 9 的十个数字。实用深度学习
再来一个彩色的、多类别物体的图像集 CIFAR-10,加深你的印象:

图注:跟黑白的手写数字不同,CIFAR-10 自带十类真实彩色物体的低清小图:airplane(飞机)、automobile(汽车)、bird(鸟)、cat(猫)、deer(鹿)、dog(狗)、frog(青蛙)、horse(马)、ship(船)、truck(卡车),每行一类。这就是"多类别彩色物体图像集"的样子。具体张数、像素规格看下面文字。实用深度学习
CIFAR-10 有 60000 张 32×32 的彩色照片,训练 50000 张、测试 10000 张,类别正是 airplane 到 truck 那十个。实用深度学习
文本也是一种典型的非结构化数据,代表是 IMDB 影评:一堆电影评论的文字,每段带一个正向还是负向的评价标签。AI铺子
把这一章收进一句话:结构化的核心问法是"能不能整齐进表格",再背下表格举鸢尾花、图像举 MNIST 和 CIFAR-10、文本举 IMDB,考试基本够用了。手里有教材、也懂教材门类了,下一章要看的是最实际的活:这套教材拿到手,到底怎么拿去"教"和"考"?
五、怎么用:读进来先验一次货,再把『教材』切成『学』和『考』两份
拿到一份真实的数据集文件(很常见的是 CSV,逗号分隔的表格文件),程序要开始用它,第一步不是学,而是把文件读进程序里。在 Python 的 pandas 库里,这个动作叫 read_csv(),它把一个存成 CSV 的表格文件读进去、变成一张程序手里能操作的"表格"。pandas
读进来之后第一件事是"看",用 head() 看最前面几行、用 tail() 看最后面几行。为什么要这么做而不是从头全读一遍?因为你手上可能有几千行数据,人眼看着不现实;只看头尾几行、再扫一眼表头那行列名,就足够快速"验货",确认读对了、确认表长什么样。可以把它想成翻开教材先看目录和开头几页正文,就知道这本是什么书、章节怎么排。pandas
你读到的表头列名,就是我们上一章讲的栏目,也就是这份数据的那些"特征"。
货验完了,真正的"教材"才要动工:把整份数据集切成两半,一份拿来当教材学,一份拿来当考卷考,两半不能重叠。切之前程序还会先把顺序打乱一下,避免恰好把同一类的数据都堆在一起。
为什么要切?想想你自己复习:如果老师拿你平时反复做过的题来考你,你分高分低反映的是"背熟了没有",而不是"真学会了没有"。机器也一样。Google 官方讲得直白:测试模型应使用与训练时不同的示例,用不同的例子去测,才更能证明模型的适用性。Google MLCC
所以把整份数据一分为二:
- 训练集(training set):给模型当教材正文,它读着学着,负责掌握规律。
- 测试集(test set):给模型当考卷,学完后拿来最后考一次,看它到底学明白了没有。这张考卷不能提前翻开给模型看,只能考一次。维基百科那条条目更严谨地补充了一句:如果测试集在训练过程中从未被用到,它也被称为预留集(holdout),这样它提供的评估才叫干净。维基百科
看 Google 官方那张"最小方案"的两个横条,最直观:

图注:横条的左段黄色是训练集(约 80%),右段蓝色是测试集(约 20%)。对不调参的一般场景,把数据切成"一册正本 + 一份考卷"这两份就够形成最小编学考闭环。注意:80/20 只是示意比例,不是死规定。Google MLCC
那什么时候才需要在这个基础上再加一份?答案是:当你想要一边学、一边反复检查自己有没有进步的时候。设想你每次改一点点模型参数,就想看看效果,于是反复拿同一份测试集去考。考到最后,模型已经悄悄"背"熟了这份考卷的套路,它在考卷上分数很高,但一到真实世界那些没见过的题就露馅。这就像老师为了考你而反复押同一套题的答案,学生背住了应试套路,分数虚高,考不出真实本事。Google MLCC
要自我检查进步,就该加第三份数据叫验证集(validation set),它的定位是"模拟卷":一边训练一边用它评估、看自己有没有越学越好、选比较好的那版模型。等模型在验证集上表现够了,最后才用那份"神圣"的测试集做一次最终验收。两条官方横条摆在一起对比:

图注:70/15/15 的三段横条:黄色训练集约占七成,红色是中段那 15% 的验证集(模拟卷),蓝色是末段 15% 的测试集(终考卷)。同样,这比例只是口头尺度,不是必守数字。Google MLCC
给零基础同学的口径:如果你不是为了反复调参、只是交一份常规作业或应付名词考试,通常切训练 + 测试两份就够了。验证集是在你真需要"边学边看有没有进步"时才加的第三份模拟卷,比例数字也从来不是死的。考试若问,请回到你老师/课本给的比例口径。
教材怎么切说清了,我们把它从名词落成一个你能对着讲的小故事,顺手把最易混的那几个术语一次校平。
六、走一遍:拿一套迷你数据,把『加载→查看→切分→学→考』串起来
理论讲完,我们来一场纸上谈兵:不动手敲代码,只把最经典的一套迷你练习的口水流程走一遍,它叫"鸢尾花分类"。它的流程,正是把前面五章全串起来的那个闭环。
第一步,加载:程序用 read_csv() 把装着那 150 条鸢尾花测量数据的 CSV 文件读进内存,变成一张表。pandas
第二步,查看验货:用 head() 看最前面几行。你会看到一行行的测量数据:每条样本是花萼的长宽、花瓣的长宽四个特征测量值,旁边标着这朵花属于哪一类(在鸢尾花自带的官方例子里,标签常被标成 0、1、2 这样的类别编号)。先看几行,就把这 150 条记录的"长什么样子"验完了。scikit-learn
第三步,切分成学与考:场景里大多会把特征(X)和标签(y)分开,然后用一个切分动作把数据一分为二。scikit-learn 里那个函数叫 train_test_split,它一次调用把 X 和 y 各自切成两份,整体返回四份:X_train、X_test、y_train、y_test(训练集的特征、测试集的特征、训练集对应的答案、测试集对应的答案)。特征和它自己的答案被按同一套随机顺序切开、一一对应着走,训练集的几行和测试集的几行彼此不重叠——一半进了教材(训练),一半留作考卷(测试)。scikit-learn
第四步,学:把训练集那部分(学部分带标签的样本)喂给程序当"教材正文",程序一遍遍读着"花瓣特征是这样、类别是那样",学会它们之间的联系。
第五步,考:模型学完,把测试集里那些它从没见过的鸢尾花测量数据丢给它,让它自己猜类别,再拿测试集自带的答案对一对,看它猜对了多少。这份分数,才是它到"真实世界"能不能用的可信成绩。
你看,这不难。把这五步压缩成一句你能背的话,就是:把一张表格读进程序 → 用 head/tail 看几行验货 → 用 train_test_split 切成训练和测试两半 → 拿训练集当教材教会程序 → 拿没见过的测试集当考卷,只考一次。 这就是"用数据集"的全部套路。scikit-learn
(对了,切分到底留多少当考卷、怎么让每次切出来都是同一份,全靠两个旋钮:test_size 管考卷占比,random_state 传一个固定整数能把切法固定下来,这样大家复现的都是同一份卷子。细节考试点到即可。)
易混词汇对照表:一次把教科书同义词校平
中文教科书爱换着词说同一件事,考试换了个词就不认识最亏。这张表把最常考的同义词钉在一起:
| 说法的学名(常考) | 别名 / 换说法 | 大白话 |
|---|---|---|
| 样本 sample | 示例 example、instance | 一条数据(通常指表格里一行) |
| 特征 feature | 属性 attribute | 描述样本的一个栏目(一列) |
| 特征向量 | 一条样本的所有特征拼起来 | 一整行的内容合并 |
| 标签 label | 标记 | 程序要猜的标准答案 |
| 样例 | 带标记的示例 | 既有特征又有参考答案的一条数据 |
| 学习 / 训练 | 从数据里学出模型 | 拿着教材正文学知识 |
| 测试 | 用没见过的数据评估 | 拿考卷考一次,检验学到多少 |
有两处口径在中文教材间不太统一,考试前请对照你自家课本确认:一是 label 有人译"标签"、有人译"标记";二是不建议动辄断言某格式到底归结构化还是半结构化(尤其 CSV)。IBM 同样,验证集到底要不要单独讲、比例写几比几,取决于你的考纲,这一篇给的是"最普适的开放口径",不是一张必须背的死表。
把这篇从头读到尾,你会发现它其实是同一个故事讲了六遍:数据集,不是一堆原始数据,而是一份排好序、按同一目的收集、结构规整、往往还带参考答案的"教材";程序靠它才学得会。 拆开看它是一行一样本、一列一特征、末尾一格是要猜的答案;按"带不带答案"分监督与无监督,按"能不能进表格"分结构化与非结构化,两把尺子别混;拿到手要先读进来验货,再切成"学的部分 + 考的部分",考卷只能考一次。到这里,你既分得清这份教材长什么样,也说得清怎么把它安全地拿去做"教与考"了。祝你考试顺遂。
参考文献
本专题引用的核心资料如下,建议深入学习时阅读原文:
- Google Machine Learning Crash Course《数据集:数据特征》 — developers.google.com/machine-learning/crash-course/overfitting/data-characteristics
- Google Machine Learning Crash Course《拆分原始数据集》 — developers.google.com/machine-learning/crash-course/overfitting/dividing-datasets
- 菜鸟教程《机器学习基础术语》 — m.runoob.com/ml/ml-basics.html
- 技术栈《机器学习:基本术语》 — jishuzhan.net/article/2076224444447203329
- IBM Think《结构化数据与非结构化数据:有什么区别?》 — www.ibm.com/cn-zh/think/topics/structured-vs-unstructured-data
- AI铺子《什么是数据集(Dataset)?一文通俗讲解》 — www.aipuzi.cn/ai-tutorial/what-is-dataset.html
- 维基百科《训练集、验证集和测试集》 — zh.wikipedia.org 对应条目
- 《实用深度学习》课程数据集页(Iris / MNIST / CIFAR-10) — deeplearning.ouxinyu.cn/Datasets.html
- pandas 官方文档《如何读写表格数据》 — pandas.pydata.org 对应教程页
- scikit-learn 官方文档《sklearn.model_selection.train_test_split》 — scikit-learn.org 对应 API 页