回归分析中的分类和有序特征数据表示?

Categorical and ordinal feature data representation in regression analysis?

我试图在进行回归分析时完全理解分类数据和顺序数据之间的区别。现在,什么是明确的:

分类特征和数据示例:
颜色:红、白、黑
为什么分类:red < white < black 在逻辑上 不正确

序数特征和数据示例:
条件:旧的,翻新的,新的
为什么序数:old < renovated < new 在逻辑上是 正确的

分类到数字和顺序到数字的编码方法:
分类数据的 One-Hot 编码
序数数据的任意数字

分类数据转数值:

data = {'color': ['blue', 'green', 'green', 'red']}

One-Hot编码后的数字格式:

   color_blue  color_green  color_red
0           1            0          0
1           0            1          0
2           0            1          0
3           0            0          1

序数数据转数值:

data = {'con': ['old', 'new', 'new', 'renovated']}

使用映射后的数值格式:Old < refriended < new → 0, 1, 2

0    0
1    2
2    2
3    1

在我的数据中,我有 'color' 特征。随着颜色从白色变为黑色,价格会上涨。根据上述规则,我可能必须对分类 'color' 数据使用单热编码。但是为什么我不能使用序数表示。下面我从我的问题出现的地方提供了我的观察。

先介绍一下线性回归的公式:
让我们看一下颜色的数据表示: 让我们使用两种数据表示的公式来预测第 1 项和第 2 项的价格:
单热编码: 在这种情况下,将存在不同颜色的不同 theta。我假设 thetas 已经来自回归(20、50 和 100)。预测将是:

Price (1 item) = 0 + 20*1 + 50*0 + 100*0 = 20$  (thetas are assumed for example)
Price (2 item) = 0 + 20*0 + 50*1 + 100*0 = 50$  

颜色的序数编码: 在这种情况下,所有颜色都有 1 个共同的 theta,但我分配的乘数 (10、20、30) 不同:

Price (1 item) = 0 + 20*10 = 200$  (theta assumed for example)
Price (2 item) = 0 + 20*20 = 400$  (theta assumed for example)

在我的模型中,白色 < 红色 < 黑色的价格。似乎相关性工作正常,并且在两种情况下都是合乎逻辑的预测。对于序数和分类表示。因此,无论数据类型(分类或顺序)如何,我都可以对回归使用任何编码吗?数据表示中的这种划分只是约定和面向软件的表示的问题,而不是回归逻辑本身的问题?

So I can use any encoding for my regression regardless of the data type (categorical or ordinal)? This division in data representations is just a matter of conventions and software-oriented representations rather than a matter of regression logic itself?

可以做任何事。问题是 什么可能会更好?答案是你应该使用嵌入关于数据结构的正确信息而不是嵌入错误假设的表示。这里是什么意思?

  • 如果您的数据是分类数据并且您使用数字格式,那么您将嵌入 错误结构(因为分类数据没有排序)
  • 如果您的数据是原始数据并且您使用单锄编码,那么您不要嵌入真正的结构(因为有一个排序而您忽略它)。

那么为什么在您的情况下这两种格式都是 "work"?因为你的问题是微不足道的,实际上是错误的。您分析预测 训练样本 的效果,事实上,给定一些过度拟合模型,无论表示形式如何,您总是会在训练数据上获得满分。事实上,您所做的是表明 存在使事情正确的 theta。是的,如果存在适用于原始模型的 theta(在线性模型中)——总会有一个适用于 one-hot。问题是 - 你在训练模型时更有可能错过它。这不是面向软件的问题,而是 面向学习的问题

然而,实际上,这不会发生。一旦你引入了实际的问题,有很多数据,这些数据可能是嘈杂的、不确定的等等。你会得到更好的分数,使用与问题的性质有关的表示(这里 - 原始的) 更少的努力 然后使用不包含它的表示(这里 - 一个热)。为什么?因为可以通过模型从数据中推断(学习)这种关于序数的知识,但是您将需要更多的训练数据才能做到这一点。那么,如果您可以将这些信息直接嵌入到数据结构中从而导致更容易学习的问题,那为什么还要这样做呢?学习 ML 实际上很难,不要让它变得更难。另一方面,永远记住你必须确定你嵌入的知识确实是真实的,因为从数据中学习关系可能很难,但学习起来更难来自虚假关系的真实模式。