PyTorch深度学习与实践【03】【数据的三种类型及其编码方案】
2026/8/25 15:55:11 网站建设 项目流程

一、数据的三种类型

(一)连续值(比例 / 区间尺度)

  • 数值之间的差值、倍数有实际物理含义。

例子:重量 3kg,10kg。10‑3=7,代表重量差 7kg;10kg 是 3kg 的三倍重。
葡萄酒里面酒精度、酸度、pH 全部都是连续值,直接喂神经网络没问题。

(二)序数值

  • 数字只有大小排序意义,差值没有实际含义。

例子:小杯 = 1,中杯 = 2,大杯 = 3
我们知道大杯>中杯>小杯。但是(1+3)/2=2不能得出中杯!数字 2 并不等于 1 和 3 中间一半的体积。
⚠️ 不能直接拿数字做加减乘除运算!
葡萄酒质量评分 (0‑10) 本质上就属于序数值!

(三)分类值(分类尺度)

  • 数字完全没有顺序含义,只是给类别起编号。

例子:水 = 1,咖啡 = 2,牛奶 = 3。
2(咖啡)不大于 1(水),只是名字代号。1、2、3 谁大谁小没有任何意义!
❗这种数据绝对不能直接把数字丢进神经网络!必须做独热编码。

二、标签分离:特征数据 和 目标标签分开

例:
读出来数组形状(4898, 12)
4898:一共 4898 瓶葡萄酒(样本数量)
12:12 列(11 个化学特征 + 1 个质量标签)
wineq 张量包含全部 12 列。

  • 深度学习铁则:输入特征 和 预测标签一定要分开!不能混在一起送入网络。
#取所有行,除最后一列 → 输入特征X(11项化学指标)data=wineq[:,:-1]#取所有行,只取最后一列 → 目标标签y(葡萄酒质量分)target=wineq[:,-1]

三、标签两种编码方案(核心重点)

  • 现在target存的就是葡萄酒质量分数标签,我们有两种编码选择:

(一)方案 1:整数标签(直接转成 long 长整型)

target=wineq[:,-1].long()
  • 结果:tensor([6, 6, 7, 6 …])
  • 优点:最简单,保留分数顺序关系(7 分酒 > 6 分酒)
  • 缺点:神经网络会自动误以为 7 和 6 之间的距离 = 6 和 5 之间的距离,强行赋予数值距离含义
  • ✅适合:回归任务、有序标签(质量评分这种有高低顺序

(二)方案 2:独热编码 one‑hot(适合无序分类)

  1. 什么叫独热编码?
  • 一共有 10 个分数等级 (0‑9),每个标签生成长度为 10 的向量。只有对应位置填 1,剩下全部填 0。
  • 分数 = 5 → [0,0,0,0,0,1,0,0,0,0]
    分数 = 6 → [0,0,0,0,0,0,1,0,0,0]

  1. 代码示例拆解
#第一步:生成一个全0矩阵,4898行样本,每行预留10个位置target_onehot=torch.zeros(target.shape[0],10)#第二步:scatter_填充1target_onehot.scatter_(1,target.unsqueeze(1),1.0)
  • target.unsqueeze(1):原来 target 形状[4898]是一维数组。unsqueeze给它增加一列,变成[4898, 1]二维索引张量。scatter 要求索引张量和目标矩阵维度一致,不然会报错!
  • scatter_三个参数解释:
    参数 1:dim=1 → 沿着行方向的列索引填充

    参数 2:索引张量:告诉程序每一行,第几列的位置要填上 1
    参数 3:填充的值:1.0
  • 对每一瓶葡萄酒,找到对应质量分数编号那一列,把 0 改成 1。
  1. 什么时候选独热编码?
  • 当标签没有顺序!比如标签:红葡萄酒、白葡萄酒、玫瑰葡萄酒,类别之间谁也不比谁好,这时必须独热编码。
  • 如果是葡萄酒质量评分(有序):独热编码反而会丢掉「6 分比 5 分好」这个顺序信息。

四、总结

五、如何处理连续、有序和分类数据列

(一)回归任务、回归特征

  1. 回归任务:模型输出一个连续的数字(预测一个值)
  2. 直接使用数据 = 当作回归特征使用
  • 直接当作回归特征使用 = 原封不动,不做任何编码、转换,直接把这一列数字放进神经网络当作输入 X
  • 神经网络天生就可以接收小数、连续数值。什么都不用处理,这就叫直接当作回归特征

(二)离散数据

(三)有序(分类)数据

  1. 定义
  • 属于离散的类别标签
  • 类别之间存在客观、有意义的高低、先后、等级顺序关系
  • 但是相邻类别之间的差值(间隔大小)未知、不一定相等。
  1. 核心关键点
  • ✅顺序是真实有效的:差<一般<好<优秀
  • 等级之间的距离不相等:“差→一般” 的差距 ≠ “好→优秀” 的差距
  • ❗本质仍然是类别数据,不是真正的连续数值

只是预处理时你拥有选择权,可以人为映射成整数 1‑2‑3,临时当作连续特征使用

(四)(无序)分类数据

  1. 定义
  • 属于离散类别标签
  • 由若干互斥、独立的类别组成;类别只起到命名、区分作用,类别之间不存在任何大小、高低、先后、等级顺序关系
  1. 核心关键点
  • 只有类别之分,没有等级之分;A>B这个关系完全无意义
  • 就算人为编号:红 = 1,蓝 = 2,绿 = 3;1<2 这个大小关系是虚假的,不能当真

(五)流程图解析

  1. 是否是连续数据,如果是,直接使用数据,也就是当作回归特征使用
  2. 非连续数据,判断是否为有序数据,如果是,可以进行人为选择
  • 选择保留顺序:当作连续(回归)特征使用,喂入模型(缺点:强行引入距离)
  • 选择舍弃顺序:转为独热编码,降级处理成无序分类数据
  1. 若为分类数据,则使用独热编码
  2. 使用独热编码的步骤
  • .long()转整数标签,之后进行独热编码
  1. 第一步操作:先用.long(),把浮点分数6.0→整数索引6
  2. 但⚠转为整数标签只是一个过渡,不等于彻底抛弃顺序!
  3. 如果你只用整数索引[5,6,7]作为标签,PyTorch 的CrossEntropyLoss本身不会强制距离,但数字大小的信息仍然隐含在索引中。
  1. 想要彻底抹除顺序,就要再进一步做独热编码:
  2. 独热向量之间,5、6、7 三者的向量距离完全一样!顺序彻底消失

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询