具有类别变量的线性回归

数据挖掘 机器学习 线性回归 可视化 分类数据 编码
2022-03-10 02:46:15

我目前正在学习和探索机器学习,并了解基于两个数值变量的线性回归的基础知识,但现在我希望更进一步,需要一些指导来了解如何去做。

具体来说,我现在正在学习使用分类变量的线性回归,并且我理解它的要点:我们只是将分类变量编码为某种数值表示(如 one-hot 编码)并将其放入模型中。伟大的。

虽然网上有很多关于如何进行各种编码方法等的指南,但我还没有真正找到解释这种方法的用例的资源:在什么样的情况下使用分类数据来预测数值是有用?

在进行编码之前,我的数据应该采用什么类型的数据格式?(是否有两列,一个是数字结果,另一个是相应的类别?)

我还想知道我们可视化和分析模型结果(及其预测)的不同方式,尤其是在我们有大量分类变量的情况下。

抱歉,如果一篇文章中有太多问题,我需要一些关于这个概念的指导。所有在线资源都在告诉我如何实现该模型,但没有告诉我何时以及为什么使用它。

2个回答

我们只是将分类变量编码为某种数字表示(如 one-hot 编码)

表示的选择很重要,因为它必须保留分类变量的属性:one-hot-encoding 是标准选项,但直接将分类值编码为整数是错误的,因为它引入了没有顺序的顺序。

这种方法的用例:在什么样的情况下使用分类数据来预测数值是有用的?

分类数据的回归对许多应用很有用。例如,文本数据通常表示为“词袋”(BoW),其中每个词都是一个分类变量。一些任务涉及从一些文本输入中预测数字目标,例如:

  • 预测论文的等级
  • 预测代表抄袭可能性的分数(例如Turnitin)
  • 以 1 到 5 的等级预测文本的情绪

还有许多其他示例,不仅来自文本数据。

在进行编码之前,我的数据应该采用什么类型的数据格式?(是否有两列,一个是数字结果,另一个是相应的类别?)

数据可以根据需要具有尽可能多的自变量(特征)。由于分类变量通常是单热编码的,因此重要的是编码后的特征数量。通常需要对数据进行预处理以避免过度拟合(通常应该丢弃稀有值)。

我还想知道我们可视化和分析模型结果(及其预测)的不同方式,尤其是在我们有大量分类变量的情况下。

据我所知,没有具体的方法来分析模型的结果,它与数值特征的原理相同。如果想分析单个特征对模型性能的影响,一种简单的技术是在有/没有这个特征的情况下训练模型并比较结果。

假设您有这样的问题: “汽车重量如何影响每加仑英里数 (mpg)?”

加载并绘制“汽车数据”。在第一个图中,您可以清楚地看到两者之间存在(或多或少)线性关系weightmpg.

现在你可以问:有时间上的差异吗?您可以为这些年添加一个“虚拟”1975年到旗这几年(=1如果真实=0除此以外)。

当您绘制两个时间段的数据时(1975 年对>1975),你可以看到有很大的不同。

library(ISLR)
library(dplyr)

# Car dara
df = ISLR::Auto
df = df %>% select(weight,mpg,year)
summary(df)
# Dummy encoding "time"
df$y70_75 = ifelse(df$year<=75, 1, 0)

# Plot
par(mfrow=c(1,2))
plot(df$weight,df$mpg,xlab="Weight", ylab="MPG", ylim=c(10,50))
 
# Plot with "time dummy"
plot(df$weight[df$y70_75==1],df$mpg[df$y70_75==1],xlab="Weight", ylab="MPG", col="red", ylim=c(10,50))
points(df$weight[df$y70_75==0],df$mpg[df$y70_75==0])

在此处输入图像描述

现在我们可以将其插入线性回归,本质上为黑点拟合一条线性线,为红点拟合一条线性线(由虚拟对象表示)。模型看起来像

mpg=β0+β1weight+β3dummy7075+u

# Regression
reg = lm(mpg~weight,data=df)
summary(reg)

# Regression with time dummy
reg2 = lm(mpg~weight+y70_75,data=df)
summary(reg2)

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 46.325718   0.689669   67.17   <2e-16 ***
weight      -0.006985   0.000230  -30.37   <2e-16 ***
y70_75      -4.533643   0.391472  -11.58   <2e-16 ***

多年来1975 年,估计mpg将会43.34.5310.007weight, 对于剩余的年份 (>1975 年),估计效果为43.34.5300.007weight.

在这里添加一个假人只是增加了以假人为条件的截距项。在这里,这将是一个不同的截距项,以假人定义的时间为条件。

我们可以说(平均而言)mpg多年来1975年低于晚年。或者换句话说,对于给定的weight,mpg大约低-4.5个单位1975年与晚年相比。

当您有很多假人时,您最终可能会得到比观察(行)更多的变量(列),这是一个“高维”问题。例如,当您将文本虚拟编码为“词袋”时,就是这种情况。在这种情况下,您需要在线性模型(例如 Lasso/Ridge)中使用正则化。