亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python使用樹狀圖實現(xiàn)可視化聚類詳解

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

樹狀圖

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

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

背景知識:

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

數(shù)據(jù)準備

我們將使用幾家公司的真實股價來進行聚類。為了方便獲取,所以使用 Alpha Vantage 提供的免費 API 來收集數(shù)據(jù)。Alpha Vantage同時提供免費 API 和高級 API,通過API訪問需要密鑰,請參考他的網(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 秒的暫停,這樣可以保證不會因為太頻繁被封掉。

# 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,下面就可以直接使用了

層次聚類

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

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

聚類算法我們將使用 scipy 模塊中提供的層次聚類。

1、自上而下聚類

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ù)

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

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

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

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

2、自下而上聚類

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)樽韵露系木垲惈@得的樹狀圖類似于自上而下的聚類。最佳簇數(shù)仍然是兩個(基于顏色數(shù)和“拐點”方法)。但是如果我們需要更多的集群,就會觀察到一些細微的差異。這也很正常,因為使用的方法不一樣,導致結(jié)果會有一些細微的差異。

總結(jié)

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

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

相關(guān)文章

  • python實現(xiàn)對excel進行數(shù)據(jù)剔除操作實例

    python實現(xiàn)對excel進行數(shù)據(jù)剔除操作實例

    python在數(shù)據(jù)分析這方便的介紹應(yīng)該不用多說了,下面這篇文章主要給大家介紹了關(guān)于利用python實現(xiàn)對excel進行數(shù)據(jù)剔除操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • 詳解Python中的正則表達式

    詳解Python中的正則表達式

    正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配。本文給大家?guī)砹藀ython中的正則表達式,感興趣的朋友一起看看吧
    2018-07-07
  • python用opencv 圖像傅里葉變換

    python用opencv 圖像傅里葉變換

    這篇文章主要介紹了python用opencv 圖像傅里葉變換的方法,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2021-01-01
  • python字典中items()函數(shù)用法實例

    python字典中items()函數(shù)用法實例

    Python字典items()函數(shù)作用以列表返回可遍歷的(鍵, 值)元組數(shù)組,下面這篇文章主要給大家介紹了關(guān)于python字典中items()函數(shù)用法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Python+Pytorch實戰(zhàn)之彩色圖片識別

    Python+Pytorch實戰(zhàn)之彩色圖片識別

    這篇文章主要為大家詳細介紹了如何利用Python+Pytorch實現(xiàn)彩色圖片識別功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-09-09
  • Python實現(xiàn)病毒仿真器的方法示例(附demo)

    Python實現(xiàn)病毒仿真器的方法示例(附demo)

    這篇文章主要介紹了Python實現(xiàn)病毒仿真器的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 基于Python實現(xiàn)簡易文檔格式轉(zhuǎn)換器

    基于Python實現(xiàn)簡易文檔格式轉(zhuǎn)換器

    這篇文章主要介紹了基于Python和PyQT5實現(xiàn)簡易的文檔格式轉(zhuǎn)換器,支持.txt/.xlsx/.csv格式的轉(zhuǎn)換。感興趣的小伙伴可以跟隨小編一起學習一下
    2021-12-12
  • Python3實現(xiàn)計算兩個數(shù)組的交集算法示例

    Python3實現(xiàn)計算兩個數(shù)組的交集算法示例

    這篇文章主要介紹了Python3實現(xiàn)計算兩個數(shù)組的交集算法,結(jié)合2個實例形式總結(jié)分析了Python3針對數(shù)組的遍歷、位運算以及元素的添加、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • pycharm安裝和首次使用教程

    pycharm安裝和首次使用教程

    這篇文章主要為大家詳細介紹了PyCharm安裝使用教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Python字符串處理的8招秘籍(小結(jié))

    Python字符串處理的8招秘籍(小結(jié))

    這篇文章主要介紹了Python字符串處理的8招秘籍,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08

最新評論