
一、数据的三种类型一连续值比例 / 区间尺度数值之间的差值、倍数有实际物理含义。例子重量 3kg10kg。10‑37代表重量差 7kg10kg 是 3kg 的三倍重。葡萄酒里面酒精度、酸度、pH 全部都是连续值直接喂神经网络没问题。二序数值数字只有大小排序意义差值没有实际含义。例子小杯 1中杯 2大杯 3我们知道大杯中杯小杯。但是(13)/22不能得出中杯数字 2 并不等于 1 和 3 中间一半的体积。⚠️ 不能直接拿数字做加减乘除运算葡萄酒质量评分 (0‑10) 本质上就属于序数值三分类值分类尺度数字完全没有顺序含义只是给类别起编号。例子水 1咖啡 2牛奶 3。2咖啡不大于 1水只是名字代号。1、2、3 谁大谁小没有任何意义❗这种数据绝对不能直接把数字丢进神经网络必须做独热编码。二、标签分离特征数据 和 目标标签分开例读出来数组形状(4898, 12)4898一共 4898 瓶葡萄酒样本数量1212 列11 个化学特征 1 个质量标签wineq 张量包含全部 12 列。深度学习铁则输入特征 和 预测标签一定要分开不能混在一起送入网络。#取所有行除最后一列 → 输入特征X(11项化学指标)datawineq[:,:-1]#取所有行只取最后一列 → 目标标签y葡萄酒质量分targetwineq[:,-1]三、标签两种编码方案核心重点现在target存的就是葡萄酒质量分数标签我们有两种编码选择一方案 1整数标签直接转成 long 长整型targetwineq[:,-1].long()结果tensor([6, 6, 7, 6 …])优点最简单保留分数顺序关系7 分酒 6 分酒缺点神经网络会自动误以为 7 和 6 之间的距离 6 和 5 之间的距离强行赋予数值距离含义✅适合回归任务、有序标签质量评分这种有高低顺序二方案 2独热编码 one‑hot适合无序分类什么叫独热编码一共有 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]代码示例拆解#第一步生成一个全0矩阵4898行样本每行预留10个位置target_onehottorch.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_三个参数解释参数 1dim1 → 沿着行方向的列索引填充参数 2索引张量告诉程序每一行第几列的位置要填上 1参数 3填充的值1.0对每一瓶葡萄酒找到对应质量分数编号那一列把 0 改成 1。什么时候选独热编码当标签没有顺序比如标签红葡萄酒、白葡萄酒、玫瑰葡萄酒类别之间谁也不比谁好这时必须独热编码。如果是葡萄酒质量评分有序独热编码反而会丢掉「6 分比 5 分好」这个顺序信息。四、总结五、如何处理连续、有序和分类数据列一回归任务、回归特征回归任务模型输出一个连续的数字预测一个值直接使用数据 当作回归特征使用直接当作回归特征使用 原封不动不做任何编码、转换直接把这一列数字放进神经网络当作输入 X神经网络天生就可以接收小数、连续数值。什么都不用处理这就叫直接当作回归特征。二离散数据三有序分类数据定义属于离散的类别标签类别之间存在客观、有意义的高低、先后、等级顺序关系但是相邻类别之间的差值间隔大小未知、不一定相等。核心关键点✅顺序是真实有效的差一般好优秀❌等级之间的距离不相等“差→一般” 的差距 ≠ “好→优秀” 的差距❗本质仍然是类别数据不是真正的连续数值只是预处理时你拥有选择权可以人为映射成整数 1‑2‑3临时当作连续特征使用。四无序分类数据定义属于离散类别标签由若干互斥、独立的类别组成类别只起到命名、区分作用类别之间不存在任何大小、高低、先后、等级顺序关系。核心关键点只有类别之分没有等级之分AB这个关系完全无意义就算人为编号红 1蓝 2绿 312 这个大小关系是虚假的不能当真五流程图解析是否是连续数据如果是直接使用数据也就是当作回归特征使用非连续数据判断是否为有序数据如果是可以进行人为选择选择保留顺序当作连续回归特征使用喂入模型缺点强行引入距离选择舍弃顺序转为独热编码降级处理成无序分类数据若为分类数据则使用独热编码使用独热编码的步骤.long()转整数标签之后进行独热编码第一步操作先用.long()把浮点分数6.0→整数索引6。但⚠转为整数标签只是一个过渡不等于彻底抛弃顺序如果你只用整数索引[5,6,7]作为标签PyTorch 的CrossEntropyLoss本身不会强制距离但数字大小的信息仍然隐含在索引中。想要彻底抹除顺序就要再进一步做独热编码独热向量之间5、6、7 三者的向量距离完全一样顺序彻底消失。