最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用樹(shù)狀圖實(shí)現(xiàn)可視化聚類(lèi)詳解

 更新時(shí)間:2023年03月27日 10:58:28   作者:deephub  
一般情況下,我們都是使用散點(diǎn)圖進(jìn)行聚類(lèi)可視化,但是某些的聚類(lèi)算法可視化時(shí)散點(diǎn)圖并不理想,所以在這篇文章中,我們介紹如何使用樹(shù)狀圖(Dendrograms)對(duì)我們的聚類(lèi)結(jié)果進(jìn)行可視化

樹(shù)狀圖

樹(shù)狀圖是顯示對(duì)象、組或變量之間的層次關(guān)系的圖表。樹(shù)狀圖由在節(jié)點(diǎn)或簇處連接的分支組成,它們代表具有相似特征的觀察組。分支的高度或節(jié)點(diǎn)之間的距離表示組之間的不同或相似程度。也就是說(shuō)分支越長(zhǎng)或節(jié)點(diǎn)之間的距離越大,組就越不相似。分支越短或節(jié)點(diǎn)之間的距離越小,組越相似。

樹(shù)狀圖對(duì)于可視化復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和識(shí)別具有相似特征的數(shù)據(jù)子組或簇很有用。它們通常用于生物學(xué)、遺傳學(xué)、生態(tài)學(xué)、社會(huì)科學(xué)和其他可以根據(jù)相似性或相關(guān)性對(duì)數(shù)據(jù)進(jìn)行分組的領(lǐng)域。

背景知識(shí):

“樹(shù)狀圖”一詞來(lái)自希臘語(yǔ)“dendron”(樹(shù))和“gramma”(繪圖)。1901年,英國(guó)數(shù)學(xué)家和統(tǒng)計(jì)學(xué)家卡爾皮爾遜用樹(shù)狀圖來(lái)顯示不同植物種類(lèi)之間的關(guān)系[1]。他稱(chēng)這個(gè)圖為“聚類(lèi)圖”。這可以被認(rèn)為是樹(shù)狀圖的首次使用。

數(shù)據(jù)準(zhǔn)備

我們將使用幾家公司的真實(shí)股價(jià)來(lái)進(jìn)行聚類(lèi)。為了方便獲取,所以使用 Alpha Vantage 提供的免費(fèi) API 來(lái)收集數(shù)據(jù)。Alpha Vantage同時(shí)提供免費(fèi) API 和高級(jí) API,通過(guò)API訪問(wèn)需要密鑰,請(qǐng)參考他的網(wǎng)站。

import pandasaspd
import requests
 
 companies={'Apple':'AAPL','Amazon':'AMZN','Facebook':'META','Tesla':'TSLA','Alphabet (Google)':'GOOGL','Shell':'SHEL','Suncor Energy':'SU',
            'Exxon Mobil Corp':'XOM','Lululemon':'LULU','Walmart':'WMT','Carters':'CRI','Childrens Place':'PLCE','TJX Companies':'TJX',
            'Victorias Secret':'VSCO','MACYs':'M','Wayfair':'W','Dollar Tree':'DLTR','CVS Caremark':'CVS','Walgreen':'WBA','Curaleaf':'CURLF'}

科技、零售、石油和天然氣以及其他行業(yè)中挑選了 20 家公司。

import time
 
 all_data={}
 forkey,valueincompanies.items():  
 # Replace YOUR_API_KEY with your Alpha Vantage API key
   url=f'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={value}&apikey=<YOUR_API_KEY>&outputsize=full'
   response=requests.get(url)
   data=response.json()
   time.sleep(15)
   if'Time Series (Daily)'indataanddata['Time Series (Daily)']:
     df=pd.DataFrame.from_dict(data['Time Series (Daily)'], orient='index')
     print(f'Received data for {key}')
   else:
     print("Time series data is empty or not available.")
   df.rename(columns= {'1. open':key}, inplace=True)
   all_data[key]=df[key]

在上面的代碼在 API 調(diào)用之間設(shè)置了 15 秒的暫停,這樣可以保證不會(huì)因?yàn)樘l繁被封掉。

# find common dates among all data frames
 common_dates=None
 fordf_key, dfinall_data.items():
     ifcommon_datesisNone:
         common_dates=set(df.index)
     else:
         common_dates=common_dates.intersection(df.index)
 
 common_dates=sorted(list(common_dates))
 
 # create new data frame with common dates as index
 df_combined=pd.DataFrame(index=common_dates)
 
 # reindex each data frame with common dates and concatenate horizontally
 fordf_key, dfinall_data.items():
     df_combined=pd.concat([df_combined, df.reindex(common_dates)], axis=1)

將上面的數(shù)據(jù)整合成我們需要的DF,下面就可以直接使用了

層次聚類(lèi)

層次聚類(lèi)(Hierarchical clustering)是一種用于機(jī)器學(xué)習(xí)和數(shù)據(jù)分析的聚類(lèi)算法。它使用嵌套簇的層次結(jié)構(gòu),根據(jù)相似性將相似對(duì)象分組到簇中。該算法可以是聚集性的可以從單個(gè)對(duì)象開(kāi)始并將它們合并成簇,也可以是分裂的,從一個(gè)大簇開(kāi)始并遞歸地將其分成較小的簇。

需要注意的是并非所有聚類(lèi)方法都是層次聚類(lèi)方法,只能在少數(shù)聚類(lèi)算法上使用樹(shù)狀圖。

聚類(lèi)算法我們將使用 scipy 模塊中提供的層次聚類(lèi)。

1、自上而下聚類(lèi)

import numpyasnp
import scipy.cluster.hierarchyassch
import matplotlib.pyplotasplt
 
 # Convert correlation matrix to distance matrix
 dist_mat=1-df_combined.corr()
 
 # Perform top-down clustering
 clustering=sch.linkage(dist_mat, method='complete')
 cuts=sch.cut_tree(clustering, n_clusters=[3, 4])
 
 # Plot dendrogram
 plt.figure(figsize=(10, 5))
 sch.dendrogram(clustering, labels=list(df_combined.columns), leaf_rotation=90)
 plt.title('Dendrogram of Company Correlations (Top-Down Clustering)')
 plt.xlabel('Companies')
 plt.ylabel('Distance')
 plt.show()

如何根據(jù)樹(shù)狀圖確定最佳簇?cái)?shù)

找到最佳簇?cái)?shù)的最簡(jiǎn)單方法是查看生成的樹(shù)狀圖中使用的顏色數(shù)。最佳簇的數(shù)量比顏色的數(shù)量少一個(gè)就可以了。所以根據(jù)上面這個(gè)樹(shù)狀圖,最佳聚類(lèi)的數(shù)量是兩個(gè)。

另一種找到最佳簇?cái)?shù)的方法是識(shí)別簇間距離突然變化的點(diǎn)。這稱(chēng)為“拐點(diǎn)”或“肘點(diǎn)”,可用于確定最能捕捉數(shù)據(jù)變化的聚類(lèi)數(shù)量。上面圖中我們可以看到,不同數(shù)量的簇之間的最大距離變化發(fā)生在 1 和 2 個(gè)簇之間。因此,再一次說(shuō)明最佳簇?cái)?shù)是兩個(gè)。

從樹(shù)狀圖中獲取任意數(shù)量的簇

使用樹(shù)狀圖的一個(gè)優(yōu)點(diǎn)是可以通過(guò)查看樹(shù)狀圖將對(duì)象聚類(lèi)到任意數(shù)量的簇中。例如,需要找到兩個(gè)聚類(lèi),可以查看樹(shù)狀圖上最頂部的垂直線并決定聚類(lèi)。比如在這個(gè)例子中,如果需要兩個(gè)簇,那么第一個(gè)簇中有四家公司,第二個(gè)集群中有 16 個(gè)公司。如果我們需要三個(gè)簇就可以將第二個(gè)簇進(jìn)一步拆分為 11 個(gè)和 5 個(gè)公司。如果需要的更多可以依次類(lèi)推。

2、自下而上聚類(lèi)

import numpyasnp
import scipy.cluster.hierarchyassch
import matplotlib.pyplotasplt
 
 # Convert correlation matrix to distance matrix
 dist_mat=1-df_combined.corr()
 
 # Perform bottom-up clustering
 clustering=sch.linkage(dist_mat, method='ward')
 
 # Plot dendrogram
 plt.figure(figsize=(10, 5))
 sch.dendrogram(clustering, labels=list(df_combined.columns), leaf_rotation=90)
 plt.title('Dendrogram of Company Correlations (Bottom-Up Clustering)')
 plt.xlabel('Companies')
 plt.ylabel('Distance')
 plt.show()

我們?yōu)樽韵露系木垲?lèi)獲得的樹(shù)狀圖類(lèi)似于自上而下的聚類(lèi)。最佳簇?cái)?shù)仍然是兩個(gè)(基于顏色數(shù)和“拐點(diǎn)”方法)。但是如果我們需要更多的集群,就會(huì)觀察到一些細(xì)微的差異。這也很正常,因?yàn)槭褂玫姆椒ú灰粯?,?dǎo)致結(jié)果會(huì)有一些細(xì)微的差異。

總結(jié)

樹(shù)狀圖是可視化復(fù)雜數(shù)據(jù)結(jié)構(gòu)和識(shí)別具有相似特征的數(shù)據(jù)子組或簇的有用工具。在本文中,我們使用層次聚類(lèi)方法來(lái)演示如何創(chuàng)建樹(shù)狀圖以及如何確定最佳聚類(lèi)數(shù)。對(duì)于我們的數(shù)據(jù)樹(shù)狀圖有助于理解不同公司之間的關(guān)系,但它們也可以用于其他各種領(lǐng)域,以理解數(shù)據(jù)的層次結(jié)構(gòu)。

以上就是Python使用樹(shù)狀圖實(shí)現(xiàn)可視化聚類(lèi)詳解的詳細(xì)內(nèi)容,更多關(guān)于Python樹(shù)狀圖可視化聚類(lèi)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python+OpenCV讀寫(xiě)視頻的方法詳解

    Python+OpenCV讀寫(xiě)視頻的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Python+OpenCV進(jìn)行讀寫(xiě)視頻操作的示例代碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-08-08
  • Python Pandas describe()函數(shù)的使用詳解

    Python Pandas describe()函數(shù)的使用詳解

    pandas庫(kù)中的describe()函數(shù)為我們提供了這樣的功能,它可以快速生成數(shù)據(jù)集的描述性統(tǒng)計(jì)信息,這篇文章主要介紹了Python Pandas describe()函數(shù)的使用介紹,需要的朋友可以參考下
    2024-05-05
  • Python設(shè)計(jì)模式之適配器模式原理與用法詳解

    Python設(shè)計(jì)模式之適配器模式原理與用法詳解

    這篇文章主要介紹了Python設(shè)計(jì)模式之適配器模式原理與用法,結(jié)合實(shí)例形式分析了適配器模式的相關(guān)概念、原理及Python實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-01-01
  • Python字節(jié)單位轉(zhuǎn)換(將字節(jié)轉(zhuǎn)換為K M G T)

    Python字節(jié)單位轉(zhuǎn)換(將字節(jié)轉(zhuǎn)換為K M G T)

    這篇文章主要介紹了Python字節(jié)單位轉(zhuǎn)換(將字節(jié)轉(zhuǎn)換為K M G T),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python自動(dòng)爬取圖片并保存實(shí)例代碼

    Python自動(dòng)爬取圖片并保存實(shí)例代碼

    大家好,本篇文章主要講的是Python自動(dòng)爬取圖片并保存實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Python字符串檢索方式

    Python字符串檢索方式

    文章介紹了Python中字符串查找的六種方法:count()、find()、index()、rindex()、startswith()和endswith(),并詳細(xì)解釋了每個(gè)方法的語(yǔ)法和運(yùn)行結(jié)果
    2024-11-11
  • Python捕捉和模擬鼠標(biāo)事件的方法

    Python捕捉和模擬鼠標(biāo)事件的方法

    這篇文章主要介紹了Python捕捉和模擬鼠標(biāo)事件的方法,涉及PyHook和PyWin32模塊的使用技巧,需要的朋友可以參考下
    2015-06-06
  • 利用Python實(shí)現(xiàn)網(wǎng)絡(luò)測(cè)試的腳本分享

    利用Python實(shí)現(xiàn)網(wǎng)絡(luò)測(cè)試的腳本分享

    這篇文章主要給大家介紹了關(guān)于利用Python實(shí)現(xiàn)網(wǎng)絡(luò)測(cè)試的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • Python?enumerate()計(jì)數(shù)器簡(jiǎn)化循環(huán)

    Python?enumerate()計(jì)數(shù)器簡(jiǎn)化循環(huán)

    這篇文章主要介紹了Python?enumerate()計(jì)數(shù)器簡(jiǎn)化循環(huán),enumerate()最大的優(yōu)點(diǎn)就是它返回一個(gè)帶有計(jì)數(shù)器和值的元組,因此我們不必自己增加計(jì)數(shù)器,下面就來(lái)看看文章具體對(duì)它的詳細(xì)介紹吧,需要的朋友可以參考一下
    2021-12-12
  • Python之如何調(diào)整圖片的文件大小

    Python之如何調(diào)整圖片的文件大小

    這篇文章主要介紹了Python之如何調(diào)整圖片的文件大小問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-03-03

最新評(píng)論

白银市| 湖北省| 普兰店市| 会泽县| 陆丰市| 周口市| 延吉市| 辽阳县| 云南省| 长海县| 宁陵县| 西贡区| 惠安县| 玉林市| 嘉义市| 三河市| 宁津县| 方山县| 义乌市| 项城市| 南漳县| 平远县| 永城市| 淮北市| 许昌县| 镇康县| 麻栗坡县| 盘山县| 绥江县| 梁平县| 湖南省| 普宁市| 双城市| 稻城县| 临泉县| 盐山县| 襄城县| 米林县| 丽水市| 聂拉木县| 临城县|