欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于R语言的Kaggle案例分析学习笔记(四)

程序员文章站 2022-04-10 20:58:34
...

房价预测

本案例的大纲:

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),则可以分析数据完整的实例,这样仍可得到可靠有效的结果;

若以假定数据是MCARMAR,则可以应用多重插补法来获得有铲的结论。

若数据是NMAR,则需要借助专门的方法,收集新数据,或加入一个相对更容易、更有收益的行业。

R语言识别缺失值的函数:

mice包中的md.pattern()函数可以生成一个以矩阵或数据框形式展示缺失值模式的表格,但这种方式不太直观。

VIM包中提供大量能可视化数据集中缺失值模式的函数:aggr()、matrixplot()、scattMiss(),matrixplot()函数可生成展示每个实例数据的图形,图形的形式比较直观。

以下本案例的缺失值可视化:

基于R语言的Kaggle案例分析学习笔记(四)

                                                                                                                                      图1 aggr函数可视化图

          图1中红色的表示缺失值,每一行是个案,每一列表示变量,可将红色格子较多即缺失值较多的列即变量删除,将红色格子较多即缺失值较多的行即个案删除,对于少数的缺失值可以用多重插补法进行插补。

基于R语言的Kaggle案例分析学习笔记(四)

                                                                                             图2  atrixplot函数展现缺失值

         如图2所示,红色的表示缺失值,缺失值处理方法可参考图1.

R语言中缺失值处理的方法:

(1)多重插补法

多重插补(MI)是一种基于重复模拟的处理缺失值的方法。

MI从一个包含缺失值的数据集中生成一组完整的数据集。每个模拟数据集中,缺失数据将使用蒙特卡洛方法来填补。

可用到的包Ameliamicemi

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