数据分析师应该知道的16种回归技术:主成份回归

2018 年 8 月 21 日 数萃大数据

多元线性回归(MLR)可用来拟合因变量和多个预测变量之间的关系,然而当预测变量之间存在多重共线性或预测变量的个数非常多,使用MLR就会出现较大的误差。对于这个问题,可采用LASSO和松弛网络回归进行变量选择减少变量个数,也可采用岭回归缩减估计值减小估计方差,它们都是对目标函数进行调优来解决MLR的多重共线性或估计精度不足的问题。今天我们换一种思路通过坐标变换来改变预测变量间的相互关系同时减少回归变量的数量,然后对变换后的新预测变量进行回归,这就是主成份回归(PCR)的基本思想。


在传统的多元线性回归中,利用最小二乘(OLS)原则,回归系数的的估计值为:

其中表示因变量,为的向量,表示标准化后的预测变量,的矩阵,分别表示样本数和变量数。


为进行,首先把独立的预测变量变换为它们的主成份,即

其中是由的特征值构成的对角阵,的特征向量矩阵且是正交阵,是由的主成份构成的数据阵,的加权平均。


因为特征值越小多重共线性越严重,所以为了消除多重弄共线性,我们会舍弃特征值较小的主成份。由于抛弃了几个主成分,因此当在返回到自变量估计回归系数时,会出现偏差,庆幸的是,偏差的增幅通常远低于方差的降幅,也就是说小于。因此回归系数新的估计值为:

的关系为:

因此PCA的步骤为:

  1. (标准化后)进行,然后把主成份保存在

  2. 在主成份上对做拟合获得的最小二乘估计

  3. 舍弃特征值较小的主成份同时设置对应元素为0

  4. 通过关系式获取的原始估计值


最后一个问题是主成份个数的确定,一种简单的方法是舍弃特征值较小(远小于1)的主成份就可以。也可以使用下面三种客观评判标准:

  • 方差贡献率:为D的第个元素

  • 累计方差贡献率:

  • 主成份标准差


主成份回归能进行特征提取但不能进行特征选择,因为每一个主成分都包含了所有特征


案例


下面我们对datasets包中的longley数据集进行主成份回归,该数据集包含从1947到1962的6项经济指标GNP国民生产总值,GNP.deflatorGNP物价折算指数,Unemployed失业人数,Population大于14岁人口数,Employed从业人数,Armed.Forces武装部队人数。现在我们想研究从业人数与其他指标之间的关系

使用prcomp进行PCA,

  
  
    
  1. data1 <- longley[, colnames(longley) != "Year"]

  2. X <- data1[,colnames(data1) != "Employed"]

  3. #scale=T对数据集进行标准化

  4. m1.pca <- prcomp(X, scale=T)

  5. sml.pca <- summary(m1.pca)

  6. library(ggplot2)

  7. dtpc <- as.data.frame(cbind(pc=1:5,t((sml.pca$importance))))

  8. names(dtpc)[2:4] <- c('sd','pv','cpv')

  9. dtpct <- reshape2::melt(dtpc,id='pc', variable.name = "var")

  10. ggplot(dtpct,aes(pc,value,group=var))+

  11.  geom_point(aes(colour=var),size=5)+

  12.  geom_path(lty = 3,colour='blue',lwd=1)+

  13.  geom_vline(xintercept=3,color='red',lty=4,lwd=1)+

  14.  ggthemes::theme_economist()

确定主成份个数为3,使用pls包进行PCR

  
  
    
  1. library(pls)

  2. pcr_model <- pcr(Employed~., data = data1,

  3.                 scale = T, validation = "CV")

  4. #scale = T对数据集进行标准化,validation = "CV"进行交叉验证。

  5. pred <- predict(pcr_model, data1, ncomp = 3);dimnames(pred)=NULL

  6. dt <- data.frame(year=longley$Year,real=data1$Employed,predict=c(pred))

  7. dtc <- reshape2::melt(dt,id='year', variable.name = "var")

  8. ggplot(dtc,aes(year,value,group=var))+

  9.  geom_point(aes(colour=var),size=5)+

  10.  geom_path(lty = 3,colour='red',lwd=1)+

  11.  ggthemes::theme_economist()



推荐阅读

数据分析师应该知道的16种回归技术:Lasso回归

数据分析师应该知道的16种回归技术:弹性网络回归

从零开始深度学习第8讲:利用Tensorflow搭建神经网络

谈谈大数据的那点事 (12)——如何理解大数据和分析大数据

爬取R语言会议视频


长按二维码关注“数萃大数据”

登录查看更多
4

相关内容

【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
287+阅读 · 2020年6月3日
【实用书】数据科学基础,484页pdf,Foundations of Data Science
专知会员服务
117+阅读 · 2020年5月28日
【经典书】机器学习高斯过程,266页pdf
专知会员服务
228+阅读 · 2020年5月2日
一文读懂线性回归、岭回归和Lasso回归
CSDN
34+阅读 · 2019年10月13日
博客 | 回归类算法最全综述及逻辑回归重点讲解
AI研习社
13+阅读 · 2018年11月29日
数据分析师应该知道的16种回归方法:负二项回归
数萃大数据
74+阅读 · 2018年9月16日
数据分析师应该知道的16种回归技术:弹性网络回归
数萃大数据
91+阅读 · 2018年8月16日
数据分析师应该知道的16种回归技术:分位数回归
数萃大数据
29+阅读 · 2018年8月8日
机器学习者都应该知道的五种损失函数!
数盟
5+阅读 · 2018年6月21日
用Python实现线性回归,8种方法哪个最高效?
七月在线实验室
7+阅读 · 2018年4月19日
Arxiv
10+阅读 · 2020年4月5日
q-Space Novelty Detection with Variational Autoencoders
VIP会员
相关资讯
Top
微信扫码咨询专知VIP会员