Rumah > pembangunan bahagian belakang > Tutorial Python > Cara menggunakan dendrogram untuk melaksanakan pengelompokan visual dalam Python

Cara menggunakan dendrogram untuk melaksanakan pengelompokan visual dalam Python

WBOY
Lepaskan: 2023-04-28 20:49:05
ke hadapan
1845 orang telah melayarinya

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 [1]. 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 Akses melalui API memerlukan kunci, sila rujuk tapak webnya.

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'}
Salin selepas log masuk

20 syarikat dipilih daripada teknologi, runcit, minyak dan gas serta industri lain.

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

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
 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)
Salin selepas log masuk

Sepadukan data di atas ke dalam DF yang kami perlukan, yang boleh digunakan terus di bawah

Kluster hierarki

Kluster hierarki ialah sejenis aplikasi Algoritma pengelompokan untuk pembelajaran mesin dan analisis data. Ia menggunakan hierarki kelompok bersarang untuk mengumpulkan objek 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 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=&#39;complete&#39;)
 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(&#39;Dendrogram of Company Correlations (Top-Down Clustering)&#39;)
 plt.xlabel(&#39;Companies&#39;)
 plt.ylabel(&#39;Distance&#39;)
 plt.show()
Salin selepas log masuk

Cara menggunakan dendrogram untuk melaksanakan pengelompokan visual dalam Python

Cara menentukan bilangan gugusan optimum berdasarkan dendrogram

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 anda boleh mengelompokkan objek ke dalam sebarang bilangan gugusan dengan melihat dendrogram dalam gugusan . 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 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=&#39;ward&#39;)
 
 # Plot dendrogram
 plt.figure(figsize=(10, 5))
 sch.dendrogram(clustering, labels=list(df_combined.columns), leaf_rotation=90)
 plt.title(&#39;Dendrogram of Company Correlations (Bottom-Up Clustering)&#39;)
 plt.xlabel(&#39;Companies&#39;)
 plt.ylabel(&#39;Distance&#39;)
 plt.show()
Salin selepas log masuk

Cara menggunakan dendrogram untuk melaksanakan pengelompokan visual dalam Python

Dendrogram yang kami perolehi untuk pengelompokan bawah ke atas 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.

Atas ialah kandungan terperinci Cara menggunakan dendrogram untuk melaksanakan pengelompokan visual dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan