关于 (R) 主成分回归中的缩放问题

数据挖掘 r 回归
2021-10-07 05:30:46

我正在阅读《统计学习简介》(ISL),Ch。6 主成分回归。当我查看LabsR时,我想知道在这种情况下如何处理缩放。

ISL-Lab “Chapter 6 Lab 3: PCR and PLS Regression”建议采用以下方法:

pcr.fit=pcr(Salary~., data=Hitters,subset=train,scale=TRUE, validation="CV")
pcr.pred=predict(pcr.fit,x[test,],ncomp=7)

这里traintest是行索引列表,指示测试和训练数据,例如:

> train
  [1]  70  98 150 237  53 232 243

问题:

在训练期间,数据按比例缩放scale=TRUE但是,缩放似乎仅用于subset=train如果我没有错(这似乎是正确的)。

然而,当预测 时x[test,],似乎没有发生缩放。我的看法是,应将与用于缩放训练数据的缩放相同的缩放应用于测试数据,以产生正确的预测。

我在这里错了吗?或者在后台发生了pcr()什么使得扩展测试集变得不必要?

不幸的是,文档中没有关于scale()with的详细信息pcr()

这里的正确方法是什么?

1个回答

我同意如果在训练数据上使用缩放,它也应该在测试数据上使用。

但是,从我在pcr文档中看到的功能中没有scale选项。这似乎可以通过运行文档中示例中的代码来确认: pcr: Prinicpal component regression transfer function models

> library(analogue)
> data(ImbrieKipp)
> data(SumSST)
> pcr(ImbrieKipp, SumSST, tranFun = Hellinger, scale = TRUE)

    Principal Component Regression Model

Call:
pcr(x = ImbrieKipp, y = SumSST, tranFun = Hellinger, scale = TRUE)

No. of Components: 27

RMSE (Apparent):
     PC1      PC2      PC3      PC4      PC5      PC6      PC7      PC8      PC9     PC10     PC11 
2.381215 1.707588 1.680896 1.679774 1.608903 1.535145 1.507995 1.496939 1.496908 1.432142 1.426444 
    PC12     PC13     PC14     PC15     PC16     PC17     PC18     PC19     PC20     PC21     PC22 
1.405155 1.391348 1.349172 1.349172 1.315284 1.313187 1.311801 1.291201 1.206484 1.188438 1.187503 
    PC23     PC24     PC25     PC26     PC27 
1.171215 1.170947 1.170380 1.162497 1.162355 
> pcr(ImbrieKipp, SumSST, tranFun = Hellinger, scale = FALSE)

    Principal Component Regression Model

Call:
pcr(x = ImbrieKipp, y = SumSST, tranFun = Hellinger, scale = FALSE)

No. of Components: 27

RMSE (Apparent):
     PC1      PC2      PC3      PC4      PC5      PC6      PC7      PC8      PC9     PC10     PC11 
2.381215 1.707588 1.680896 1.679774 1.608903 1.535145 1.507995 1.496939 1.496908 1.432142 1.426444 
    PC12     PC13     PC14     PC15     PC16     PC17     PC18     PC19     PC20     PC21     PC22 
1.405155 1.391348 1.349172 1.349172 1.315284 1.313187 1.311801 1.291201 1.206484 1.188438 1.187503 
    PC23     PC24     PC25     PC26     PC27 
1.171215 1.170947 1.170380 1.162497 1.162355 

我确实检查了数据不是从一开始就标准化的!

所以在你的情况下,我会scale()在运行之前简单地使用数据pcr


编辑以解决评论中提出的观点。在 pcr 函数中,如果您使用完全虚构的变量,则不会出现警告或错误:

> pcr(ImbrieKipp, SumSST, tranFun = Hellinger, SomethingIjustMadeUp = TRUE)

    Principal Component Regression Model

Call:
pcr(x = ImbrieKipp, y = SumSST, tranFun = Hellinger, SomethingIjustMadeUp = TRUE)

No. of Components: 27

RMSE (Apparent):
     PC1      PC2      PC3      PC4      PC5      PC6      PC7      PC8      PC9     PC10     PC11 
2.381215 1.707588 1.680896 1.679774 1.608903 1.535145 1.507995 1.496939 1.496908 1.432142 1.426444 
    PC12     PC13     PC14     PC15     PC16     PC17     PC18     PC19     PC20     PC21     PC22 
1.405155 1.391348 1.349172 1.349172 1.315284 1.313187 1.311801 1.291201 1.206484 1.188438 1.187503 
    PC23     PC24     PC25     PC26     PC27 
1.171215 1.170947 1.170380 1.162497 1.162355 

没有警告或错误