基于R语言的Kaggle案例分析学习笔记(四)
来源:互联网 发布:mac 大容量网盘 编辑:程序博客网 时间:2024/06/10 16:52
房价预测
本案例的大纲:
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
销售条件
2、缺失值的处理造成数据缺失的原因:
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包自带的数据sleepaggr(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$optVariablesprint(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
- 基于R语言的Kaggle案例分析学习笔记(四)
- 基于R语言的Kaggle案例分析学习笔记(一)
- 基于R语言的Kaggle案例分析学习笔记(二)
- 基于R语言的Kaggle案例分析学习笔记(三)
- 基于R语言的Kaggle案例分析学习笔记(五)
- 基于R语言的Kaggle案例分析学习笔记(六)
- 基于R语言的Kaggle案例分析学习笔记(七)
- 基于R语言的Kaggle案例分析学习笔记(八)
- 基于R语言的Kaggle案例分析学习笔记(九)
- 基于Python的Kaggle案例分析(一)
- R语言学习笔记(四)
- R语言学习笔记(四)
- R语言学习笔记(四)
- 机器学习实验(二):kaggle保险索赔案例分析
- 《R语言经典示例》学习笔记(四)
- R语言笔记四
- 92、R语言分析案例
- R语言与回归分析学习笔记(bootstrap method)
- 使用安卓小部件显示列表清单的杀手锏(二)
- 二叉搜索树(BST)的两个元素被错误地交换。 恢复树,而不改变它的结构。
- Rhyme/Java 泛型<T>很详细教程
- redis 流量异常问题处理
- Java 内部类
- 基于R语言的Kaggle案例分析学习笔记(四)
- 快速排序
- dpdk的问题
- 学习flask-mail 利用Gmail出错的总结
- 深入Java字符串
- linux学习笔记之实用vi命令(容易上手)
- 连续第三天总结
- ConcurrentHashMap总结
- JVM 中的永久代