數(shù)據(jù)挖掘算法的R語言實現(xiàn)

前言

學習數(shù)據(jù)挖掘已經(jīng)有一段時間了糕再,相關的文章和書也看了一些送悔,感覺學習這個的關鍵還是離不開其中形形色色的算法荒适。作為一個初學者梨熙,我們也不奢求創(chuàng)新改進個算法。先從基礎做起刀诬,學會各個基礎算法的思想與實現(xiàn)咽扇。學習算法的過程是十分枯燥的,但是如果學習的過程能夠?qū)嵺`陕壹,例如使用R語言實踐一下质欲,將一堆頭痛眼花的數(shù)據(jù)轉(zhuǎn)化成一張炫酷的圖,這無疑是十分有成就感的糠馆。所以把敞,我就最近學習的資料,整理了一些算法與R語言的實現(xiàn)方法分享一下榨惠。由于篇幅的問題,后面提到的函數(shù)我都沒有詳細介紹了盛霎,想了解的可以使用>?函數(shù)名>??函數(shù)名查看赠橙。

分類

1、KNN算法

K——最臨近方法(k Nearest Neighbors愤炸,簡稱KNN)是實際運用中經(jīng)常被采用的一種基于距離的分類算法期揪。

基本思想:
假定每個類包含多個訓練數(shù)據(jù),且每個訓練數(shù)據(jù)都有一個唯一的類別標記规个,計算每個訓練數(shù)據(jù)到待分類元組的距離凤薛,取和待分類元組距離最近的k個訓練數(shù)據(jù),k個數(shù)據(jù)中哪個類別的訓練數(shù)據(jù)占多數(shù)诞仓,則待分類元組就屬于哪個類別缤苫。

主要函數(shù):

knn()

加載R中的class庫:

>library(class)

實例:

>data(iris3)
#選取前30個數(shù)據(jù)作為訓練數(shù)據(jù)
>train<-rbind(iris[1:30,,1],iris[1:30,,2],iris[1:30,,3])
#剩下的作為測試數(shù)據(jù)
>test<-rbind(iris[31:50,,1],iris[31:50,,2],iris[31:50,,3])
>c1<-factor(c(rep("s",30),rep("c",30),rep("v",30)))
#進行KNN算法分類
>knn(train,test,c1,k=3,prob=TRUE)
>attributes(.Last.value)

2、決策樹算法(C4,5)

主要函數(shù):

J48()

準備工作:

>install.packages('rJava')
>install.packages('party')
>install.packages('RWeka')
>install.packages('partykit')
>library(RWeka)
>library(party)

實例:

>oldpar=par(mar=c(3,3,1.5,1),mgp=c(1.5,0.5,0),cex=0.3)
>data(iris)
>m1<-J48(Species~.,data=iris)
>m1
>table(iris$Species,predict(m1))
>write_to_dot(m1)
>if(require("party",quietly=TRUE)) plot(m1)

生成樹如下:


C4,5生成的決策樹

3墅拭、CART算法

CART(Classification and Regression Tree活玲,分類與回歸樹)。
主要函數(shù):

tree()

準備工作:

>install.packages('tree')
>library(tree)

實例:

#設置窗口參數(shù)
>oldpar=par(mar=c(3,3,1.5,1),mgp=c(1.5,0.5,0),cex=0.7)
>data(iris)
#對品種進行CART分類
>ir.tr=tree(Species~.,iris)
>summary(ir.tr)
#畫決策樹圖
>plot(ir.tr):text(ir.tr)

生成樹如下:


CART生成的決策樹

4、BP神經(jīng)網(wǎng)絡算法

主要函數(shù):

nnet()

準備工作:

>install.packages('nnet')
>library(nnet)

實例:

>data(iris3)
>ir<-rbind(iris3[,,1],iris3[,,2],iris3[,,3])
>targets<-class.ind(c(rep("s",50),rep("c",50),rep("v",50)))
#抽取25個樣本
>samp<-c(sample(1:50,25),sample(51:100,25),sample(101:150,25))
>ir1<-nnet(ir[samp,],targets[samp,],size=2,rang=0.1,decay=5e-4,maxit=200)
>test.c1<-function(true,pred){
true<-max.col(true)
cres<-max.col(pred)
table(true,cres)
}
#對樣本以外的數(shù)據(jù)的測試
>test.c1(targets[-samp,],predict(ir1,ir[-samp,]))

聚類

1舒憾、K-means算法

K-means算法是典型的基于距離的聚類算法镀钓,采用距離作為相似性的評價指標,即認為兩個對象的距離越近镀迂,其相似度就越大丁溅。

主要函數(shù):

kmeans()

實例:

#隨機生成樣本數(shù)據(jù)
>x<-rbind(matrix(rnorm(10000,sd=0.3),ncol=10),matrix(rnorm(10000,mean=1,sd=0.3),ncol=10))
>colnames(x)<-c("x1","x2","x3","x4","x5","x6","x7","x8","x9","x10")
#調(diào)用K-means算法
>c1<-Kmeans(x,2)
>pch1=rep("1",1000)
>pch2=rep("2",1000)
>plot(x,col=c1$cluster,pch=c(pch1,pch2))
>points(c1$centers,col=3,pch="*",cex=3)

2、PAM算法

PAM(Partitioning around Medoid探遵,圍繞中心點的劃分)是最早提出的k-medoids算法之一窟赏。它試圖對n個對象給出k個劃分。最初隨機選擇k個中心點后别凤,該算法反復地試圖找出更好的中心點饰序。

主要函數(shù):

pam()

準備工作:

>library(cluster)

實例:

>pamx=pam(x,2)
>summary(pamx)
>plot(pamx,main="pam效果圖") #數(shù)據(jù)集同上

3、Clara算法

主要思想:不考慮整個數(shù)據(jù)集合规哪,選擇實際數(shù)據(jù)的一小部分作為數(shù)據(jù)的樣本求豫,然后用PAM方法從樣本中選擇中心點。如果樣本是以隨機形式選取的诉稍,它應當足以代表原來的數(shù)據(jù)集合蝠嘉。從中選出的代表對象(中心點)很可能與從整個數(shù)據(jù)集合中選出的非常近似Clara抽取數(shù)據(jù)集合的多個樣本,對每個樣本應用PAM算法杯巨,返回最好的聚類結果作為輸出蚤告。

主要函數(shù):

clara()

準備工作:

>library(cluster)

實例:

>clarax=clara(x,2)
>clarax
>clarax$clusinfo
>plot(clarax,main="clara圖") #數(shù)據(jù)集同上

層次聚類

1、AGNES算法與DIANA算法

AGNES(Agglomerative Nesting)算法是凝聚的層次聚類方法服爷。最初將每個對象作為一個簇杜恰,然后這些簇根據(jù)某些準則一步步地合并,直到所有的對象最終合并到一個簇中或某個終結條件被滿足仍源。
DIANA(Divisive ANAlysis)算法是分裂的層次聚類方法心褐。采用自頂向下的策略,它首先將所有對象置于一個簇中笼踩,然后逐漸細分為越來越小的簇逗爹,直到每個對象自成一簇或某個終結條件被滿足。

主要函數(shù):

agnes()嚎于、diana()

準備工作:

>library(cluster)

實例:
AGNES和DIANA算法的比較

#將圖形顯示區(qū)劃為兩部分
>par(mfrow=c(1,2))
>data(flower)
>dai.f=daisy(flower,type=list(asymm=3,ordratio=7))
>agn.f=agnes(dai.f,method="ward")
>plot(agn.f,which.plot=2,cex=0.7,yaxt="n",main="agnes算法的聚類圖")
>dia.f=diana(dai.f) #注意這里dia.f與dai.f不同
>plot(dia.f,which.plot=2,main="diana算法的聚類圖")

結果圖如下:


agnes與diana算法的比較(這個圖畫的有點丑掘而,大家可以自己試下。于购。袍睡。)

基于密度聚類

主要思想:只要臨近區(qū)域的密度(對象或數(shù)據(jù)點的數(shù)目)超過某個閥值,就繼續(xù)聚類肋僧。

優(yōu)點:可以過濾“噪聲”孤立點數(shù)據(jù)女蜈,發(fā)現(xiàn)任意形狀的簇持舆。

1、DBSCAN算法

DBSCAN(Density-Based Spatial Clustering of Application with Noise)是一個有代表性的基于密度的方法伪窖,它根據(jù)一個密度閥值來控制簇的增長逸寓。

主要函數(shù):

DBSCAN()
準備工作:
>library(cluster)
實例:
>dflower<-daisy(flower,type=list(asymm=c("V1","V3"),symm=2,norminal=4,ordinal=c(5,6),ordratio=7,logratio=8))
>DBF=DBSCAN(dflower,eps=0.65,MinPts=5,distances=T)
>DBF

基于模型聚類

1、COBWEB算法

COBWEB是一種流行的簡增量概念聚類算法覆山。它以一個分類樹的形式創(chuàng)建層次聚類竹伸,每個節(jié)點對應一個概念,包含該概念的一個概率描述簇宽,概述被分在該節(jié)點下的對象勋篓。

主要函數(shù):

Cobweb()

準備工作:

>install.packages('RWeka')
>library(RWeka)

實例:

>com=rbind(cbind(rnorm(20,0,0.5),rnorm(20,0,0.5)),cbind(rnorm(30,5,0.5),rnorm(30,5,0.5)))
>clas=factor(rep(2:1,c(20,30)))
>dcom=data.frame(com,clas)
>c1<-Cobweb(dcom)
>c1
>c1$class_ids
>table(predict(c1),dcom$clas)

模糊聚類

1、FCM算法

FCM(Fuzzy C-Means)算法是一個模糊聚類算法魏割,不同于硬劃分譬嚣,模糊聚類方法是一個軟劃分。對于模糊集來說钞它,一個數(shù)據(jù)點都是以一定程度屬于某個類拜银,也可以同時以不周的程度屬于幾個類。

主要函數(shù):

fanny()

準備工作:

>library(cluster)

實例:

>z=rbind(cbind(rnorm(100,0,0.5),rnorm(100,0,0.5)),cbind(rnorm(150,5,0.5),rnorm(150,5,0.5),cbind(rnorm(300,3.2,0.5),rnorm(300,3.2,0.5))))
>z
>fannyz=fanny(z,3,metric="SqEuclidean")
>summary(fannyz)
>plot(fannyz,main="模糊算法聚類圖")

參考文獻
方匡南. 基于數(shù)據(jù)挖掘的分類和聚類算法研究及R語言實現(xiàn)[D]. 暨南大學, 2007.

我的博客(建設中=遭垛。=)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尼桶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锯仪,更是在濱河造成了極大的恐慌泵督,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庶喜,死亡現(xiàn)場離奇詭異小腊,居然都是意外死亡,警方通過查閱死者的電腦和手機久窟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門秩冈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘸羡,你說我怎么就攤上這事〈瓴纾” “怎么了犹赖?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長卷仑。 經(jīng)常有香客問我峻村,道長,這世上最難降的妖魔是什么锡凝? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任粘昨,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘张肾。我一直安慰自己芭析,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布吞瞪。 她就那樣靜靜地躺著馁启,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芍秆。 梳的紋絲不亂的頭發(fā)上惯疙,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音妖啥,去河邊找鬼霉颠。 笑死,一個胖子當著我的面吹牛荆虱,可吹牛的內(nèi)容都是我干的蒿偎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼克伊,長吁一口氣:“原來是場噩夢啊……” “哼酥郭!你這毒婦竟也來了?” 一聲冷哼從身側響起愿吹,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤不从,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后犁跪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椿息,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年坷衍,在試婚紗的時候發(fā)現(xiàn)自己被綠了寝优。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡枫耳,死狀恐怖乏矾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迁杨,我是刑警寧澤钻心,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站铅协,受9級特大地震影響捷沸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狐史,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一痒给、第九天 我趴在偏房一處隱蔽的房頂上張望说墨。 院中可真熱鬧,春花似錦苍柏、人聲如沸尼斧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽突颊。三九已至,卻和暖如春潘悼,著一層夾襖步出監(jiān)牢的瞬間律秃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工治唤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棒动,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓宾添,卻偏偏與公主長得像船惨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缕陕,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容