您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
Python大数据处理案例
 
   次浏览      
 2018-8-7
 
编辑推荐:
来源于cnblogs,介绍了利用决策树分类,利用随机森林预测, 利用对数进行fit,和exp函数还原等。

分享

知识要点:

lubridate包拆解时间 | POSIXlt

利用决策树分类,利用随机森林预测

利用对数进行fit,和exp函数还原

训练集来自Kaggle华盛顿自行车共享计划中的自行车租赁数据,分析共享自行车与天气、时间等关系。数据集共11个变量,10000多行数据。

https://www.kaggle.com/c/bike-sharing-demand

首先看一下官方给出的数据,一共两个表格,都是2011-2012年的数据,区别是Test文件是每个月的日期都是全的,但是没有注册用户和随意用户。而Train文件是每个月只有1-20天,但有两类用户的数量。

求解:补全Train文件里21-30号的用户数量。评价标准是预测与真实数量的比较。

1.png

首先加载文件和包

library (lubridate)
library (randomForest)
library (readr)
setwd ("E:")
data <-read_csv ("train.csv")
head (data)

这里我就遇到坑了,用r语言缺省的read.csv死活读不出来正确的文件格式,换成xlsx更惨,所有时间都变成43045这样的怪数字。本来之前试过as.Date可以正确转换,但这次因为有时分秒,就只能用时间戳,但结果也不行。

最后是下载了"readr"包,用read_csv语句,顺利解读。

因为test比train日期完整,但缺少用户数,所以要把train和test合并。

test$registered=0
test$casual=0
test$count=0
data<-rbind(train,test)

摘取时间:可以用时间戳,这里的时间比较简单,就是小时数,所以也可以直接截字符串。

data$hour1<-substr (data$datetime,12,13)
table(data$hour1)

统计一下每个小时的使用总数,是这样(为什么介么整齐):

6-hour1.png

接下来是运用箱线图,看一下使用者和时间,周几这些的关系。为什么用箱线图而不用hist直方图,因为箱线图有离散点表达,下面也因此运用对数求fit

从图中可以看出,在时间方面,注册用户和非注册用户的使用时间有很大不同。

5-hour-regestered.png

5-hour-casual.png

4-boxplot-day.png

接下来用相关系数cor检验用户,温度,体感温度,湿度,风速的关系。

相关系数:变量之间的线性关联度量,检验不同数据的相关程度。

取值范围[-1,1],越接近0越不相关。

从运算结果可以看出,使用人群与风速呈负相关,比温度影响还大。

cor.png

接下来就是将时间等因素用决策树分类,然后用随机森林来预测。随机森林和决策树的算法。听起来很高大上,其实现在也很常用了,所以一定要学会。

决策树模型是 一种简单易用的非参数分类器。它不需要对数据有任何的先验假设,计算速度较快,结果容易解释,而且稳健性强,不怕噪声数据和缺失数据。

决策树模型的基本计 算步骤如下:先从n个自变量中挑选一个,寻找最佳分割点,将数据划分为两组。针对分组后数据,将上述步骤重复下去,直到满足某种条件。

在决策树建模中需要解决的重要问题有三个:

如何选择自变量

如何选择分割点

确定停止划分的条件

做出注册用户和小时的决策树,

train$hour1<-as.integer(train$hour1)
d<-rpart (registered~hour1,data=train)
rpart .plot(d) >

3-raprt-hour1.png

然后就是根据决策树的结果手动分类,所以还满占代码的...

train$hour1 <-as.integer(train$hour1)
data$dp_reg=0
data$dp_reg[data$hour1 <7.5]=1
data$dp_reg[data$hour1> =22]=2
data$dp_reg[data$hour1 >=9.5 & data$hour1<18]=3
data$dp_reg[data$hour1> =7.5 & data$hour1<18]=4
data$dp_reg[data$hour1> =8.5 & data$hour1<18]=5
data$dp_reg[data$hour1> =20 & data$hour1<20]=6
data$dp_reg[data$hour1> =18 & data$hour1<20]=7

同理,做出 (小时 | 温度) X (注册 | 随意用户) 等决策树,继续手动分类....

3-raprt-temp.png

年份月份,周末假日等手动分类

data$year_part=0
data$month <-month(data$datatime)
data$year_part [data$year=='2011']=1
data$year_part [data$year=='2011' & data $month>3] = 2
data$year_part[data$year=='2011' & data $month>6] = 3
data$year_part[data$year=='2011' & data $month>9] = 4
data$day_type=""
data$day _type [data$holiday ==0 & data$workingday==0] ="weekend"
data$day_type[data$holiday==1] ="holiday"
data$day_type[data$holiday ==0 & data$workingday==1] ="working day"
data$weekend=0
data$weekend [data$day= ="Sunday"|data$day= =" Saturday "] =1

接下来用随机森林语句预测

在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。

随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,再在其中选取最优的特征。这样决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

ntree指定随机森林所包含的决策树数目,默认为500,通常在性能允许的情况下越大越好;

mtry指定节点中用于二叉树的变量个数,默认情况下数据集变量个数的二次方根(分类模型)或三分之一(预测模型)。一般是需要进行人为的逐次挑选,确定最佳的m值—摘自datacruiser笔记。这里我主要学习,所以虽然有10000多数据集,但也只定了500。就这500我的小电脑也跑了半天。

train<-data
set.seed (1234)
train$logreg <-log(train$registered+1)
test$logcas <-log(train$casual+1)
fit1 <-randomForest (logreg~hour1+ workingday + day + holiday + day_ type+ temp_reg+ humidity + atemp + windspeed + season+ weather+ dp_ reg+ weekend + year+year _part ,train ,importance = TRUE , ntree = 250)
pred1 <-predict (fit1,train)
train $logreg <-pred1

这里不知道怎么回事,我的day和day_part加进去就报错,只有删掉这两个变量计算,还要研究修补。

然后用exp函数还原

train$registered<-exp(train$logreg)-1
train$casual<-exp(train$logcas)-1
train$count<-test$casual+train$registered

最后把20日后的日期截出来,写入新的csv文件上传。

train2<-train[as.integer (day(data$datetime))> = 20 ,]
submit_final <-data.frame (datetime= test$ datetime ,count= test$count)
write.csv(submit _final,"submit_ final.csv ", row .names = F)
   
次浏览       
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试