假设我们有一个二元分类问题。
为什么拟合线性回归然后给定阈值分类会不好?
输出将是连续的,并且可能超出范围,但我们可以使用阈值将其转换为二进制。
假设我们有一个二元分类问题。
为什么拟合线性回归然后给定阈值分类会不好?
输出将是连续的,并且可能超出范围,但我们可以使用阈值将其转换为二进制。
它会起作用,毕竟 ML 主要是关于工程和黑客攻击。但是,它的性能不会那么好,例如逻辑回归。如果您比较线性线和逻辑回归,您会注意到它们各自的损失函数的梯度对于靠近决策边界(“阈值”)和远离它的点来说是完全不同的。而对于逻辑回归点,靠近决策边界或被错误分类的梯度的绝对值更大。因此,如果选择梯度方法,优化将受这些点的影响最大。因此,将拟合曲线以改进分类。
而在线性回归中,每个点到线性线的距离将被最小化,因此无论该点是否已经正确分类,它都会影响优化。这导致优化受到已经正确分类并且实际上不需要影响线性函数调整的点的很大影响。它们抑制了实际上被错误分类并且应该影响整个优化的点的重要性。
我在这里采取更“应用”的观点:
正态 (OLS) 回归是线性的,可以采用预测因变量的任何值。
相反,Logit(通过逻辑链接函数)将结果限制为。
这是一个理想的属性,因为您可以将预测值直接解释为概率。事实上,分类是通过将预测拆分为来完成的。
这是R中的一个小插图:
# Fake Data
df1=data.frame(rep(1,1000),sample(0:30,1000,rep=TRUE))
df2=data.frame(rep(0,1000),sample(20:100,1000,rep=TRUE))
colnames(df1)<-c("y", "x")
colnames(df2)<-c("y", "x")
df=rbind(df1,df2)
# Linear Model
ols = lm(y~x, data=df)
ols_preds=predict(reg,newdata=df)
# Plot
plot(df$x, ols_preds, type="p")
lines(df$x, df$y, type="p",col="red")
# Logit
logit = glm(y ~ x, data = df, family = "binomial")
logit_preds=predict(logit,newdata=df,type = "response")
# Plot
lines(df$x, logit_preds, type="p",col="blue")
结果:
在下面的图中,
如您所见,OLS“过冲”。它可以预测低于 0 或高于 1 的“概率”,并且在此示例中确实预测了“低于 0”的概率。
您还可以看到 OLS(假设我们在 0.5 处“拆分”类)不会产生非常好的拆分。原因是我的类在 0 到 30 之间的范围内,而对于它在 20 到 100 之间的范围内。所以“倾斜”也导致了不好的分裂在 OLS 下。
与 OLS 相比, Logit 以较低的值拆分,这是可取的,因为这种拆分更接近真实类别。
这最终来自目标函数。与 OLS 相比, Logit是不同的(其中只是将残差平方和最小化)。Logit 查看某些观察属于类的“对数几率” 。有一个非常不同的看法。
我认为最重要的问题之一是损耗测量。对于真值为 0 的点,-1 或 1 的预测值对损失的贡献相同,但这些预测并不同样糟糕!