+-
R语言实现偏最小二乘回归法 partial least squares (PLS)回归
首页 专栏 算法 文章详情
0

R语言实现偏最小二乘回归法 partial least squares (PLS)回归

拓端tecdat 发布于 5 月 11 日

原文链接:http://tecdat.cn/?p=8652

偏最小二乘回归是一种回归形式 。  当使用pls时,新 的线性组合有助于解释模型中的自变量和因变量。

在本文中,我们将使用pls在“ Mroz”数据集中预测“收入”。  

library(pls);library(Ecdat) data("Mroz") str(Mroz) ## 'data.frame':    753 obs. of  18 variables: ##  $ work      : Factor w/ 2 levels "yes","no": 2 2 2 2 2 2 2 2 2 2 ... ##  $ hoursw    : int  1610 1656 1980 456 1568 2032 1440 1020 1458 1600 ... ##  $ child6    : int  1 0 1 0 1 0 0 0 0 0 ... ##  $ child618  : int  0 2 3 3 2 0 2 0 2 2 ... ##  $ agew      : int  32 30 35 34 31 54 37 54 48 39 ... ##  $ educw     : int  12 12 12 12 14 12 16 12 12 12 ... ##  $ hearnw    : num  3.35 1.39 4.55 1.1 4.59 ... ##  $ wagew     : num  2.65 2.65 4.04 3.25 3.6 4.7 5.95 9.98 0 4.15 ... ##  $ hoursh    : int  2708 2310 3072 1920 2000 1040 2670 4120 1995 2100 ... ##  $ ageh      : int  34 30 40 53 32 57 37 53 52 43 ... ##  $ educh     : int  12 9 12 10 12 11 12 8 4 12 ... ##  $ wageh     : num  4.03 8.44 3.58 3.54 10 ... ##  $ income    : int  16310 21800 21040 7300 27300 19495 21152 18900 20405 20425 ... ##  $ educwm    : int  12 7 12 7 12 14 14 3 7 7 ... ##  $ educwf    : int  7 7 7 7 14 7 7 3 7 7 ... ##  $ unemprate : num  5 11 5 5 9.5 7.5 5 5 3 5 ... ##  $ city      : Factor w/ 2 levels "no","yes": 1 2 1 1 2 2 1 1 1 1 ... ##  $ experience: int  14 5 15 6 7 33 11 35 24 21 ...

首先,我们必须通过将数据分为训练和测试集来准备数据。 

set.seed(777) train<-sample(c(T,F),nrow(Mroz),rep=T) #50/50 训练/测试拆分 test<-(!train)

在上面的代码中,我们设置“ set.seed函数”以确保可重复性。然后,我们创建了“ train”对象 。 

现在,我们使用 “plsr”函数创建模型,然后使用“ summary”函数检查结果。我们  使用交叉验证。下面是代码。

## Data:    X dimension: 392 17  ##  Y dimension: 392 1 ## Fit method: kernelpls ## Number of components considered: 17 ##  ## VALIDATION: RMSEP ## Cross-validated using 10 random segments. ##        (Intercept)  1 comps  2 comps  3 comps  4 comps  5 comps  6 comps ## CV           11218     8121     6701     6127     5952     5886     5857 ## adjCV        11218     8114     6683     6108     5941     5872     5842 ##        7 comps  8 comps  9 comps  10 comps  11 comps  12 comps  13 comps ## CV        5853     5849     5854      5853      5853      5852      5852 ## adjCV     5837     5833     5837      5836      5836      5835      5835 ##        14 comps  15 comps  16 comps  17 comps ## CV         5852      5852      5852      5852 ## adjCV      5835      5835      5835      5835 ##  ## TRAINING: % variance explained ##         1 comps  2 comps  3 comps  4 comps  5 comps  6 comps  7 comps ## X         17.04    26.64    37.18    49.16    59.63    64.63    69.13 ## income    49.26    66.63    72.75    74.16    74.87    75.25    75.44 ##         8 comps  9 comps  10 comps  11 comps  12 comps  13 comps  14 comps ## X         72.82    76.06     78.59     81.79     85.52     89.55     92.14 ## income    75.49    75.51     75.51     75.52     75.52     75.52     75.52 ##         15 comps  16 comps  17 comps ## X          94.88     97.62    100.00 ## income     75.52     75.52     75.52

输出包括“验证”部分中均方根误差 。因为有17个独立变量,所以有17个成分。 可以看到,在成分3或4之后,因变量中解释的方差几乎没有改善。下面是这些结果图的代码。 

我们将使用我们的模型进行预测。 

此后,我们计算均方误差。这是通过从测试集的因变量中减去我们的预测模型的结果来完成的。然后,我们对这些信息求平方并计算平均值。 

mean((pls.pred-Mroz$income\[test\])^2) ## \[1\] 63386682  

 我们使用传统的最小二乘回归模型运行数据并比较结果。

## \[1\] 59432814 最小二乘模型比偏最小二乘模型好一点,但是如果看一下模型,我们会看到几个不重要的变量。我们删除这些,看看结果如何 `````` summary(lm.fit) ##  ## Call: ## lm(formula = income ~ ., data = Mroz, subset = train) ##  ## Residuals: ##    Min     1Q Median     3Q    Max  ## -20131  -2923  -1065   1670  36246  ##  ## Coefficients: ##               Estimate Std. Error t value Pr(>|t|)     ## (Intercept) -1.946e+04  3.224e+03  -6.036 3.81e-09 *** ## workno      -4.823e+03  1.037e+03  -4.651 4.59e-06 *** ## hoursw       4.255e+00  5.517e-01   7.712 1.14e-13 *** ## child6      -6.313e+02  6.694e+02  -0.943 0.346258     ## child618     4.847e+02  2.362e+02   2.052 0.040841 *   ## agew         2.782e+02  8.124e+01   3.424 0.000686 *** ## educw        1.268e+02  1.889e+02   0.671 0.502513     ## hearnw       6.401e+02  1.420e+02   4.507 8.79e-06 *** ## wagew        1.945e+02  1.818e+02   1.070 0.285187     ## hoursh       6.030e+00  5.342e-01  11.288  < 2e-16 *** ## ageh        -9.433e+01  7.720e+01  -1.222 0.222488     ## educh        1.784e+02  1.369e+02   1.303 0.193437     ## wageh        2.202e+03  8.714e+01  25.264  < 2e-16 *** ## educwm      -4.394e+01  1.128e+02  -0.390 0.697024     ## educwf       1.392e+02  1.053e+02   1.322 0.186873     ## unemprate   -1.657e+02  9.780e+01  -1.694 0.091055 .   ## cityyes     -3.475e+02  6.686e+02  -0.520 0.603496     ## experience  -1.229e+02  4.490e+01  -2.737 0.006488 **  ## --- ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ##  ## Residual standard error: 5668 on 374 degrees of freedom ## Multiple R-squared:  0.7552, Adjusted R-squared:  0.744  ## F-statistic: 67.85 on 17 and 374 DF,  p-value: < 2.2e-16 lm.pred<-predict(lm.fit,Mroz\[test,\]) mean((lm.pred-Mroz$income\[test\])^2) ## \[1\] 57839715

 误差降低很多,这表明最小二乘回归模型优于偏最小二乘模型。此外, 偏最小二乘模型很难解释。因此,最小二乘模型是最受欢迎的模型。

算法 机器学习 人工智能 深度学习 数据挖掘
阅读 65 更新于 5 月 11 日
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
拓端数据
拓端tecdat分享最in的大数据资讯,提供“一站式”的数据分析学习和咨询体验,让我们一起做有态度的数据人...
关注专栏
avatar
拓端tecdat

拓端(http://tecdat.cn )创立于2016年,自成立以来,就定位为提供专业的数据分析与数据挖掘服务的提供商,致力于充分挖掘数据的价值,为客户定制个性化的数据解决方案与行业报告等。

169 声望
27 粉丝
关注作者
0 条评论
得票数 最新
提交评论
你知道吗?

注册登录
avatar
拓端tecdat

拓端(http://tecdat.cn )创立于2016年,自成立以来,就定位为提供专业的数据分析与数据挖掘服务的提供商,致力于充分挖掘数据的价值,为客户定制个性化的数据解决方案与行业报告等。

169 声望
27 粉丝
关注作者
宣传栏
目录

原文链接:http://tecdat.cn/?p=8652

偏最小二乘回归是一种回归形式 。  当使用pls时,新 的线性组合有助于解释模型中的自变量和因变量。

在本文中,我们将使用pls在“ Mroz”数据集中预测“收入”。  

library(pls);library(Ecdat) data("Mroz") str(Mroz) ## 'data.frame':    753 obs. of  18 variables: ##  $ work      : Factor w/ 2 levels "yes","no": 2 2 2 2 2 2 2 2 2 2 ... ##  $ hoursw    : int  1610 1656 1980 456 1568 2032 1440 1020 1458 1600 ... ##  $ child6    : int  1 0 1 0 1 0 0 0 0 0 ... ##  $ child618  : int  0 2 3 3 2 0 2 0 2 2 ... ##  $ agew      : int  32 30 35 34 31 54 37 54 48 39 ... ##  $ educw     : int  12 12 12 12 14 12 16 12 12 12 ... ##  $ hearnw    : num  3.35 1.39 4.55 1.1 4.59 ... ##  $ wagew     : num  2.65 2.65 4.04 3.25 3.6 4.7 5.95 9.98 0 4.15 ... ##  $ hoursh    : int  2708 2310 3072 1920 2000 1040 2670 4120 1995 2100 ... ##  $ ageh      : int  34 30 40 53 32 57 37 53 52 43 ... ##  $ educh     : int  12 9 12 10 12 11 12 8 4 12 ... ##  $ wageh     : num  4.03 8.44 3.58 3.54 10 ... ##  $ income    : int  16310 21800 21040 7300 27300 19495 21152 18900 20405 20425 ... ##  $ educwm    : int  12 7 12 7 12 14 14 3 7 7 ... ##  $ educwf    : int  7 7 7 7 14 7 7 3 7 7 ... ##  $ unemprate : num  5 11 5 5 9.5 7.5 5 5 3 5 ... ##  $ city      : Factor w/ 2 levels "no","yes": 1 2 1 1 2 2 1 1 1 1 ... ##  $ experience: int  14 5 15 6 7 33 11 35 24 21 ...

首先,我们必须通过将数据分为训练和测试集来准备数据。 

set.seed(777) train<-sample(c(T,F),nrow(Mroz),rep=T) #50/50 训练/测试拆分 test<-(!train)

在上面的代码中,我们设置“ set.seed函数”以确保可重复性。然后,我们创建了“ train”对象 。 

现在,我们使用 “plsr”函数创建模型,然后使用“ summary”函数检查结果。我们  使用交叉验证。下面是代码。

## Data:    X dimension: 392 17  ##  Y dimension: 392 1 ## Fit method: kernelpls ## Number of components considered: 17 ##  ## VALIDATION: RMSEP ## Cross-validated using 10 random segments. ##        (Intercept)  1 comps  2 comps  3 comps  4 comps  5 comps  6 comps ## CV           11218     8121     6701     6127     5952     5886     5857 ## adjCV        11218     8114     6683     6108     5941     5872     5842 ##        7 comps  8 comps  9 comps  10 comps  11 comps  12 comps  13 comps ## CV        5853     5849     5854      5853      5853      5852      5852 ## adjCV     5837     5833     5837      5836      5836      5835      5835 ##        14 comps  15 comps  16 comps  17 comps ## CV         5852      5852      5852      5852 ## adjCV      5835      5835      5835      5835 ##  ## TRAINING: % variance explained ##         1 comps  2 comps  3 comps  4 comps  5 comps  6 comps  7 comps ## X         17.04    26.64    37.18    49.16    59.63    64.63    69.13 ## income    49.26    66.63    72.75    74.16    74.87    75.25    75.44 ##         8 comps  9 comps  10 comps  11 comps  12 comps  13 comps  14 comps ## X         72.82    76.06     78.59     81.79     85.52     89.55     92.14 ## income    75.49    75.51     75.51     75.52     75.52     75.52     75.52 ##         15 comps  16 comps  17 comps ## X          94.88     97.62    100.00 ## income     75.52     75.52     75.52

输出包括“验证”部分中均方根误差 。因为有17个独立变量,所以有17个成分。 可以看到,在成分3或4之后,因变量中解释的方差几乎没有改善。下面是这些结果图的代码。 

我们将使用我们的模型进行预测。 

此后,我们计算均方误差。这是通过从测试集的因变量中减去我们的预测模型的结果来完成的。然后,我们对这些信息求平方并计算平均值。 

mean((pls.pred-Mroz$income\[test\])^2) ## \[1\] 63386682  

 我们使用传统的最小二乘回归模型运行数据并比较结果。

## \[1\] 59432814 最小二乘模型比偏最小二乘模型好一点,但是如果看一下模型,我们会看到几个不重要的变量。我们删除这些,看看结果如何 `````` summary(lm.fit) ##  ## Call: ## lm(formula = income ~ ., data = Mroz, subset = train) ##  ## Residuals: ##    Min     1Q Median     3Q    Max  ## -20131  -2923  -1065   1670  36246  ##  ## Coefficients: ##               Estimate Std. Error t value Pr(>|t|)     ## (Intercept) -1.946e+04  3.224e+03  -6.036 3.81e-09 *** ## workno      -4.823e+03  1.037e+03  -4.651 4.59e-06 *** ## hoursw       4.255e+00  5.517e-01   7.712 1.14e-13 *** ## child6      -6.313e+02  6.694e+02  -0.943 0.346258     ## child618     4.847e+02  2.362e+02   2.052 0.040841 *   ## agew         2.782e+02  8.124e+01   3.424 0.000686 *** ## educw        1.268e+02  1.889e+02   0.671 0.502513     ## hearnw       6.401e+02  1.420e+02   4.507 8.79e-06 *** ## wagew        1.945e+02  1.818e+02   1.070 0.285187     ## hoursh       6.030e+00  5.342e-01  11.288  < 2e-16 *** ## ageh        -9.433e+01  7.720e+01  -1.222 0.222488     ## educh        1.784e+02  1.369e+02   1.303 0.193437     ## wageh        2.202e+03  8.714e+01  25.264  < 2e-16 *** ## educwm      -4.394e+01  1.128e+02  -0.390 0.697024     ## educwf       1.392e+02  1.053e+02   1.322 0.186873     ## unemprate   -1.657e+02  9.780e+01  -1.694 0.091055 .   ## cityyes     -3.475e+02  6.686e+02  -0.520 0.603496     ## experience  -1.229e+02  4.490e+01  -2.737 0.006488 **  ## --- ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ##  ## Residual standard error: 5668 on 374 degrees of freedom ## Multiple R-squared:  0.7552, Adjusted R-squared:  0.744  ## F-statistic: 67.85 on 17 and 374 DF,  p-value: < 2.2e-16 lm.pred<-predict(lm.fit,Mroz\[test,\]) mean((lm.pred-Mroz$income\[test\])^2) ## \[1\] 57839715

 误差降低很多,这表明最小二乘回归模型优于偏最小二乘模型。此外, 偏最小二乘模型很难解释。因此,最小二乘模型是最受欢迎的模型。