应用预测建模第三章数据预处理习题3.1【预测变量分布、变量关系、离群点、偏度、box-cox变换】

《应用预测建模》Applied Predictive Modeling (2013) by Max Kuhn and Kjell Johnson,林荟等译

第三章 数据预处理

3. 1 UCI 机器学习数据库中有一个关于玻璃鉴定的数据。数据由214 个玻璃样本组成,分别被标记为7 个分类中的1 个。有9个预测变量,包括折射率和八种化学元素的百分比: Na, Mg, Al, Si, K,Ca, Ba 和Fe 。

(a)使用可视化展示预测变量分布以及预测变量间的关系。
(b)数据中是何存在离群值?有没有预测变量是有偏的?
(c)是否存在针对一个或多个预测变量的变换能够改进分类模型?



library(mlbench)
data(Glass)
str(Glass)
head(Glass)
> str(Glass)
'data.frame':	214 obs. of  10 variables:
 $ RI  : num  1.52 1.52 1.52 1.52 1.52 ...
 $ Na  : num  13.6 13.9 13.5 13.2 13.3 ...
 $ Mg  : num  4.49 3.6 3.55 3.69 3.62 3.61 3.6 3.61 3.58 3.6 ...
 $ Al  : num  1.1 1.36 1.54 1.29 1.24 1.62 1.14 1.05 1.37 1.36 ...
 $ Si  : num  71.8 72.7 73 72.6 73.1 ...
 $ K   : num  0.06 0.48 0.39 0.57 0.55 0.64 0.58 0.57 0.56 0.57 ...
 $ Ca  : num  8.75 7.83 7.78 8.22 8.07 8.07 8.17 8.24 8.3 8.4 ...
 $ Ba  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ Fe  : num  0 0 0 0 0 0.26 0 0 0 0.11 ...
 $ Type: Factor w/ 6 levels "1","2","3","5",..: 1 1 1 1 1 1 1 1 1 1 ...
> head(Glass)
       RI    Na   Mg   Al    Si    K   Ca Ba   Fe Type
1 1.52101 13.64 4.49 1.10 71.78 0.06 8.75  0 0.00    1
2 1.51761 13.89 3.60 1.36 72.73 0.48 7.83  0 0.00    1
3 1.51618 13.53 3.55 1.54 72.99 0.39 7.78  0 0.00    1
4 1.51766 13.21 3.69 1.29 72.61 0.57 8.22  0 0.00    1
5 1.51742 13.27 3.62 1.24 73.08 0.55 8.07  0 0.00    1
6 1.51596 12.79 3.61 1.62 72.97 0.64 8.07  0 0.26    1


(a)使用可视化展示预测变量分布以及预测变量间的关系。

画出各个预测变量的直方图:

par(mfrow=c(3,3))
myHist <- function(x) {
  hist(Glass[,x],xlab=x,main="直方图")
}
sapply(names(Glass[-10]), myHist)
par(mfrow=c(1,1))

画出各个变量的散点图: 

#pairs()函数可以创建基础的散点图矩阵
pairs(Glass)
#只对自变量做图
pairs(Glass[-10])

#scatterplotMatrix()函数默认在非对角线区域绘制变量间的散点图,并添加平滑和线性拟合曲线。对角线区域绘制每个变量的密度图和轴须图。
library(car)
scatterplotMatrix(Glass[-10],
                  spread=FALSE, smoother.args=list(lty=2),
                  main="Scatter Plot Matrix ")

可见 RI与Ga、Si呈较明显的线性关系

 求预测变量之间的相关性:

correlations<-cor(Glass[-10])#求相关性 默认为pearson
library(corrplot)#可视化
corrplot(correlations,order='hclust', tl.cex = 1.35)

 RI与Ga、RI与Si、Al与Mg、Mg与Ba的相关系数最大。

这预示着如果我们用线性回归模型建模,可能不能同时包含RI与Ga(0.81),因为在线性回归模型中,使用高度相关的变量可能会给出极不稳定的模型,以致数值计算的错误,以及弱化模型预测能力(p33)



(b)数据中是何存在离群值?有没有预测变量是有偏的?

画出箱线图

#箱线图 
par(mfrow=c(3,3))
myBoxplot <- function(x) {
  boxplot(Glass[,x],xlab=x,main="箱线图")
}
sapply(names(Glass[-10]), myBoxplot)
par(mfrow=c(1,1))

可见,除了Mg,都有离群点

参考:比上四分位数Q1小1.5∗IQR,比下四分位数Q3大1.5∗IQR都可视为离群点

IQR=Q3-Q1

计算偏态系数:

library(e1071)
ske<-apply(Glass[-10],2,skewness)#e1071 计算偏度
names(ske[ske>1]) #强烈有偏 #"RI" "K"  "Ca" "Ba" "Fe"
ske.ind<-which(ske>1)#索引

 

> ske
        RI         Na         Mg         Al         Si          K         Ca         Ba         Fe 
 1.6027151  0.4478343 -1.1364523  0.8946104 -0.7202392  6.4600889  2.0184463  3.3686800  1.7298107 

 因此,强烈有偏的为"RI" "K"  "Ca" "Ba" "Fe" 

注:上图来自于本人教授的课件。



(c)是否存在针对一个或多个预测变量的变换能够改进分类模型?

可单独对强烈有偏的"RI" "K"  "Ca" "Ba" "Fe" 进行box-cox变换,也可对数据集整体应用box-cox变换

#可单独对强烈有偏的"RI" "K" "Ca" "Ba" "Fe" 进行box-cox变换,也可对数据集整体应用box-cox变换
#本代码尝试仅对强烈有偏的"RI" "K" "Ca" "Ba" "Fe" 进行box-cox变换
summary(Glass) #Mg  K Ba Fe 有0值,不能直接用box-cox变换,需要添加一个常数,进行整体平移
#使用循环
Glass_trans<-Glass
for(i in 1:9){
  if(min(Glass[i])==0 & i %in% ske.ind) 
    Glass_trans[i]=Glass[i]+1.e-6 
}
apply(Glass_trans[-10],2,min)
#进行box-cox变换
library(caret) 
for(i in ske.ind){
 trans<-BoxCoxTrans(Glass_trans[,i])
 Glass_trans[,i] <- predict(trans, Glass_trans[,i])
}
head(Glass_trans)
apply(Glass_trans[-10],2,skewness)#e1071 计算偏度
apply(Glass[-10],2,skewness)#e1071 计算偏度
> head(Glass_trans)
         RI    Na       Mg   Al    Si          K        Ca        Ba        Fe Type
1 0.2838746 13.64 4.490001 1.10 71.78 -1.9000690 0.8254539 -625.4716 -13.81551    1
2 0.2829051 13.89 3.600001 1.36 72.73 -0.6587792 0.8145827 -625.4716 -13.81551    1
3 0.2824954 13.53 3.550001 1.54 72.99 -0.8202988 0.8139144 -625.4716 -13.81551    1
4 0.2829194 13.21 3.690001 1.29 72.61 -0.5172764 0.8195032 -625.4716 -13.81551    1
5 0.2828507 13.27 3.620001 1.24 73.08 -0.5472905 0.8176698 -625.4716 -13.81551    1
6 0.2824323 12.79 3.610001 1.62 72.97 -0.4176998 0.8176698 -625.4716  -1.34707    1
> apply(Glass_trans[-10],2,skewness)#e1071 计算偏度
        RI         Na         Mg         Al         Si          K         Ca         Ba         Fe 
 1.5656604  0.4478343 -1.1364523  0.8946104 -0.7202392 -0.7821621 -0.1939557  1.6756661  0.7442440 
> apply(Glass[-10],2,skewness)#e1071 计算偏度
        RI         Na         Mg         Al         Si          K         Ca         Ba         Fe 
 1.6027151  0.4478343 -1.1364523  0.8946104 -0.7202392  6.4600889  2.0184463  3.3686800  1.7298107 

可见,box-cox变化极大调整了k、Ca、Ba、Fe的偏度。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值