r语言聚类分析_图说层次聚类分析原理和R语言实现
1、引言
“物以類(lèi)聚、人以群分”。但我們面對(duì)一群人或者一堆物的時(shí)候,我們都希望將他們分分類(lèi),分類(lèi)之后,我們才能更加有針對(duì)性地采取措施,從而提高工作效率。
如,我們將消費(fèi)者分成若干類(lèi),有的是土豪、有的是工薪階層,然后我們就采取不同的營(yíng)銷(xiāo)策略。再比如,我們將交通出行者分成若干類(lèi),有的是公共交通出行、有的是打車(chē)出行、有的是私車(chē)出行等,然后采取不同服務(wù)措施。
分類(lèi)的方法很多,這里介紹一種稱(chēng)之為聚類(lèi)分析的方法。更準(zhǔn)確的說(shuō),聚類(lèi)分析也有很多種類(lèi),這里僅僅介紹其中最為基礎(chǔ)的一種,稱(chēng)之為層次聚類(lèi)分析。
2、層次聚類(lèi)分析原理
現(xiàn)在假設(shè),我們有9名同學(xué),參加滿分為10分的語(yǔ)文和數(shù)學(xué)考試。他們的成績(jī),見(jiàn)表1。
表1 9名同學(xué)的語(yǔ)文和數(shù)學(xué)成績(jī)
為了便于觀察,我們用散點(diǎn)圖描述學(xué)生的成績(jī),如圖1所示。
圖1 9名同學(xué)成績(jī)?cè)趦删S空間上的分布
從圖1我們可以看出,9名學(xué)生大約可以分為三類(lèi)。
第一類(lèi)由編號(hào)為1、2、3、4的學(xué)生組成,它們的特點(diǎn)是語(yǔ)文和數(shù)學(xué)成績(jī)都不太好。
第二類(lèi)由編號(hào)為5、6、7的同學(xué)組成,他們的特點(diǎn)是語(yǔ)文成績(jī)一般,但數(shù)學(xué)成績(jī)較好。
第三類(lèi)由編號(hào)為8、9的同學(xué)組成,他們的特點(diǎn)是語(yǔ)文較好,但數(shù)學(xué)成績(jī)不太好。
三類(lèi)學(xué)生特點(diǎn)不同,也決定著下一步學(xué)習(xí)特點(diǎn)不同。因此,有效地分類(lèi),可以提高教學(xué)的針對(duì)性。
然而這個(gè)分類(lèi)是根據(jù)肉眼觀察得到的,并不嚴(yán)謹(jǐn)。下面,我們介紹如何通過(guò)數(shù)學(xué)的方法分析得到。
首先,我們需要明確,分類(lèi)的依據(jù)是學(xué)生成績(jī)之間的距離。距離越小,則他們?cè)娇赡芊值酵粋€(gè)類(lèi)別中;距離越大,則他們?cè)讲豢赡芊值酵粋€(gè)類(lèi)別中。
描述他們之間距離的公式很多,不同公式應(yīng)用在不同場(chǎng)合,這也表明了聚類(lèi)分析內(nèi)容的豐富性。
其中一個(gè)經(jīng)典的公式是用來(lái)計(jì)算馬氏距離的公式。簡(jiǎn)單說(shuō)就是,兩點(diǎn)之間的距離等于他們的橫坐標(biāo)之差的平方加縱坐標(biāo)之差的平方的開(kāi)方,用數(shù)學(xué)公式表示為
由此我們可以得到這9名同學(xué)學(xué)習(xí)成績(jī)之間的距離,見(jiàn)表2。
表2 9名學(xué)生的學(xué)習(xí)成績(jī)之間的距離
從表2中可以看出,在所有32個(gè)距離中,最小的距離為1,為學(xué)生1與學(xué)生2、3的距離、學(xué)生5與學(xué)生6、7的距離,以及學(xué)生8與學(xué)生9之間的距離。
據(jù)此,我們將學(xué)生1、2、3合并作為一類(lèi),5、6、7合并作為一類(lèi)、8、9合并作為一類(lèi),學(xué)生4單獨(dú)作為一類(lèi)。這樣,9名同學(xué)分為4類(lèi),分別命名為{簇1.1,簇1.2,簇1.3,簇1.4 }。
但是,假如我們只有兩個(gè)老師,必須講9名同學(xué)分成兩類(lèi)。那么就需要在上述4類(lèi)基礎(chǔ)上繼續(xù)劃分。
首先,我們需要找到一個(gè)代表值來(lái)代表各類(lèi)。這種代表方法很多,一般教材提供了8種。(這也說(shuō)明聚類(lèi)分析內(nèi)容的豐富性。)
這里選擇其中一種,叫做中心點(diǎn)法,簡(jiǎn)單說(shuō)就算平均值。如,類(lèi)1包含{1,2,3},其坐標(biāo)值為{(1,1),(0,1),(1,0)},其平均值為(0.67,0.67)。我們用坐標(biāo)為(0.67,0.67),代表一類(lèi)。
這樣,{簇1.1,簇1.2,簇1.3,簇1.4 }的坐標(biāo)值,見(jiàn)表3。
表3 第一次聚類(lèi)后的各簇中心點(diǎn)分布
在空間上的分布,如圖2所示。
圖2 第一次聚類(lèi)后各簇中心點(diǎn)分布情況
在圖2中,黑色點(diǎn)表示原來(lái)9名學(xué)生的成績(jī)。而藍(lán)色米狀點(diǎn)則表示各簇的中心點(diǎn),以代表各簇。
為進(jìn)一步聚類(lèi),計(jì)算它們之間的距離,結(jié)果見(jiàn)表4。
表4 第一次聚類(lèi)后各簇之間的距離
根據(jù)表4的結(jié)果,簇1.1 和簇1.2距離較近,合并,形成簇2.1。簇1.2、簇1.3,未與其他簇合并,保留下來(lái),分別命名為簇2.2、簇2.3。
這樣{簇2.1、簇2.2、簇2.3}的坐標(biāo),見(jiàn)表5。
表5 第二次聚類(lèi)后各簇的坐標(biāo)
需要注意的是,簇2.1 的坐標(biāo)不是簇1.1和簇1.2 的坐標(biāo)的平均值,而是簇1.1和簇1.2 中所有學(xué)生的成績(jī)的平均值,因此為(1,1.25)。
其在空間上的分布,如圖3所示。
圖3 第二次聚類(lèi)后各簇的位置
圖3中,綠色三角表示第二次聚類(lèi)后各簇的中心位置。
繼續(xù)計(jì)算簇2.1、簇2.2、簇2.3 的距離,見(jiàn)表6。
表6 {簇2.1、簇2.2、簇2.3}之間的距離
從表6可以看出,簇2.2和2.3 距離更近,它們可以合并。這樣就形成了兩類(lèi){簇3.1、簇3.2}。
繪制出{簇3.1和簇3.2}的位置,如圖4所示。途中,紅色田字表示簇3.1和簇3.2的位置。
圖4 第三次聚類(lèi)后各簇位置
簇3.1和簇3.2都是9名同學(xué)經(jīng)過(guò)三次合并(聚類(lèi))得到的,其中簇3.1 是由{1、2、3、4}等4名同學(xué)合并,包含著簇2.1、簇1.1和簇1.2。簇3.2 是由{5、6、7、8、9}等5名同學(xué)合并的,包含著簇2.2、簇2.3、簇1.3和1.4。
3、聚類(lèi)分析在R語(yǔ)言中實(shí)現(xiàn)
前面用冗長(zhǎng)的文字介紹了聚類(lèi)分析的過(guò)程,從而揭示聚類(lèi)分析的原理。在R語(yǔ)言中,我們用4句代碼,實(shí)現(xiàn)上述過(guò)程。
# 輸入原始數(shù)據(jù)
dt1<-as.data.frame(cbind(c(1,0,1,2,3,3,2,7,8),c(1,1,0,3,8,9,8,4,4)))
# 給各列命名
colnames(dt1)<-c("語(yǔ)文","數(shù)學(xué)")
#因?yàn)橄旅娴膆clust只能處理矩陣,因此需要計(jì)算距離矩陣。
result <- dist(dt1)
#調(diào)用hclust函數(shù),生成聚類(lèi)結(jié)果
result_hc <- hclust(d = result, method = "average")
#將聚類(lèi)結(jié)果展示出來(lái)
plot(result_hc,main="聚類(lèi)結(jié)果",ylab="距離",xlab="學(xué)生")
圖5 聚類(lèi)分析結(jié)果
圖5以一個(gè)樹(shù)狀圖的方式描述各個(gè)學(xué)生之間距離遠(yuǎn)近。從下而上可以觀察,1和2距離較近,合并為一類(lèi);然后1、2與3較近,合并為一類(lèi);再然后與4相近,合并為一類(lèi);另一個(gè)方向上,5、6接近合并為一類(lèi),然后與7合并為一類(lèi),8與9合并為一類(lèi),再與{5、6、7}合并為一類(lèi)。最后,將這9類(lèi)合并在一起。
研究者可以根據(jù)自己需要對(duì)9名學(xué)生進(jìn)行分類(lèi)。具體來(lái)說(shuō),研究者可以用一個(gè)水平線對(duì)樹(shù)狀圖進(jìn)行切割。如,水平線處于距離為3.5的地方,它與樹(shù)狀圖有3處相交,則將9名學(xué)生分為3類(lèi),分別是{1,2,3,4}、{5、6、7}、{8,9};水平線處于距離為2.5的地方,則它與樹(shù)狀圖4處相交,從而將9名學(xué)生分為4類(lèi),分別是{1、2、3}、{4}、{5、6、7}、{8、9}。
總結(jié)
以上是生活随笔為你收集整理的r语言聚类分析_图说层次聚类分析原理和R语言实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SQL:OUTER JOIN使用方法具体
- 下一篇: python scrapy教程实例_Py