Author:杜七
一、数据挖掘
大数据很热,就像春节的爆竹声,从除夕早晨就响个不停,一直维持到零点的新年钟声响起。
数据挖掘的步骤,简单汇总如下:
- 熟悉业务,搞清楚要解决的业务问题
- 定义业务问题的变量,提取所需的数据
- 导入数据,并对数据做清理
- 选择模型,建立模型
- 评估模型
- 解决业务问题
二、数据挖掘与R
数据挖掘领域,R语言目前也支持很多,比如Weka是一个非常不错的挖掘包。目前RWeka提供了一个R and Weka的接口,我们可以通过RWeka来做数据挖掘,但是RWeka需要自己coding,对于有些不熟悉R的同学可能有点难度。除此之外,Rattle也是一个不错的选择。Rattle是一个用于数据挖掘的R的图形交互界面(GUI),可用于快捷的处理常见的数据挖掘问题。从数据的整理到模型的评价,Rattle给出了完整的解决方案。
三、Rattle
1,Rattle优势
Rattle的最大优势在于提供一个图形交互界面,使用者就算不熟悉R的很多语法,也可以通过load data,Explore,Model,Test来完成整个数据挖掘的工作,不再纠结与load data (read.table(file,header = TRUE)),summary(data),Logistic or rpart等等coding。另外,Rattle有一个Log 记录,任何在Rattle操作的行为所对应的R Code都很明确的一步一步记录下来。 所以,如果想学习R的命令和函数,可以一边用Rattle来做挖掘,一边通过Log来学习。
2,Rattle常用的操作
1) 导入数据
这个部分,通过GUI来导入数据,即界面中的Tab-Data,否则只能通过read.table等等实现。这部分函数,通过Log就可以很清楚的看到对应的R code。比如,导入Weather dataset,Log中就会提示:
crs$dataset <- read.csv(system.file("csv", "weather.csv", package="rattle"), encoding="UTF-8") set.seed(crv$seed) crs$nobs <- nrow(crs$dataset) # 366 observations crs$sample <- crs$train <- sample(nrow(crs$dataset), 0.7*crs$nobs) # 256 observations crs$validate <- sample(setdiff(seq_len(nrow(crs$dataset)), crs$train), 0.15*crs$nobs) # 54 observations crs$test <- setdiff(setdiff(seq_len(nrow(crs$dataset)), crs$train), crs$validate) # 56 observations
2) 研究数据
在Rattle中,有专门的模块来完成数据的研究——Explore。在这个里面可以完成summary,Distributions,Correlation,Principal components,and Interactive。 同时,对应的data plot也会自动完成,比如,我们想看Rainy days的分布,我们可以通过"Explore"——Distributions" - "Categoric"(choose "RainyToday") —— "Excute",然后图形就完成了。
当然,在Log里面可以很清楚看到对应的命令和函数,如下:
ds <- rbind(summary(na.omit(crs$dataset[crs$sample,]$RainToday)), summary(na.omit(crs$dataset[crs$sample,][crs$dataset[crs$sample,]$RainTomorrow=="No",]$RainToday)), summary(na.omit(crs$dataset[crs$sample,][crs$dataset[crs$sample,]$RainTomorrow=="Yes",]$RainToday))) ord <- order(ds[1,], decreasing=TRUE) bp <- barplot2(ds[,ord], beside=TRUE, ylab="Frequency", xlab="RainToday", ylim=c(0, 254), col=rainbow_hcl(3)) text(bp, ds[,ord]+8, ds[,ord]) legend("topright", bty="n", c("All","No","Yes"), fill=rainbow_hcl(3)) title(main="Distribution of RainToday (sample) by RainTomorrow", sub=paste("Rattle", format(Sys.time(), "%Y-%b-%d %H:%M:%S"), Sys.info()["user"]))
3)建模
类似于explore data,Rattle也提供了建模的模块,请看"Model"。
在这里,已经有“Tree”,“Forest”,“Boost”,“SVM",“linear”,”Neural Net”等模型可以选择,具体大家可以参考Rattle的PDF。
具体的应用也很简单,比如我想对Rainyday做一个分析,想知道满足什么条件会是一个Rainyday,如何来做呢?
很简单,首先,Data里面选择需要的变量,然后在Model里面选择“tree”,然后再“执行”,分类数模型就搞定了!!是不是很赞?
`Summary of the Decision Tree model for XXXX (built using 'rpart'):
n= 256
node), split, n, loss, yval, (yprob)
* denotes terminal node
- root 256 41 No (0.83984375 0.16015625)
- Pressure3pm>=1011.9 204 16 No (0.92156863 0.07843137)
- Cloud3pm< 7.5 195 10 No (0.94871795 0.05128205) *
- Cloud3pm>=7.5 9 3 Yes (0.33333333 0.66666667) *
- Pressure3pm< 1011.9 52 25 No (0.51923077 0.48076923)
- Sunshine>=8.85 25 5 No (0.80000000 0.20000000) *
- Sunshine< 8.85 27 7 Yes (0.25925926 0.74074074) * `
当然,过程简单了,但是如何做分类树模型,了解分类树模型的细节也是必要的,否则怎么知道选择模型的结果和意义呢?
4)模型评估
建模固然重要,最重要的还是建模之后的模型评估,比如检验是否通过,这对于模型的正确与否,应用与否必不可少。一个检验不通过,即不正确的模型有什么意义呢?
模型的检验,也需要我们了解检验啥,如何检验?F-Test,T-test都代表啥,如何模型就是通过?大家在实际应用中,肯定会关注p-value,看p-value是否经过检验。
这个部分不多少了,不是本次的重点。
更多的内容,大家看“Test”和“Evaluate”的模块内容。
5)模型应用
模型建立并通过检验以后,即可以在业务问题中应用。
具体的应用,要看模型和业务问题具体分析。比如分类树,我们就可以根据分类树的优先级来合理安排哪些客户是我们首先要去维护的,哪些是需要后面再去维护等等;如果是logistic模型,我们就可以根据变量来预测应变量。
先写到这里,后面更多使用以后再来补充和细化。今天2014年大年初一,大家新年快乐,马上有所有!