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

数据挖掘 机器学习 回归 分类数据 线性回归
2021-09-18 04:24:58

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

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

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

Categorical-to-numeric 和 ordinal-to-numeric 编码方法:
分类数据的 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 < renovated < new → 0, 1, 2

0    0
1    2
2    2
3    1

在我的数据中,我有“颜色”功能。随着颜色从白色变为黑色,价格上涨。根据上述规则,我可能必须对分类“颜色”数据使用单热编码。但是为什么我不能使用序数表示。下面我提供了我提出问题的意见。

让我从介绍线性回归的公式开始: 让我们看一下颜色的数据表示: 让我们使用两种数据表示的公式来预测第 1 项和第 2 项的价格:One-hot 编码: 在这种情况下,不同的 thetas会存在不同的颜色。我假设 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)

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

1个回答

序数和分类之间的区别确实很重要。如果实际上白色和红色之间的差异与红色和黑色之间存在巨大差异,那么您的 (10,20,30) 序数模型将不会表现良好。

一种热编码可以更精细地学习序数值之间的关系,但会丢弃变量相关的信息。同样,如果数据不足,它更有可能过度拟合。

序数变量减轻了这些问题,但代价是迫使您定义区间。有许多方法可以定义序数变量的值,例如 rologit。