Author:杜七
一、數(shù)據(jù)挖掘
大數(shù)據(jù)很熱尸折,就像春節(jié)的爆竹聲,從除夕早晨就響個不停殷蛇,一直維持到零點的新年鐘聲響起实夹。
數(shù)據(jù)挖掘的步驟,簡單匯總?cè)缦拢?/p>
- 熟悉業(yè)務(wù)粒梦,搞清楚要解決的業(yè)務(wù)問題
- 定義業(yè)務(wù)問題的變量亮航,提取所需的數(shù)據(jù)
- 導(dǎo)入數(shù)據(jù),并對數(shù)據(jù)做清理
- 選擇模型谍倦,建立模型
- 評估模型
- 解決業(yè)務(wù)問題
二塞赂、數(shù)據(jù)挖掘與R
數(shù)據(jù)挖掘領(lǐng)域,R語言目前也支持很多昼蛀,比如Weka是一個非常不錯的挖掘包宴猾。目前RWeka提供了一個R and Weka的接口,我們可以通過RWeka來做數(shù)據(jù)挖掘叼旋,但是RWeka需要自己coding仇哆,對于有些不熟悉R的同學(xué)可能有點難度。除此之外夫植,Rattle也是一個不錯的選擇讹剔。Rattle是一個用于數(shù)據(jù)挖掘的R的圖形交互界面(GUI),可用于快捷的處理常見的數(shù)據(jù)挖掘問題详民。從數(shù)據(jù)的整理到模型的評價延欠,Rattle給出了完整的解決方案。
三沈跨、Rattle
1由捎,Rattle優(yōu)勢
Rattle的最大優(yōu)勢在于提供一個圖形交互界面,使用者就算不熟悉R的很多語法饿凛,也可以通過load data,Explore,Model,Test來完成整個數(shù)據(jù)挖掘的工作狞玛,不再糾結(jié)與load data (read.table(file,header = TRUE)),summary(data),Logistic or rpart等等coding。另外涧窒,Rattle有一個Log 記錄心肪,任何在Rattle操作的行為所對應(yīng)的R Code都很明確的一步一步記錄下來。 所以纠吴,如果想學(xué)習(xí)R的命令和函數(shù)硬鞍,可以一邊用Rattle來做挖掘,一邊通過Log來學(xué)習(xí)。
2固该,Rattle常用的操作
1) 導(dǎo)入數(shù)據(jù)
這個部分碑隆,通過GUI來導(dǎo)入數(shù)據(jù),即界面中的Tab-Data蹬音,否則只能通過read.table等等實現(xiàn)。這部分函數(shù)休玩,通過Log就可以很清楚的看到對應(yīng)的R code著淆。比如,導(dǎo)入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) 研究數(shù)據(jù)
在Rattle中永部,有專門的模塊來完成數(shù)據(jù)的研究——Explore。在這個里面可以完成summary,Distributions,Correlation,Principal components,and Interactive呐矾。 同時苔埋,對應(yīng)的data plot也會自動完成,比如蜒犯,我們想看Rainy days的分布组橄,我們可以通過"Explore"——Distributions" - "Categoric"(choose "RainyToday") —— "Excute",然后圖形就完成了。
當(dāng)然罚随,在Log里面可以很清楚看到對應(yīng)的命令和函數(shù)玉工,如下:
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"遵班。
在這里,已經(jīng)有“Tree”潮改,“Forest”狭郑,“Boost”,“SVM",“l(fā)inear”汇在,”Neural Net”等模型可以選擇翰萨,具體大家可以參考Rattle的PDF。
具體的應(yīng)用也很簡單趾疚,比如我想對Rainyday做一個分析缨历,想知道滿足什么條件會是一個Rainyday,如何來做呢糙麦?
很簡單辛孵,首先,Data里面選擇需要的變量赡磅,然后在Model里面選擇“tree”魄缚,然后再“執(zhí)行”,分類數(shù)模型就搞定了!冶匹!是不是很贊习劫?
`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) * `
當(dāng)然,過程簡單了嚼隘,但是如何做分類樹模型诽里,了解分類樹模型的細節(jié)也是必要的,否則怎么知道選擇模型的結(jié)果和意義呢飞蛹?
4)模型評估
建模固然重要谤狡,最重要的還是建模之后的模型評估,比如檢驗是否通過卧檐,這對于模型的正確與否墓懂,應(yīng)用與否必不可少。一個檢驗不通過霉囚,即不正確的模型有什么意義呢捕仔?
模型的檢驗,也需要我們了解檢驗啥盈罐,如何檢驗榜跌?F-Test,T-test都代表啥暖呕,如何模型就是通過斜做?大家在實際應(yīng)用中,肯定會關(guān)注p-value湾揽,看p-value是否經(jīng)過檢驗瓤逼。
這個部分不多少了,不是本次的重點库物。
更多的內(nèi)容霸旗,大家看“Test”和“Evaluate”的模塊內(nèi)容。
5)模型應(yīng)用
模型建立并通過檢驗以后戚揭,即可以在業(yè)務(wù)問題中應(yīng)用诱告。
具體的應(yīng)用,要看模型和業(yè)務(wù)問題具體分析民晒。比如分類樹精居,我們就可以根據(jù)分類樹的優(yōu)先級來合理安排哪些客戶是我們首先要去維護的,哪些是需要后面再去維護等等潜必;如果是logistic模型靴姿,我們就可以根據(jù)變量來預(yù)測應(yīng)變量。
先寫到這里磁滚,后面更多使用以后再來補充和細化佛吓。今天2014年大年初一宵晚,大家新年快樂,馬上有所有维雇!