成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用樹狀圖可視化聚類

開發 前端
一般情況下,我們都是使用散點圖進行聚類可視化,但是某些的聚類算法可視化時散點圖并不理想,所以在這篇文章中,我們介紹如何使用樹狀圖(Dendrograms)對我們的聚類結果進行可視化。

一般情況下,我們都是使用散點圖進行聚類可視化,但是某些的聚類算法可視化時散點圖并不理想,所以在這篇文章中,我們介紹如何使用樹狀圖(Dendrograms)對我們的聚類結果進行可視化。

樹狀圖

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

樹狀圖對于可視化復雜的數據結構和識別具有相似特征的數據子組或簇很有用。它們通常用于生物學、遺傳學、生態學、社會科學和其他可以根據相似性或相關性對數據進行分組的領域。

背景知識:

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

數據準備

我們將使用幾家公司的真實股價來進行聚類。為了方便獲取,所以使用 Alpha Vantage 提供的免費 API 來收集數據。Alpha Vantage同時提供免費 API 和高級 API,通過API訪問需要密鑰,請參考他的網站。

import pandas as pd
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'}

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

import time

all_data={}
for key,value in companies.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)' in data and data['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 調用之間設置了 15 秒的暫停,這樣可以保證不會因為太頻繁被封掉。

# find common dates among all data frames
common_dates = None
for df_key, df in all_data.items():
if common_dates is None:
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
for df_key, df in all_data.items():
df_combined = pd.concat([df_combined, df.reindex(common_dates)], axis=1)

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

層次聚類

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

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

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

1、自上而下聚類

import numpy as np
import scipy.cluster.hierarchy as sch
import matplotlib.pyplot as plt

# 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()

圖片

如何根據樹狀圖確定最佳簇數

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

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

從樹狀圖中獲取任意數量的簇

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

2、自下而上聚類

import numpy as np
import scipy.cluster.hierarchy as sch
import matplotlib.pyplot as plt

# 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()

圖片

我們為自下而上的聚類獲得的樹狀圖類似于自上而下的聚類。最佳簇數仍然是兩個(基于顏色數和“拐點”方法)。但是如果我們需要更多的集群,就會觀察到一些細微的差異。這也很正常,因為使用的方法不一樣,導致結果會有一些細微的差異。

總結

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

責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2021-02-25 15:21:27

Python 開發編程語言

2021-03-08 09:48:35

圖聚類Python可視化

2020-03-11 14:39:26

數據可視化地圖可視化地理信息

2015-08-20 10:00:45

可視化

2021-07-02 14:07:00

可視化Plotly漏斗圖

2014-05-28 15:23:55

Rave

2017-10-14 13:54:26

數據可視化數據信息可視化

2009-04-21 14:26:41

可視化監控IT管理摩卡

2022-08-26 09:15:58

Python可視化plotly

2024-12-24 07:30:00

Seaborn可視化Python

2014-04-23 09:21:38

大數據

2021-04-09 10:42:03

數據可視化框架大數據

2021-04-28 08:38:37

Jenkins Dashboard可視化部署

2024-12-24 12:00:00

Matplotlib可視化分析Python

2024-04-01 11:53:42

PlotlyPython數據可視化

2015-11-06 14:04:54

數據可視化信息圖

2015-08-20 10:06:36

可視化

2021-10-11 08:04:22

Python數據行程

2017-02-15 09:30:01

可視化網絡布局

2019-03-05 09:20:47

Vim可視化模式命令
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天插天天射天天干 | 在线免费观看视频你懂的 | 亚洲看片网站 | 久久噜噜噜精品国产亚洲综合 | 久草在线高清 | 国产精品国产a级 | 欧美色综合天天久久综合精品 | 美日韩免费视频 | 国产日韩一区二区三区 | 久久成人激情 | 久草成人| 91精品国产91久久久久久最新 | 秋霞在线一区 | 水蜜桃亚洲一二三四在线 | 日本亚洲精品 | 国产91丝袜在线熟 | 在线免费观看色 | 91精品国产综合久久久久久 | 中文字幕在线观看国产 | 一区二区三区在线 | 污视频免费在线观看 | 成人精品一区二区三区中文字幕 | 韩国毛片视频 | 日韩一区二区三区av | 在线91 | 一区二区国产在线 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 一级黄色片一级黄色片 | 在线视频 中文字幕 | 免费黄色的视频 | 精品网| 人人爽日日躁夜夜躁尤物 | 欧美成人自拍视频 | 中文字幕在线一区 | 欧美一区在线视频 | 欧美亚洲国产精品 | 欧美激情视频一区二区三区在线播放 | 日韩欧美在线视频观看 | 国产在线观看网站 | 成人美女免费网站视频 | 成人精品 |