Rumah >pembangunan bahagian belakang >Tutorial Python >Penjelasan terperinci algoritma DBSCAN dalam Python
Algoritma DBSCAN (Density-Based Spatial Clustering of Applications with Noise) ialah kaedah pengelompokan berasaskan kepadatan yang boleh mengumpulkan titik data dengan ciri yang serupa ke dalam kelas dan mengenal pasti outlier. Dalam Python, dengan memanggil fungsi DBSCAN dalam pustaka scikit-learn, anda boleh melaksanakan algoritma ini dengan mudah dan dengan cepat melakukan analisis kelompok pada data. Artikel ini akan memperkenalkan algoritma DBSCAN dalam Python secara terperinci.
1. Asas algoritma DBSCAN
Algoritma DBSCAN ialah algoritma pengelompokan berasaskan ketumpatan. Terdapat dua parameter penting dalam algoritma: jejari kejiranan (ε) dan bilangan sampel minimum (MinPts). Jejari kejiranan bermakna dengan titik tertentu sebagai pusat, semua titik data dalam bulatan dengan ε sebagai jejari dipanggil kejiranan titik Bilangan minimum sampel merujuk kepada bilangan titik data minimum dalam kejiranan. Jika terdapat Jika bilangan titik data dalam domain kurang daripada MinPts, titik itu dianggap sebagai titik hingar.
Inti algoritma ialah mengelompokkan titik data dengan mengira ketumpatan setiap titik (ketumpatan ialah bilangan titik yang terkandung dalam jejari kejiranan titik). Khususnya, algoritma bermula dari titik tidak berlabel dan secara rekursif mengembangkan saiz kelompok dengan mengira ketumpatan titik lain dalam kejiranan titik sehingga ambang ketumpatan dicapai atau tiada titik lain boleh menyertai kelompok.
Akhir sekali, algoritma akan menandakan semua titik tidak berlabel dalam kelompok sebagai ahli kelompok dan memilih titik tidak berlabel baharu daripada titik tidak dilawati sebagai titik permulaan untuk meneruskan pengembangan rekursif. Proses ini diulang sehingga tiada titik tidak berlabel, dan proses pengelompokan berakhir.
2. Fungsi DBSCAN dalam Python
Dalam Python, algoritma DBSCAN boleh dilaksanakan dengan mudah dengan memanggil fungsi DBSCAN dalam perpustakaan scikit-learn. Sintaks fungsi ini adalah seperti berikut:
sklearn.cluster.DBSCAN(eps=0.5,min_samples=5,metric='euclidean',algorithm='auto',leaf_size=30,p=1,n_jobs =Tiada)
Antaranya, eps mewakili jejari kejiranan, min_samples mewakili bilangan minimum sampel, metrik mewakili kaedah pengukuran jarak, algoritma mewakili kaedah pengiraan, leaf_size mewakili saiz nod daun, p mewakili Minkowski index, dan n_jobs mewakili bilangan tugas.
3. Gunakan Python untuk pengelompokan DBSCAN
Yang berikut menggunakan contoh khusus untuk menunjukkan cara menggunakan Python untuk pengelompokan DBSCAN.
Pertama, kita perlu mengimport perpustakaan yang berkaitan dan menjana set data rawak, kodnya adalah seperti berikut:
from sklearn.datasets import make_blobs import numpy as np import matplotlib.pyplot as plt X, _ = make_blobs(n_samples=1000, centers=5, random_state=42)
Kemudian, kita boleh melukis carta pengedaran titik data, seperti yang ditunjukkan di bawah:
plt.scatter(X[:, 0], X[:, 1]) plt.show()
Seterusnya, kita boleh menggunakan fungsi DBSCAN untuk melakukan analisis kluster adalah seperti berikut:
from sklearn.cluster import DBSCAN dbscan = DBSCAN(eps=0.5, min_samples=5) dbscan.fit(X)
Antaranya, sensitiviti titik data. pengelompokan dilaraskan dengan menetapkan parameter eps dan min_samples . Jika eps terlalu kecil dan min_samples terlalu besar, kesan pengelompokan akan menjadi agak lemah jika eps terlalu besar dan min_samples terlalu kecil, sukar untuk memisahkan kelompok yang berbeza.
Kami boleh melaraskan parameter eps dan min_samples untuk melihat perubahan dalam kesan pengelompokan. Kodnya adalah seperti berikut:
eps_list = [0.1, 0.3, 0.5, 0.7] min_samples_list = [2, 5, 8, 11] fig, axes = plt.subplots(2, 2, figsize=(10, 8)) axes = axes.flatten() for i, (eps, min_samples) in enumerate(zip(eps_list, min_samples_list)): dbscan = DBSCAN(eps=eps, min_samples=min_samples) dbscan.fit(X) unique_labels = set(dbscan.labels_) colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))] for k, col in zip(unique_labels, colors): if k == -1: col = [0, 0, 0, 1] class_member_mask = (dbscan.labels_ == k) xy = X[class_member_mask] axes[i].scatter(xy[:, 0], xy[:, 1], s=50, c=col) axes[i].set_title(f"eps={eps}, min_samples={min_samples}") axes[i].axis('off') plt.tight_layout() plt.show()
Dengan menjalankan kod di atas, kita boleh mendapatkan kesan pengelompokan di bawah kombinasi berbeza parameter eps dan min_samples, seperti yang ditunjukkan di bawah:
Daripada perkara di atas Dapat dilihat dari rajah bahawa apabila eps=0.5 dan min_samples=5, kesan clustering adalah yang terbaik.
4. Kelebihan dan Kelemahan DBSCAN
Algoritma pengelompokan DBSCAN mempunyai kelebihan berikut:
Kelemahan algoritma pengelompokan DBSCAN termasuk:
5. Ringkasan
Artikel ini memperkenalkan algoritma pengelompokan DBSCAN dalam Python, termasuk asas algoritma, penggunaan fungsi DBSCAN dan cara melakukan analisis kelompok dalam Python. Melalui contoh demonstrasi, kami memahami kesan parameter pada kesan pengelompokan dan menguasai kemahiran melaraskan parameter. Pada masa yang sama, kami juga memahami kelebihan dan kekurangan algoritma DBSCAN supaya kami boleh memilih algoritma pengelompokan yang sesuai dalam aplikasi praktikal.
Atas ialah kandungan terperinci Penjelasan terperinci algoritma DBSCAN dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!