基于R語(yǔ)言的分類豌习、聚類研究

1 分類

1.1 決策樹分類

library(party) 
set.seed(2)
data(iris)
#隨機(jī)抽取訓(xùn)練集和測(cè)試集
index<-sample(1:nrow(iris),100)
train<-iris[index,]
test<-iris[-index,]
#建立C4.5決策樹模型
ctree.model <- ctree(Species ~ ., data <- train)  
#輸出決策樹圖
plot(ctree.model, type <- "simple")  
決策樹
#預(yù)測(cè)結(jié)果
train_predict <- predict(ctree.model)  # 訓(xùn)練數(shù)據(jù)集
test_predict <- predict(ctree.model, newdata <- test)  # 測(cè)試數(shù)據(jù)集
#輸出訓(xùn)練數(shù)據(jù)的分類結(jié)果和混淆矩陣
train_predictdata <- cbind(train, predictedclass=train_predict) 
train_confusion <- table(actual <- train$Species, predictedclass <- train_predict)
#判對(duì)率
sum(diag(prop.table(train_confusion)))
#[1] 0.96
#輸出測(cè)試數(shù)據(jù)的分類結(jié)果和混淆矩陣
test_predictdata <- cbind(test, predictedclass=test_predict)
test_confusion <- table(actual <- test$Species, predictedclass <- test_predict)
#判對(duì)率
sum(diag(prop.table(test_confusion)))
#[1] 0.96

1.2 神經(jīng)網(wǎng)絡(luò)分類

library(nnet)
data("iris")
set.seed(2)
#抽取訓(xùn)練集和測(cè)試集
ind = sample(2,nrow(iris),replace = TRUE,prob = c(0.7,0.3))
trainset = iris[ind == 1,]
testset = iris[ind == 2,]
#預(yù)測(cè)結(jié)果
iris.nn = nnet(Species ~ .,data = trainset,size = 2,rang = 0.1,decay = 5e-4,maxit = 200)
summary(iris.nn)
#輸出測(cè)試數(shù)據(jù)的分類結(jié)果和混淆矩陣
iris.predict = predict(iris.nn,testset,type = "class")
nn.table = table(testset$Species,iris.predict)
#判對(duì)率
sum(diag(prop.table(nn.table)))
#[1] 0.9347826

1.3 貝葉斯分類

data("iris")
set.seed(123) #設(shè)置隨機(jī)種子
#抽取訓(xùn)練集和測(cè)試集
ind = sample(2,nrow(iris),replace = TRUE,prob = c(0.7,0.3))
traindata = iris[ind == 1,]
testdata = iris[ind == 2,]
# 使用naiveBayes函數(shù)建立樸素貝葉斯分類模型
library(e1071)  # 加載e1071包
naiveBayes.model <- naiveBayes(Species ~ ., data = traindata)  # 建立樸素貝葉斯分類模型
# 預(yù)測(cè)結(jié)果
train_predict <- predict(naiveBayes.model, newdata = traindata)  # 訓(xùn)練數(shù)據(jù)集
test_predict <- predict(naiveBayes.model, newdata = testdata)  # 測(cè)試數(shù)據(jù)集
# 輸出訓(xùn)練數(shù)據(jù)的分類結(jié)果和混淆矩陣
train_predictdata <- cbind(traindata, predictedclass = train_predict) 
train_confusion <- table(actual = traindata$Species, predictedclass = train_predict)
#判對(duì)率
sum(diag(prop.table(train_confusion)))
#[1] 0.9811321
# 輸出測(cè)試數(shù)據(jù)的分類結(jié)果和混淆矩陣
test_predictdata <- cbind(testdata, predictedclass = test_predict)
test_confusion <- table(actual = testdata$Species, predictedclass = test_predict)
#判對(duì)率
sum(diag(prop.table(test_confusion)))
#[1] 0.8863636

1.4 總結(jié)

1.所有在對(duì)iris數(shù)據(jù)集分(聚)類研究中尾膊,setosa均可以完全正確分(聚)類斩松,而另外兩類則會(huì)出現(xiàn)不同程度的誤差瞻凤,這也是導(dǎo)致整個(gè)研究模型出現(xiàn)誤差的原因;
2.在使用的三種分類研究方法中溯香,決策樹模型的效果最優(yōu)鲫构,因此可以使用該方法進(jìn)行鳶尾花數(shù)據(jù)集的分類預(yù)測(cè)研究。

2 聚類

2.1 K-means

library(cluster)
#去除原有的factor類型的種類變量
df<-iris[,-5]
head(df)
#確定最佳聚類數(shù)目
library(factoextra)
fviz_nbclust(df, kmeans, method = "wss") + geom_vline(xintercept = 3, linetype = 2)


#設(shè)置隨機(jī)數(shù)種子玫坛,保證實(shí)驗(yàn)的可重復(fù)進(jìn)行
set.seed(12)
#利用k-means進(jìn)行聚類
km_result <- kmeans(df,3)
print(km_result)
#提取類標(biāo)簽并且與原始數(shù)據(jù)進(jìn)行合并
mydf <- cbind(iris, cluster = km_result$cluster)
head(mydf)
#查看每一類的數(shù)目
table(mydf$cluster)
#進(jìn)行可視化展示
fviz_cluster(km_result, data = df,
             palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
             ellipse.type = "euclid",
             star.plot = TRUE, 
             repel = TRUE,
             ggtheme = theme_minimal()
)
k-means
table<-table(mydf$Species,mydf$cluster)
sum(diag(prop.table(table))) #判對(duì)率
#[1] 0.8933333

2.2 K-medoids

library(cluster)
#去除原有的factor種類變量
kmedf<-iris[,-5]
head(kmedf)
#分為三類
fit_pam=pam(kmedf,3) 
fit_pam[1:length(fit_pam)] 
#分類情況
summary(fit_pam)
mykmedf <- cbind(iris, cluster =fit_pam$clustering)
head(mykmedf)
#查看每一類的數(shù)目
table(mykmedf$cluster)
#進(jìn)行可視化展示
fviz_cluster(fit_pam, data = mykmedf,
             palette = c("#2E9Fdf", "#00AFBB", "#E7B800", "#FC4E07"),
             ellipse.type = "euclid",
             star.plot = TRUE, 
             repel = TRUE,
             ggtheme = theme_minimal()
)
K-medoids
#判對(duì)率
kmetable<-table(mykmedf$Species,mykmedf$cluster)
sum(diag(prop.table(kmetable)))
[1] 0.8933333

2.3 層次聚類

hirisdata<-iris[,-5]
head(hirisdata)
#使用自底向上的聚類方法處理數(shù)據(jù)集:
hc = hclust(dist(hirisdata,method = "euclidean"),method = "ward.D2")
#調(diào)用plot函數(shù)繪制聚類樹圖
plot(hc,hang = -0.01,cex =0.7)
層次聚類
#定義count函數(shù),計(jì)算分類準(zhǔn)確率
mycount<-function(num,min,max)
{
  count=0
  {
    for (x in num) {
      if(x>=min&x<=max)
        count<-count+1
    }
  }
  count
}
num1<-hc$order[1:50]
count1<-mycount(num1,1,50)
num2<-hc$order[51:100]
count2<-mycount(num2,101,150)
num3<-hc$order[101:150]
count3<-mycount(num3,51,100)
#準(zhǔn)確率
correctrate<-(count1+count2+count3)/150
[1] 0.8
#驗(yàn)證標(biāo)準(zhǔn)化之后對(duì)聚類結(jié)果的影響
hirisdata<-scale(hirisdata)
#準(zhǔn)確率
correctrate<-(count1+count2+count3)/150
[1] 0.52

2.4 總結(jié):

1.在對(duì)鳶尾花數(shù)據(jù)集進(jìn)行聚類時(shí)结笨,K-means、K-medoids兩種聚類方法的正確率相同湿镀,可見在數(shù)據(jù)集離群點(diǎn)和噪音不大的情況下炕吸,二者聚類效果基本相同,但當(dāng)出現(xiàn)離群點(diǎn)和噪音時(shí)勉痴,應(yīng)該考慮K-medoids聚類方法赫模;
2.鳶尾花數(shù)據(jù)集進(jìn)行聚類分析時(shí),劃分聚類效果優(yōu)于層次聚類蒸矛;
3.對(duì)于量綱不一致的數(shù)據(jù)瀑罗,應(yīng)進(jìn)行標(biāo)準(zhǔn)化,但對(duì)于量綱一致的數(shù)據(jù)雏掠,標(biāo)準(zhǔn)化之后結(jié)果并不一定優(yōu)于未標(biāo)準(zhǔn)化的數(shù)據(jù)得到的結(jié)果斩祭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乡话,隨后出現(xiàn)的幾起案子摧玫,更是在濱河造成了極大的恐慌,老刑警劉巖绑青,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诬像,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門遭商,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人降狠,你說我怎么就攤上這事∧缗罚” “怎么了?”我有些...
    開封第一講書人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵柏肪,是天一觀的道長(zhǎng)姐刁。 經(jīng)常有香客問我,道長(zhǎng)烦味,這世上最難降的妖魔是什么聂使? 我笑而不...
    開封第一講書人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任壁拉,我火速辦了婚禮,結(jié)果婚禮上柏靶,老公的妹妹穿的比我還像新娘弃理。我一直安慰自己,他們只是感情好屎蜓,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開白布痘昌。 她就那樣靜靜地躺著,像睡著了一般炬转。 火紅的嫁衣襯著肌膚如雪辆苔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,874評(píng)論 1 314
  • 那天扼劈,我揣著相機(jī)與錄音驻啤,去河邊找鬼。 笑死荐吵,一個(gè)胖子當(dāng)著我的面吹牛骑冗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播先煎,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼贼涩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了榨婆?” 一聲冷哼從身側(cè)響起磁携,我...
    開封第一講書人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎良风,沒想到半個(gè)月后谊迄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烟央,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年统诺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疑俭。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粮呢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钞艇,到底是詐尸還是另有隱情啄寡,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布哩照,位于F島的核電站挺物,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏飘弧。R本人自食惡果不足惜识藤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一砚著、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痴昧,春花似錦稽穆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至扣囊,卻和暖如春乎折,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侵歇。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工骂澄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惕虑。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓坟冲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親溃蔫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子健提,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

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