當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀] 在進行機器學(xué)習(xí)時,我們往往要對數(shù)據(jù)進行聚類分析,聚類,說白了就是把相似的樣品點/數(shù)據(jù)點進行歸類,相似度高的樣品點會放在一起,這樣一個樣本就會被分成幾類。而聚類分析也有很多種方法,比如分解法、加入法、

在進行機器學(xué)習(xí)時,我們往往要對數(shù)據(jù)進行聚類分析,聚類,說白了就是把相似的樣品點/數(shù)據(jù)點進行歸類,相似度高的樣品點會放在一起,這樣一個樣本就會被分成幾類。而聚類分析也有很多種方法,比如分解法、加入法、有序樣品的聚類、模糊聚類法以及系統(tǒng)聚類法等。而本文要介紹的就是系統(tǒng)聚類法,以及如何用python來進行系統(tǒng)聚類分析。

首先來看一下系統(tǒng)聚類法的定義。系統(tǒng)聚類法(hierarchical clustering method),又叫分層聚類法,是目前最常用的聚類分析方法。其基本步驟如下:假設(shè)樣本中有n個樣品,那么就先將這n個樣品看作n類,也就是一個樣品一個類,然后將性質(zhì)最接近的兩類合并為一個新的類,這樣就得到n-1個類,接著從中再找出最接近的兩個類,讓其進行合并,這樣就變?yōu)閚-2個類,讓此過程持續(xù)進行下去,最后所有的樣品都?xì)w為一類,把上述過程繪制成一張圖,這個圖就稱為聚類圖,從圖中再決定分為多少類。其大致過程如圖1所示。

圖1. 系統(tǒng)聚類分析示意圖

而這里我們要確定各個樣品的相似度,才能將其歸類,那么如何確定其相似度呢?通常我們用的方法是計算各個樣品點之間的距離,然后再根據(jù)距離來分類。這里我們根據(jù)距離來分類,同樣也是有幾種方法的,比如最短距離法、最長距離法、重心法、類平均法以及ward法。下面我們對這幾種方法進行一個簡單的介紹。

1. 最短距離法

最短距離法就是從兩個類中找出距離最短的兩個樣品點,如圖2所示。點3和點7是類G1和類G2中距離最短的兩個點。計算公式如圖4所示。

圖2. 最短距離法示意圖

2. 最長距離法

最長距離法就是從兩個類中找出距離最長的兩個樣品點,如圖3所示。點1和點6是類G1和類G2中距離最長的兩個點。計算公式如圖4所示。

圖3. 最長距離法示意圖

3. 重心法

從物理的觀點看,一個類用它的重心,也就是類樣品的均值,來做代表比較合理,類之間的距離也就是重心之間的距離。若樣品之間用歐氏距離,設(shè)某一步將類G1與G2合并成G3,它們各有n1、n2、n3個樣品,其中n3=n1+n2,它們的重心用X1、X2和X3表示,則X3=1/n3(n1X1+n2X2)。重心法的計算公式參考圖4。

4. 類平均法

這個顧名思義,就是取兩個類之間所有點的距離的平均值。計算公式如圖4所示。

圖4. 常用的距離計算方法

5. 離差平方和法

離差平方和法又叫Ward法,其思想源于方差分析,即如果類分得正確,同類樣品的離差平方和應(yīng)當(dāng)較小,類與類之間的離差平方和應(yīng)該較大。計算公式如圖4所示。

在了解了系統(tǒng)聚類法的基本知識以后,我們就用python代碼來展示一下系統(tǒng)聚類法的具體使用。

首先還是導(dǎo)入各種庫。

import numpy as np from matplotlib import pyplot as plt from scipy.cluster.hierarchy import dendrogram, linkage

接下來是生成數(shù)據(jù)集。我們這次用的數(shù)據(jù)集是隨機生成的,數(shù)量也不多,一共15個數(shù)據(jù)點,分為兩個數(shù)據(jù)簇,一個有7個數(shù)據(jù)點,另一個有8個。之所以把數(shù)據(jù)點數(shù)量設(shè)置這么少,是因為便于看清數(shù)據(jù)分布,以及后面畫圖時容易看清圖片的分類。代碼如下。

state = np.random.RandomState(99) #設(shè)置隨機狀態(tài) a = state.multivariate_normal([10, 10], [[1, 3], [3, 11]], size=7) #生成多元正態(tài)變量 b = state.multivariate_normal([-10, -10], [[1, 3], [3, 11]], size=8) data = np.concatenate((a, b)) #把數(shù)據(jù)進行拼接

這里我們設(shè)置一個隨機狀態(tài),便于重復(fù)試驗。然后利用這個隨機狀態(tài)生成兩個變量a和b,這兩個變量就是前面說過的數(shù)據(jù)簇,a有7個數(shù)據(jù)點,b有8個,a和b都是多元正態(tài)變量,其中a的均值向量是[10, 10],b的均值向量是[-10, -10],兩者協(xié)方差矩陣是[[1, 3], [3, 11]]。這里要注意的是協(xié)方差矩陣要是正定矩陣或半正定矩陣。然后對a與b進行拼接,得到變量data。

接下來要繪制數(shù)據(jù)點的分布。代碼如下。

fig, ax = plt.subplots(figsize=(8,8)) #設(shè)置圖片大小 ax.set_aspect('equal') #把兩坐標(biāo)軸的比例設(shè)為相等 plt.scatter(data[:,0], data[:,1]) plt.ylim([-30,30]) #設(shè)置Y軸數(shù)值范圍 plt.xlim([-30,30]) plt.show()

這里代碼比較簡單,不再贅述,主要說一下ax.set_aspect('equal')這行代碼,因為matplotlib默認(rèn)情況下x軸和y軸的比例是不同的,也就是相同單位長度的線段,在顯示時長度是不一樣的,所以要把二者的比例設(shè)為一樣,這樣圖片看起來更協(xié)調(diào)更準(zhǔn)確。所繪制圖片如圖5所示,從圖中可以明顯看到兩個數(shù)據(jù)簇,上面那個數(shù)據(jù)簇大概集中在坐標(biāo)點[10, 10]附近,而下面那個大概集中在[-10, -10]附近,這和我們設(shè)置的是一樣的。從圖中可以很明顯看出,這個數(shù)據(jù)集大概可以分為兩類,即上面的數(shù)據(jù)簇分為一類,下面的數(shù)據(jù)簇分為另一類,但我們還要通過算法來計算一下。

圖5. 所用數(shù)據(jù)分布圖

然后是數(shù)據(jù)處理,代碼如下。

z = linkage(data, "average") #用average算法,即類平均法

數(shù)據(jù)處理只有這一行代碼,非常簡單,但難點也就在這。首先我們來看一下z的結(jié)果,如圖6所示。

圖6. 聚類計算結(jié)果

很多人第一次看到這個結(jié)果都是一臉懵逼,甚至是n臉懵逼,但其實里面的道理很簡單。scipy官方對此有一些設(shè)定,比如該結(jié)果中第一行有4個數(shù)字,即11、13、0.14740505、2,前兩個數(shù)字就是指“類”,剛開始每個點就是一個類,所以11和13這兩個點就是兩個類,第三個數(shù)字0.14740505就是這兩個點的距離,這兩個點被合并成一個類,所以這個新的類包含兩個點(11和13),這也就是第四個點的數(shù)值2,而這個新的類就被算為類15。注意這里是類15,不是第15個類,因為我們原來的數(shù)據(jù)集中有15個點,按照順序就是類0、類1、類2...類14,因為python是從0開始,所以這里類15就是指第16個類。z的第二行數(shù)據(jù)里,前兩個數(shù)字是2和5,就是原來類2和類5,距離是0.3131184,包含2個點,這行數(shù)據(jù)和第一行類似。然后再看第三行數(shù)據(jù),前兩個數(shù)字是10和15,就是類10與類15,類15就是前面第一行合并成的新類,其包含11和13這兩個點,類15與類10的距離是0.39165998,這個數(shù)字是類11和13與類10的平均距離,因為我們這里用的算法是average,類10、11和13合并為了一個新類,其包含3個點,所以第四個數(shù)字就是3。z中其他行的數(shù)據(jù)按照此規(guī)律以此類推。最后一行數(shù)據(jù)中,類26和27合并成一個新類,這個類包含了全部15個點,也就是這15個點最終劃為了一個類,算法終止。

接下來就是畫圖,代碼如下,其結(jié)果如圖7所示。

fig, ax = plt.subplots(figsize=(8,8)) dendrogram(z, leaf_font_size=14) #畫圖 plt.title("Hierachial Clustering Dendrogram") plt.xlabel("Cluster label") plt.ylabel("Distance") plt.axhline(y=10) #畫一條分類線 plt.show()

圖7. 聚類結(jié)果圖

從圖中可以看出,這15個點可以分為兩類,前面綠色的線連接的點代表一類,即點0到點6這7個點,后面紅色的線連接的點代表第二類,即點7到點14這8個點。我們可以看到這個劃分結(jié)果是非常正確的,和我們當(dāng)時的設(shè)定是一樣的。

系統(tǒng)聚類法的算法比較簡單,實用性非常高,是目前使用最廣泛的聚類方法,但該方法在處理極大數(shù)據(jù)量時會有所不足,所以最好配合其他算法來使用,同時使用者在使用時要根據(jù)自己的情況,來選擇合適的距離計算方法。本文主要用類平均法來進行聚類操作,因為這個數(shù)據(jù)集非常簡單,所以用其他距離計算方法得到的結(jié)果和這個是一樣的。如果數(shù)據(jù)量比較大時,最終不同距離計算方法得到的結(jié)果可能不同,所以使用者要根據(jù)自己的情況來進行選擇。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉