Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Visualisasi kelompok menggunakan dendrogram

Visualisasi kelompok menggunakan dendrogram

PHPz
PHPzke hadapan
2023-05-01 09:01:061154semak imbas

Secara amnya, kami menggunakan plot serakan untuk visualisasi kelompok, tetapi plot serakan tidak sesuai untuk menggambarkan beberapa algoritma pengelompokan, jadi dalam artikel ini, kami memperkenalkan cara menggunakan dendrogram ( Dendrogram) untuk menggambarkan hasil pengelompokan kami.

Dendogram

Dendrogram ialah gambar rajah yang menunjukkan hubungan hierarki antara objek, kumpulan atau pembolehubah. Dendrogram terdiri daripada cawangan yang disambungkan pada nod atau kelompok yang mewakili kumpulan pemerhatian dengan ciri yang serupa. Ketinggian cawangan atau jarak antara nod menunjukkan betapa berbeza atau serupa kumpulan itu. Iaitu, semakin panjang cawangan atau semakin jauh jarak antara nod, semakin kurang persamaan kumpulan tersebut. Semakin pendek cawangan atau semakin kecil jarak antara nod, semakin serupa kumpulan itu.

Dendogram berguna untuk menggambarkan struktur data yang kompleks dan mengenal pasti subkumpulan atau gugusan data dengan ciri yang serupa. Ia biasanya digunakan dalam biologi, genetik, ekologi, sains sosial dan bidang lain di mana data boleh dikumpulkan berdasarkan persamaan atau korelasi.

Latar Belakang:

Perkataan "dendrogram" berasal daripada perkataan Yunani "dendron" (pokok) dan "gramma" (lukisan). Pada tahun 1901, ahli matematik dan statistik British Karl Pearson menggunakan gambar rajah pokok untuk menunjukkan hubungan antara spesies tumbuhan yang berbeza. Dia memanggil graf ini sebagai "graf kluster." Ini boleh dianggap sebagai penggunaan pertama dendrogram.

Penyediaan data

Kami akan menggunakan harga saham sebenar beberapa syarikat untuk pengelompokan. Untuk akses mudah, data dikumpul menggunakan API percuma yang disediakan oleh Alpha Vantage. Alpha Vantage menyediakan API percuma dan API premium melalui API memerlukan kunci, sila rujuk tapak webnya.

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'}

Dua puluh syarikat telah dipilih merentas teknologi, runcit, minyak dan gas serta industri lain.

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]

Kod di atas menetapkan jeda 15 saat antara panggilan API untuk memastikan ia tidak disekat terlalu kerap.

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

Integrate data di atas ke dalam DF yang kita perlukan, yang boleh digunakan terus di bawah

Hierarki clustering

Hierarchical clustering clustering) ialah pengelompokan algoritma yang digunakan dalam pembelajaran mesin dan analisis data. Ia menggunakan hierarki kelompok bersarang untuk mengumpulkan objek yang serupa ke dalam kelompok berdasarkan persamaan. Algoritma boleh sama ada aglomeratif, yang bermula dengan objek tunggal dan menggabungkannya menjadi gugusan, atau pembahagi, yang bermula dengan gugusan besar dan membahagikannya secara rekursif kepada gugusan yang lebih kecil.

Perlu diambil perhatian bahawa bukan semua kaedah pengelompokan ialah kaedah pengelompokan hierarki dan dendrogram hanya boleh digunakan pada beberapa algoritma pengelompokan.

Algoritma Pengelompokan Kami akan menggunakan pengelompokan hierarki yang disediakan dalam modul scipy.

1. Pengelompokan atas ke bawah

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

Visualisasi kelompok menggunakan dendrogram

Cara menentukan yang terbaik berdasarkan Nombor dendrogram Kluster

Cara paling mudah untuk mencari bilangan gugusan yang optimum adalah dengan melihat bilangan warna yang digunakan dalam dendrogram yang terhasil. Bilangan gugusan optimum adalah kurang satu daripada bilangan warna. Jadi mengikut dendrogram di atas, bilangan gugusan optimum ialah dua.

Cara lain untuk mencari bilangan gugusan yang optimum ialah dengan mengenal pasti titik di mana jarak antara gugusan tiba-tiba berubah. Ini dipanggil "titik lutut" atau "titik siku" dan boleh digunakan untuk menentukan bilangan gugusan yang paling baik menangkap variasi dalam data. Kita boleh lihat dalam rajah di atas bahawa perubahan jarak maksimum antara bilangan kluster yang berbeza berlaku antara 1 dan 2 kluster. Jadi sekali lagi, bilangan kluster yang optimum ialah dua.

Dapatkan sebarang bilangan gugusan daripada dendrogram

Satu kelebihan menggunakan dendrogram ialah objek boleh dikelompokkan ke dalam sebarang bilangan gugusan dengan melihat dendrogram. Sebagai contoh, jika anda perlu mencari dua kluster, anda boleh melihat garis menegak atas pada dendrogram dan memutuskan kluster. Sebagai contoh, dalam contoh ini, jika dua kluster diperlukan, maka terdapat empat syarikat dalam kluster pertama dan 16 syarikat dalam kluster kedua. Jika kita memerlukan tiga kluster, kita boleh membahagikan kluster kedua kepada 11 dan 5 syarikat. Jika anda memerlukan lebih banyak lagi, anda boleh mengikuti contoh ini.

2. Pengelompokan bawah ke atas

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

Visualisasi kelompok menggunakan dendrogram

Kami adalah pengelompokan bawah ke atas Dendrogram yang diperolehi oleh kelas adalah serupa dengan pengelompokan atas ke bawah. Bilangan gugusan optimum masih ada dua (berdasarkan bilangan warna dan kaedah "titik infleksi"). Tetapi jika kita memerlukan lebih banyak kluster, beberapa perbezaan halus akan diperhatikan. Ini adalah perkara biasa kerana kaedah yang digunakan adalah berbeza, menyebabkan sedikit perbezaan dalam keputusan.

Ringkasan

Dendogram ialah alat yang berguna untuk menggambarkan struktur data yang kompleks dan mengenal pasti subkumpulan atau gugusan data dengan ciri yang serupa. Dalam artikel ini, kami menggunakan kaedah pengelompokan hierarki untuk menunjukkan cara mencipta dendrogram dan cara menentukan bilangan gugusan yang optimum. Untuk gambar rajah pepohon data kami membantu dalam memahami perhubungan antara syarikat yang berbeza, tetapi ia juga boleh digunakan dalam pelbagai bidang lain untuk memahami struktur hierarki data.

Atas ialah kandungan terperinci Visualisasi kelompok menggunakan dendrogram. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam