日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python层次聚类_python实现层次聚类

發(fā)布時(shí)間:2024/7/5 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python层次聚类_python实现层次聚类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

BAFIMINARMTO

BA0662877255412996

FI6620295468268400

MI8772950754564138

NA2554687540219869

RM4122685642190669

TO9964001388696690

這是一個(gè)距離矩陣。不管是scipy還是fastcluster,都有一個(gè)計(jì)算距離矩陣的步驟(也可以不用)。距離矩陣是冗余的,因?yàn)樗菍?duì)稱的。scipy里面的文檔好多的關(guān)于數(shù)學(xué)上的英文,讓我都搞糊涂了。distance = spatial.distance.pdist(data),這段代碼里,data是一個(gè)矩陣,但不是距離矩陣,而是如http://www.shahuwang.com/?p=952 這篇文章中用到的數(shù)據(jù)形式,而最后算出來的distance只是一個(gè)數(shù)組,并不是矩陣,而且是一維數(shù)組,這是為什么呢?仔細(xì)看上面的那個(gè)矩陣,就知道我們只需要記錄對(duì)角線上或者下面的一部分就可以了。廢話不說,來看最簡(jiǎn)單的一個(gè)層次聚類實(shí)現(xiàn)(我現(xiàn)在主要將scipy的,fastcluster的使用幾乎一樣):

1

2from scipy.cluster.hierarchyimport fclusterdata

fclusterdata(matData,t=0.99,criterion='inconsistent',metric='euclidean',method='average',R=None)#這個(gè)不需要計(jì)算linkage就能直接出結(jié)果了

這里用到的matData來自于:http://www.shahuwang.com/?p=952 用到的數(shù)據(jù),是矩陣形式的。輸出的結(jié)果如下:

array([15, 19, 20, 26, 23, 10, 26, 23, 18, 21, 20, 22, 10, 20, 1, 18, 11,

8, 4, 18, 21, 29, 25, 17, 18, 20, 24, 23, 3, 19, 12, 13, 15, 9,

18, 25, 16, 28, 5, 17, 25, 17, 1, 15, 7, 4, 14, 6, 20, 2, 4,

3, 9, 5, 2, 23, 1, 9, 25, 15, 23, 27, 16, 11, 22, 20, 12])

結(jié)果的意思,就是說我的矩陣的第一個(gè)數(shù)據(jù)現(xiàn)在被分到了第15個(gè)類中,后面的也都是這個(gè)意思,自己再整理一下,就能輸出美觀直觀的結(jié)果了。下面主要來講一下fclusterdata里面的參數(shù)的意思:

matData,這是要聚類的數(shù)據(jù),t是一個(gè)閾值,小于1大于0,你可以根據(jù)輸出結(jié)果來設(shè)置這個(gè)閾值。criterion,是一個(gè)標(biāo)準(zhǔn),它主要是確定形成最后結(jié)果(如上面的那個(gè)array)需要滿足什么條件,這個(gè)主要和 t 這個(gè)閾值進(jìn)行合作。

1

2

3

4

5

6

7

8from scipy.cluster.hierarchyimport linkage ,fcluster,fclusterdata

import pandas as pd

data= pd.read_csv('/home/rickey/文檔/學(xué)習(xí)/數(shù)據(jù)挖掘與數(shù)據(jù)倉庫/數(shù)據(jù)挖掘作業(yè)/三圍數(shù)據(jù)',sep='t',index_col=0)

matData= data.as_matrix()

distance= spatial.distance.pdist(matData)

linkresult= linkage(distance,method='average',metric='euclidean')

fcluster(linkresult,t=0.99,criterion='inconsistent',depth=2,R=None,monocrit=None)#這個(gè)需要先計(jì)算linkage,再出結(jié)果

dendrogram(linkresult,get_leaves=False,show_leaf_counts=False)#這個(gè)可以繪制出樹形圖

這是更復(fù)雜一些的實(shí)現(xiàn)形式,主要有四個(gè)函數(shù)要注意,分別是pdist,linkage,fcluster,dendrogram。

這段代碼用的數(shù)據(jù)和前面那段是一樣的,結(jié)果也是一樣的。distance是一個(gè)距離數(shù)組(距離矩陣的一邊角),之前已經(jīng)說明了pdist的作用了。linkage返回的是一個(gè)4×(n-1)的矩陣。比如我的數(shù)據(jù)是67個(gè),返回的則是一個(gè)4×66的矩陣。這個(gè)矩陣的意思,scipy文檔上用的是這段話:“A 4 by

matrixZis returned. At the

-th iteration, clusters with indicesZ[i, 0]andZ[i, 1]are combined to form cluster

. A cluster with an index less than

corresponds to one of the

original observations. The distance between clustersZ[i, 0]andZ[i, 1]is given byZ[i, 2]. The fourth valueZ[i, 3]represents the number of original observations in the newly formed cluster.”

英語不濟(jì),不是很看得明白。大概是說Z[i,0],Z[i,1]是組成n+i簇的之類的吧。

fcluster這個(gè)函數(shù),則是把linkage算出的結(jié)果,形成一個(gè)平面數(shù)組,形成最后的聚類結(jié)果呈現(xiàn)出來。里面的參數(shù)和fclusterdata里面的意思是一樣的。

fcluster的這段代碼和fclusterdata的代碼相比,多了一些,不過,好處就是能設(shè)置更多的參數(shù)。

dendrogram的參數(shù)設(shè)置非常多,沒有完全搞明白,不過它會(huì)輸出一個(gè)字典,和一幅圖。字典里面有四個(gè)key,而圖則是樹形圖,如下:

不過,我覺得這個(gè)圖的用途不是很大,數(shù)據(jù)量一多,就什么都看不到了。

scipy里面關(guān)于層次聚類的函數(shù)還有不少,我也沒有搞懂,這里就不多說了。

總結(jié)

以上是生活随笔為你收集整理的python层次聚类_python实现层次聚类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。