资讯

无序属性是什么?取值之间没有大小顺序的属性

2026-11-053 分钟阅读百科
TL;DR无序属性(Non-ordinal Attribute)是取值之间不存在大小或先后关系的离散属性,如颜色、城市、血型,不能直接用数值差计算距离;计算样本距离时可用 VDM(值差异度量)按各取值在各类中的分布衡量差异,并可与闵可夫斯基距离组合处理混合属性,建模时常用独热编码,与可比较大小的有序属性相对。

无序属性(Non-ordinal Attribute)是指那些取值之间没有大小、先后或高低顺序的属性。比如颜色可以是红、绿、蓝,城市可以是北京、上海、广州,血型可以是 A、B、AB、O 型,交通工具可以是汽车、火车、飞机。这些取值之间只有“相同”或“不同”的区别,不能说红色比蓝色大,也不能说北京排在上海前面。与之相对的是有序属性。

有序属性和无序属性

周志华《机器学习》在讨论距离计算时,对属性做了这样的区分:连续属性,比如身高、体重,在定义域上有无穷多个可能的取值;离散属性,在定义域上只有有限个取值。离散属性又可以分为两类:有序属性,取值之间有明确的顺序,比如“大、中、小”,可以把它们转换为数值 1、0.5、0,再直接计算距离,“大”和“中”比“大”和“小”更接近;无序属性,取值之间没有顺序,比如“西瓜、南瓜、黄瓜”,就不能直接转换为数值来计算距离,因为任何一种数值的指定方式,都会人为地引入并不存在的大小关系和远近关系。

如何计算无序属性上的距离

最简单的方式是只看取值是否相同:相同则距离为 0,不同则距离为 1,这叫重叠度量,它把所有不同的取值看作同样地“不同”。但这样过于粗糙:比如在预测是否会购买某商品时,“上海”和“北京”的消费习惯可能比“上海”和某个小县城更接近,而重叠度量无法反映这一点。

VDM(值差异度量)提供了一种更合理的方式:它根据同一属性上不同取值在各个类别中出现的分布是否相似,来定义它们之间的距离。具体来说,对于属性上的两个取值,分别计算它们在每个类别中出现的比例,比如在所有颜色为“红”的样本中,有多少比例是好瓜、多少比例是坏瓜;再比较两个取值的这种比例有多大的差别。如果两个取值在各类中的分布很相似,就说明它们对分类的作用相近,距离就小;如果分布相差很大,距离就大。这一方法由 Craig Stanfill 和 David Waltz 在 1986 年提出。当数据中既有连续属性和有序属性、又有无序属性时,可以把在有序属性上用闵可夫斯基距离计算的结果,与在无序属性上用 VDM 计算的结果组合起来,得到混合属性的距离。

在建模中如何处理

大多数需要数值输入的模型,比如线性回归、逻辑回归、支持向量机和神经网络,在使用无序属性之前都需要对它进行编码。独热编码是最常用的方法:为每个可能的取值建立一列,样本取这个值时为 1,否则为 0。这样不会引入虚假的大小关系,所有取值之间的距离都相同。当取值的数量非常多时,比如成千上万个商品编号,独热编码会产生大量的列,这时可以使用目标编码,或者在深度学习中为每个取值学习一个嵌入向量,让模型自己发现取值之间的相似性。决策树、朴素贝叶斯等模型则可以比较自然地直接处理无序属性。需要特别注意的是,不要因为无序属性的取值是用数字表示的,比如用 1、2、3 表示三个城市,就把它当作数值来使用,这会让模型误以为城市 3 比城市 1 大,而且城市 2 位于两者之间。