我正在试图完全理解在进行回归分析时分类数据和顺序数据之间的区别。目前为止,我清楚的是:
分类特征和数据示例:
颜色:红色,白色,黑色
为什么是分类:红色 < 白色 < 黑色
在逻辑上是错误的
顺序特征和数据示例:
状态:旧的,翻新的,新的
为什么是顺序:旧的 < 翻新的 < 新的
在逻辑上是正确的
分类到数值和顺序到数值的编码方法:
分类数据使用独热编码
顺序数据使用任意数字
分类数据示例:
data = {'color': ['blue', 'green', 'green', 'red']}
独热编码后的数值格式:
color_blue color_green color_red0 1 0 01 0 1 02 0 1 03 0 0 1
顺序数据示例:
data = {'con': ['old', 'new', 'new', 'renovated']}
使用映射后的数值格式:旧的 < 翻新的 < 新的 → 0, 1, 2
0 01 22 23 1
在我的数据中,随着状态从“旧的”变为“新的”,价格也在增加。数值上的“旧的”被编码为’0’。数值上的“新的”被编码为’2’。因此,随着状态的增加,价格也在增加。这是正确的。
现在让我们看看“颜色”特征。在我的案例中,不同的颜色也会影响价格。例如,“黑色”会比“白色”更贵。但从上面提到的分类数据的数值表示来看,我没有看到像“状态”特征那样的增加依赖性。这是否意味着如果使用独热编码,颜色变化在回归模型中不会影响价格?如果它无论如何都不影响价格,为什么要在回归中使用独热编码?你能澄清一下吗?
问题更新:
首先我介绍线性回归的公式:
让我们看看颜色的数据表示:让我们使用公式预测第1项和第2项的价格,使用两种数据表示:
独热编码: 在这种情况下,不同的颜色会有不同的theta值,预测将是:
Price (1 item) = 0 + 20*1 + 50*0 + 100*0 = 20$ (假设theta值为例)Price (2 item) = 0 + 20*0 + 50*1 + 100*0 = 50$ (假设theta值为例)
颜色顺序编码: 在这种情况下,所有颜色共享一个theta值,但乘数不同:
Price (1 item) = 0 + 20*10 = 200$ (假设theta值为例)Price (2 item) = 0 + 20*20 = 400$ (假设theta值为例)
在我的模型中,白色 < 红色 < 黑色在价格上。似乎在两种情况下都是合乎逻辑的预测。对于顺序和分类表示。因此,我可以不论数据类型(分类或顺序)而在回归中使用任何编码?这种划分只是约定俗成和面向软件的表示,而不是回归逻辑本身的问题?
回答:
你不会看到增加的依赖性。区分的整个意义在于颜色不是你可以有意义地放在连续体上的特征,正如你已经注意到的。
独热编码使软件分析这个维度变得非常方便。不是有一个带有列出值的“颜色”特征,而是有一组布尔(存在/不存在)特征。例如,你上面提到的第0行有特征color_blue = true, color_green = false, 和 color_red = false。
你得到的预测数据应该显示这些作为独立的维度。例如,color_blue的存在可能值$200,而绿色是-$100。
总结:不要寻找一条跨越(不存在的)颜色轴的线性回归线;相反,寻找color_*因子,每种颜色一个。就你的分析算法而言,这些是完全独立的特征;“独热”编码(来自数字电路设计的术语)只是我们处理这种情况的约定俗成。
这有助于你的理解吗?
在你于2015年12月4日02:03 Z编辑问题后:
不,你的假设是不正确的:这两种表示不仅仅是方便的问题。颜色排序在这个例子中有效——因为效果恰好是所选编码的整齐线性函数。正如你的例子所示,你的简单编码假设白色到红色到黑色的定价是一个线性进展。当绿色、蓝色和棕色都是$25,罕见的黄色值$500,而透明降低价格$1,000时,你会怎么做?
此外,你如何提前知道黑色比白色值钱,而白色又比红色值钱?
考虑基于小学学区的房价情况,区域内有50个学区。如果你使用数值编码——学区编号,按字母顺序的序号位置,或其他任意排序——回归软件将很难找到该数字与房价之间的相关性。PS 107是否比PS 32或PS 15更贵的学区?Addington和Bendemeer是否比Union City和Ventura更受欢迎?
根据独热原则将这些分成50个不同的特征,可以将特征与编码解耦,并允许分析软件以数学上有意义的方式处理它们。这绝不是完美的——例如,从20个特征扩展到70个特征意味着收敛时间会更长——但我们确实可以为学区得到有意义的结果。
如果你愿意,你现在可以按预期的价值顺序编码该特征,并获得一个合理的拟合,准确性损失不大,模型预测速度更快(变量更少)。