R语言实现偏最小二乘回归法 partial least squares (PLS)回归
时间:2022-07-25
本文章向大家介绍R语言实现偏最小二乘回归法 partial least squares (PLS)回归,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原文链接: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 train/test splittest<-(!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
误差降低得更多,这表明最小二乘回归模型优于偏最小二乘模型。此外, 偏最小二乘模型很难解释。因此,最小二乘模型是最受欢迎的模型。
- java枚举类型enum的使用
- (66) 理解synchronized / 计算机程序的思维逻辑
- 用Python搭建一个校园维基网站(一)
- (67) 线程的基本协作机制 (上) / 计算机程序的思维逻辑
- 制作Aspose CHM文档的过程记录
- 用python搭建一个校园维基网站(二)—— 可编辑内容的首页的创建
- Django博客教程(四):让 django 完成翻译—迁移数据库模型
- Calendar类中add/set/roll方法的区别
- 如何构建一个分布式爬虫(理论篇)
- Python微型Web框架Bottle源码分析
- VirtualBox相关问题总结
- Java 枚举7常见种用法
- ALI的Tensorflow炼成与GAN科普
- LaTeX内容总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 安排上了!PC人脸识别登录,出乎意料的简单
- valgrind使用介绍
- 实用!一键生成数据库文档,堪称数据库界的Swagger
- 算法集锦(2)|scikit-learn| 如何利用文本挖掘推荐Ted演讲
- 算法集锦(3)|采用医疗数据预测糖尿病的算法
- 谁说Cat不能做链路跟踪的,给我站出来
- Libra:一种Python工具,可以用几行代码自动实现机器学习过程
- 国内首个“新基建”安全大赛启动了!
- Kubernetes 中 Informer 的使用
- 嵌入式开发中常见3个的C语言技巧
- 恕我直言,我也是才知道ElasticSearch条件更新是这么玩的
- 有了MinIO,你还会用FastDFS么?
- STP 实验
- 算法集锦(6) |基于GPU框架的tensorflow数据增强算法
- 交换机端口安全实验