执行线性回归,但强制解决方案通过一些特定的数据点

机器算法验证 回归 机器学习 最小二乘 线性模型 多项式
2022-02-15 07:40:29

我知道如何对一组点进行线性回归。也就是说,我知道如何将我选择的多项式拟合到给定的数据集(在 LSE 意义上)。但是,我不知道的是如何强制我的解决方案通过我选择的某些特定点。我以前见过这样做,但我不记得这个过程叫什么,更不用说它是如何完成的了。

作为一个非常简单和具体的例子,假设我有 100 个点分散在 xy 平面上,我选择通过它们拟合任意阶多项式。我知道如何很好地执行这种线性回归。但是,让我们说我想“强制”我的解决方案,例如通过我在 x 坐标处的三个数据点x=3,x=19, 和x=89, (当然还有它们对应的 y 坐标)。

这个一般程序叫什么,它是如何完成的,我需要注意什么特别的陷阱?

编辑:

我想补充一点,我正在寻找一种具体的方法来做到这一点。我编写了一个程序,它实际上以两种方式之一进行线性回归,直接反转协方差矩阵,或通过梯度下降。我要问的是,究竟如何一步一步地修改我所做的,以便强制多项式解决方案通过特定点?

谢谢!

3个回答

有问题的模型可以写成

y=p(x)+(xx1)(xxd)(β0+β1x++βpxp)+ε

在哪里p(xi)=yi是一个多项式d1通过预定点(x1,y1),,(xd,yd)ε是随机的。(使用拉格朗日插值多项式。)写作(xx1)(xxd)=r(x)允许我们将此模型重写为

yp(x)=β0r(x)+β1r(x)x+β2r(x)x2++βpr(x)xp+ε,

这是一个标准的 OLS 多元回归问题,其误差结构与原始问题相同,其中自变量是p+1数量r(x)xi, i=0,1,,p. 只需计算这些变量并运行您熟悉的回归软件,确保不包含常数项。关于没有常数项的回归的常见警告适用;特别是,R2可以人为抬高;通常的解释不适用。

(事实上​​,通过原点回归是这种构造的一个特例,其中d=1,(x1,y1)=(0,0), 和p(x)=0,所以模型是y=β0x++βpxp+1+ε.)


这是一个工作示例(在R

# Generate some data that *do* pass through three points (up to random error).
x <- 1:24
f <- function(x) ( (x-2)*(x-12) + (x-2)*(x-23) + (x-12)*(x-23) )  / 100
y0 <-(x-2) * (x-12) * (x-23) * (1 + x - (x/24)^2) / 10^4  + f(x)
set.seed(17)
eps <- rnorm(length(y0), mean=0, 1/2)
y <- y0 + eps
data <- data.frame(x,y)

# Plot the data and the three special points.
plot(data)
points(cbind(c(2,12,23), f(c(2,12,23))), pch=19, col="Red", cex=1.5)

# For comparison, conduct unconstrained polynomial regression
data$x2 <- x^2
data$x3 <- x^3
data$x4 <- x^4

fit0 <- lm(y ~ x + x2 + x3 + x4, data=data)
lines(predict(fit0), lty=2, lwd=2)

# Conduct the constrained regressions
data$y1 <- y - f(x)
data$r <- (x-2)*(x-12)*(x-23)
data$z0 <- data$r
data$z1 <- data$r * x
data$z2 <- data$r * x^2

fit <- lm(y1 ~ z0 + z1 + z2 - 1, data=data)
lines(predict(fit) + f(x), col="Red", lwd=2)

阴谋

三个固定点以红色实线显示——它们不是数据的一部分。无约束的四阶多项式最小二乘拟合用黑色虚线表示(它有五个参数);约束拟合(五阶,但只有三个自由参数)用红线显示。

检查最小二乘输出 (summary(fit0)summary(fit)) 可能很有启发性——我把这个留给感兴趣的读者。

如果你想强制回归线通过一个点,可以通过迂回的方式来完成。假设你的观点是(xi,yi). 您只需以该点为原点重新居中数据即可。也就是说,你减去xi从每个x-值,和yi从每个y-价值。现在该点位于坐标平面的原点。然后,您只需在抑制截距的同时拟合回归线(强制截距为(0,0)。因为这是一个线性变换,您可以在之后轻松地对所有内容进行反变换。

如果你想强制一条线穿过 XY 平面中的两个点,这也很容易做到。任何两点都可以用一条线拟合。您可以使用点斜率公式来计算斜率,然后使用其中一个点、斜率和直线方程来找到截距。

请注意,可能无法通过坐标平面中的三个点拟合一条直线。但是,我们可以保证它们可以完美地拟合抛物线(也就是说,同时使用XX2)。这也有代数,但是随着我们向上移动,通过在数据集中包含这三个(更多)点来使用软件拟合模型可能会更容易。同样,您可以通过拟合只能访问这三个点的模型来获得最接近这三个点的直线


然而,在这一点上,我不得不提一下,这可能不是一件好事(除非你的理论提供了非常充分的理由这样做)。您可能还想研究贝叶斯回归,您可以在其中允许您的模型找到数据中信息和一些先验信息的最佳组合(例如,您可以使用这些信息将截距强烈偏向零,例如强迫它)。

为了向@gung 对线性情况的出色覆盖添加一些额外的信息,在高阶多项式情况下,有几种方法可以精确或近似地完成(但几乎与您需要的一样精确)。

首先,请注意多项式(或实际上任何拟合函数)的自由度必须至少与“已知”点的数量一样大。如果自由度相等,则根本不需要数据,因为曲线是完全确定的。如果有更多“已知”点,您将无法解决它(除非它们都位于指定次数的完全相同的多项式上,在这种情况下,任何适当大小的子集都足够了)。从这里开始,我将只讨论多项式何时具有比已知点更多的 df(例如三次 - 具有 4df - 和三个已知点,因此三次既不会被已知点过度确定,也不会完全由它们确定) .

1)“曲线必须通过这一点”是对参数的线性约束,导致约束估计约束最小二乘(尽管这两个术语都可以包括线性约束以外的其他事物,例如正性约束)。您可以通过以下任一方式合并线性约束

  (a) 重铸参数化以隐式包含每个约束,从而产生低阶模型。

  (b) 使用可以对最小二乘拟合的参数进行线性约束的标准工具。(通常通过上面链接中给出的公式)

2)另一种方法是通过加权回归。如果您给已知点足够大的权重,您可以获得与(1)中基本相同的拟合。这通常很容易实现,比重新参数化要快得多,并且可以在不提供约束拟合的包中完成。

@gung 的所有警告都适用