基于R语言的Kaggle案例分析学习笔记(四)
房价预测
本案例的大纲:
1、介绍数据背景
2、缺失值处理
3、特征选择
4、代码示例
本案例的主要目的是缺失值处理和特征选择,而不是模型,所以大纲有所改变。
1、介绍数据背景。
根据与房子相关的属性数据,对房价进行预测。其相关属性数据如下:
英文指标 |
英文解释 |
中文解释 |
SalePrice |
the property's sale price in dollars. This is the target variable that you're trying to predict. |
该物业的售价以美元计。这是您想要预测的目标变量。 |
MSSubClass |
The building class |
建筑类 |
MSZoning |
The general zoning classification |
一般分区分类 |
LotFrontage |
Linear feet of street connected to property |
连接到财产的街道的线性脚 |
LotArea |
Lot size in square feet |
地块面积(平方英尺) |
Street |
Type of road access |
道路通行类型 |
Alley |
Type of alley access |
胡同通道的类型 |
LotShape |
General shape of property |
财产的一般形状 |
LandContour |
Flatness of the property |
物业的平整度 |
Utilities |
Type of utilities available |
可用的实用程序类型 |
LotConfig |
Lot configuration |
批量配置 |
LandSlope |
Slope of property |
财产的倾斜 |
Neighborhood |
Physical locations within Ames city limits |
Ames城市限制内的物理位置 |
Condition1 |
Proximity to main road or railroad |
靠近主干道或铁路 |
Condition2 |
Proximity to main road or railroad (if a second is present) |
靠近主要道路或铁路(如果存在第二个) |
BldgType |
Type of dwelling |
住宅类型 |
HouseStyle |
Style of dwelling |
住宅风格 |
OverallQual |
Overall material and finish quality |
总体材料和加工质量 |
OverallCond |
Overall condition rating |
总体状况的评价 |
YearBuilt |
Original construction date |
原始施工日期 |
YearRemodAdd |
Remodel date |
重构日期 |
RoofStyle |
Type of roof |
屋顶类型 |
RoofMatl |
Roof material |
屋顶材料 |
Exterior1st |
Exterior covering on house |
房屋外墙 |
Exterior2nd |
Exterior covering on house (if more than one material) |
房屋外墙(如果多于一种) |
MasVnrType |
Masonry veneer type |
Masonry贴面类型 |
MasVnrArea |
Masonry veneer area in square feet |
砖石面积平方英尺 |
ExterQual |
Exterior material quality |
外部材料质量 |
ExterCond |
Present condition of the material on the exterior |
外部材料的现状 |
Foundation |
Type of foundation |
基础类型 |
BsmtQual |
Height of the basement |
地下室的高度 |
BsmtCond |
General condition of the basement |
地下室的一般状况 |
BsmtExposure |
Walkout or garden level basement walls |
罢工或花园级地下室的墙壁 |
BsmtFinType1 |
Quality of basement finished area |
地下室成品面积质量 |
BsmtFinSF1 |
Type 1 finished square feet |
1型方形脚 |
BsmtFinType2 |
Quality of second finished area (if present) |
第二个完成区域的质量(如果存在) |
BsmtFinSF2 |
Type 2 finished square feet |
2型完成的平方英尺 |
BsmtUnfSF |
Unfinished square feet of basement area |
未完成的地下室面积 |
TotalBsmtSF |
Total square feet of basement area |
地下室面积的平方英尺 |
Heating |
Type of heating |
加热类型 |
HeatingQC |
Heating quality and condition |
供热质量和条件 |
CentralAir |
Central air conditioning |
*空调 |
Electrical |
Electrical system |
电气系统 |
1stFlrSF |
First Floor square feet |
一楼平方英尺 |
2ndFlrSF |
Second floor square feet |
二楼平方英尺 |
LowQualFinSF |
Low quality finished square feet (all floors) |
低质量成品平方英尺(所有楼层) |
GrLivArea |
Above grade (ground) living area square feet |
以上(地面)生活区平方英尺 |
BsmtFullBath |
Basement full bathrooms |
地下室完整的浴室 |
BsmtHalfBath |
Basement half bathrooms |
地下室半浴室 |
FullBath |
Full bathrooms above grade |
全年以上的浴室 |
HalfBath |
Half baths above grade |
半浴半高 |
Bedroom |
Number of bedrooms above basement level |
地下室数量 |
Kitchen |
Number of kitchens |
厨房数量 |
KitchenQual |
Kitchen quality |
厨房质量 |
TotRmsAbvGrd |
Total rooms above grade (does not include bathrooms) |
房间总数(不含浴室) |
Functional |
Home functionality rating |
家庭功能评级 |
Fireplaces |
Number of fireplaces |
壁炉数量 |
FireplaceQu |
Fireplace quality |
壁炉质量 |
GarageType |
Garage location |
车库位置 |
GarageYrBlt |
Year garage was built |
年建车库 |
GarageFinish |
Interior finish of the garage |
车库内部装修 |
GarageCars |
Size of garage in car capacity |
车库的车库容量 |
GarageArea |
Size of garage in square feet |
平方英尺车库大小 |
GarageQual |
Garage quality |
车库质量 |
GarageCond |
Garage condition |
车库条件 |
PavedDrive |
Paved driveway |
铺设的车道 |
WoodDeckSF |
Wood deck area in square feet |
木甲板面积平方英尺 |
OpenPorchSF |
Open porch area in square feet |
平方英尺开放门廊 |
EnclosedPorch |
Enclosed porch area in square feet |
封闭的门廊面积平方英尺 |
3SsnPorch |
Three season porch area in square feet |
三季门廊面积平方英尺 |
ScreenPorch |
Screen porch area in square feet |
屏幕门廊面积平方英尺 |
PoolArea |
Pool area in square feet |
游泳池面积平方英尺 |
PoolQC |
Pool quality |
游泳池质量 |
Fence |
Fence quality |
栅栏质量 |
MiscFeature |
Miscellaneous feature not covered in other categories |
其他类别未涉及的其他功能 |
MiscVal |
$Value of miscellaneous feature |
$杂项功能的值 |
MoSold |
Month Sold |
月销售 |
YrSold |
Year Sold |
年销售 |
SaleType |
Type of sale |
销售类型 |
SaleCondition |
Condition of sale |
销售条件 |
造成数据缺失的原因:
1)有些信息暂时无法获取。例如在医疗数据库中,并非所有病人的所有临床检验结果都能在给定的时间内得到,就致使一部分属性值空缺出来。又如在申请表数据中,对某些问题的反映依赖于对其他问题的回答。
2) 有些对象的某个或某些属性是不可用的。也就是说,对于这个对象来说,该属性值是不存在的,如一个未婚者的配偶姓名、一个儿童的固定收入状况等。
3)获取这些信息的代价太大、
4)系统实时性能要求较高,即要求得到这些信息前迅速做出判断或决策。(某地区下暴雨,飞行员要立即做出下降或不下降的决定,如果要得知降雨量、降雨时长来辅助飞行员做决定是不可行的,因为这些变量都是在飞行员做出决定之后才能了解到的。)
数据缺失机制:
1)完全随机缺失(Missing Completely at Random,MCAR)。数据的缺失与不完全变量以及完全变量都是无关的。(例如:问卷回答者的笔墨水不小心涂掉了选项,导致这个选项看不到,这就是完全随机的)
2)随机缺失(Missing at Random,MAR)。数据的缺失仅仅依赖于完全变量。(例如:让6-9岁的孩子回答收入问题属于随机缺失)
3)非随机、不可忽略缺失(Not Missing at Random,NMAR,or nonignorable)。不完全变量中数据的缺失依赖于不完全变量本身,这种缺失是不可忽略的。(例如:让填卷者选答题目,那么某些题目没有答造成的缺失,就是非随机缺失)
理解缺失值数据的来由和影响:
识别缺失数据的数目、分布和模式有两个目的:
(1)分析生成缺失数据的潜在机制;
(2)评价缺失数据对回答实质性问题的影响。即:
1)缺失数据的比例有多大?
2)缺失数据是否集中在少数几个变量上,抑或广泛存在?
3)缺失是随机产生的吗?
4)缺失数据间的相关性或与可观测数据间的相关性,是否可以表明产生缺失值的机制呢?
缺失值处理的策略:
若缺失数据集中在几个相对不太重要的变量上,则可以删除这些变量,然后再进行正常的数据分析;
若有一小部分数据随机分布在整个数据集中(MCAR),则可以分析数据完整的实例,这样仍可得到可靠有效的结果;
若以假定数据是MCAR或MAR,则可以应用多重插补法来获得有铲的结论。
若数据是NMAR,则需要借助专门的方法,收集新数据,或加入一个相对更容易、更有收益的行业。
R语言识别缺失值的函数:mice包中的md.pattern()函数可以生成一个以矩阵或数据框形式展示缺失值模式的表格,但这种方式不太直观。
VIM包中提供大量能可视化数据集中缺失值模式的函数:aggr()、matrixplot()、scattMiss(),matrixplot()函数可生成展示每个实例数据的图形,图形的形式比较直观。
以下本案例的缺失值可视化:
图1 aggr函数可视化图
图1中红色的表示缺失值,每一行是个案,每一列表示变量,可将红色格子较多即缺失值较多的列即变量删除,将红色格子较多即缺失值较多的行即个案删除,对于少数的缺失值可以用多重插补法进行插补。
图2 atrixplot函数展现缺失值
如图2所示,红色的表示缺失值,缺失值处理方法可参考图1.
R语言中缺失值处理的方法:
(1)多重插补法
多重插补(MI)是一种基于重复模拟的处理缺失值的方法。
MI从一个包含缺失值的数据集中生成一组完整的数据集。每个模拟数据集中,缺失数据将使用蒙特卡洛方法来填补。
可用到的包Amelia、mice和mi包
mice()函数首先从一个包含缺失数据的数据框开始,然后返回一个包含多个完整数据集的对象。每个完整数据集都是通过对原始数据框中的缺失数据进行插而生成的。
with()函数可依次对每个完整数据集应用统计模型
pool()函数将这些单独的分析结果整合为一组结果。
最终模型的标准误和p值都将准确地反映出由于缺失值和多重插补而产生的不确定性。
(2)删除有空值的行
函数complete.cases()、na.omit()可用来存储没有缺失值的数据框或矩阵形式的实例
3、特征选择
caret包是R语言比较方便的进行特征选择的包。
降维:删除的变量是常数自变量,或者是方差极小的自变量,对应的函数是nearZeroVar。
强相关、多重共线性:删除的是与其它自变量有很强相关性的变量,对应的命令是findcorrelation。自变量中还有可能存在多重共线性问题,可以用findLinearCombos命令将它们找出来。
特征选择:后向选择,即先将所有的变量都包括在模型中,然后计算其效能(如误差、预测精度)和变量重要排序,然后保留最重要的若干变量,再次计算效能,这样反复迭代,找出合适的自变量数目。这种算法的一个缺点在于可能会存在过度拟合,所以需要在此算法外再套上一个样本划分的循环。用rfe可以完成这项任务。
4、代码示例
房价预测数据下载地址:https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data
train<-read.csv('D:\\R语言kaggle案例实战\\Kaggle第四课\\train.csv')
#识别缺失值
library(mice)
md.pattern(train)#以列表的形式展示缺失值,1表示非缺失,0表示缺失。
library(VIM)
aggr(train,combined=T)#以可视化的形式展示缺失值
matrixplot(train)#以可视化的形式展示缺失值
data(sleep,package = 'VIM')#利用VIM包自带的数据sleep
aggr(sleep,combined=T)#可视化形式展现sleep数据的缺失值
str(sleep)#查看sleep的列名、数据量、数据类型
data<-mice(sleep,m=5,method = 'pmm',maxit = 100,seed = 1)#对sleep进行多重插补,m=5表示差补次数,产生5个完整的数据集,seed是一个随机数种子,意思是给每次随机生成的数据一个编号,下次再运行这个编号的时候,重新生成的数据和上一次一样,使得随机结果具有可重复性。
summary(data)
data$imp$Dream#插补结果
data_final<-complete(data)#这是另外一种缺失值处理方法,对于缺失值较少,complete方法直接保留完整数据,剔除缺失数据
aggr(data_final,combined=T)#可视化展示complete处理后的数据的是否缺失。
model<-with(data,lm(Dream~Sleep+Gest))#通过模型来观测新插补的数据列是否有显著的统计学意义
pooled<-pool(model)#将5组插补结果根据以上统计学显著性,合并为一组。
summary(pooled)
#特征选择
library(caret)
table(is.na(mdrrDescr))#
data(mdrr)#利用R自带的mdrr数据集
head(mdrrDescr)
head(mdrrClass)
down_mdrr<-nearZeroVar(mdrrDescr)#查看方差较小的变量
new1<-mdrrDescr[,-down_mdrr]#删除上面判断出来的方差较小变量
hight_cor<-findCorrelation(cor(new1),0.9)#查看强共线性数据
new2<-new1[,-hight_cor]#删除强共线性变量
info<-findLinearCombos(new2)#查看多重共线性情况
#以下通过模型如随机 森林进行特征选择
subset<-c(20,30,40,50,60,70,80)#定义一个子集,每个数值表示变量个数,用于以下rfe模型判断不同变量个数下,模型的准确性。
ctrl<-rfeControl(functions=rfFuncs,method="cv",verbose=F,returnResamp="final")#method表示检验方式,这里是交叉检验,functions表示模型类型,这里使用随机森林。
profile<-rfe(new2,mdrrClass,sizes = subset,rfeControl = ctrl)#进行特征选择
plot(profile)#图形的形式查看多个变量的模型效果最好
profile$optVariables
print(profile)#查看本次特征选择保留下来的变量
关于特征选择及caret包实现的特征选择的一些资料:
http://blog.csdn.net/jiabiao1602/article/details/44975741
http://mt.sohu.com/20161220/n476445229.shtml
关于mice包:
http://blog.csdn.net/sinat_26917383/article/details/51265213
http://blog.csdn.net/carlwu/article/details/54020506