Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci algoritma K-means++ dalam Python

Penjelasan terperinci algoritma K-means++ dalam Python

PHPz
PHPzasal
2023-06-10 20:25:441839semak imbas

Algoritma K-means ialah algoritma pembelajaran tanpa pengawasan yang biasa digunakan untuk mengumpulkan data ke dalam kategori yang berbeza. Algoritma K-means++ ialah versi algoritma K-means yang dipertingkatkan, bertujuan untuk meningkatkan kecekapan dan ketepatan pemilihan pusat kluster awal. Artikel ini akan memperkenalkan secara terperinci prinsip, pelaksanaan kod dan aplikasi algoritma K-means++ dalam Python.

  1. Ikhtisar algoritma K-means

Algoritma K-means ialah algoritma berulang Proses setiap lelaran ialah: mula-mula pilih K pusat pengelompokan awal secara rawak, Kemudian setiap satu titik data diperuntukkan kepada kategori pusat kluster awal yang paling hampir dengannya, dan kemudian pusat semua kluster dikira semula dan pusat kluster dikemas kini. Ulangi proses di atas sehingga syarat penumpuan dipenuhi.

K-bermaksud proses algoritma:

  1. Pilih K titik data secara rawak daripada data sebagai pusat pengelompokan awal.
  2. Tetapkan titik data kepada kluster yang mengandungi pusat kluster terdekatnya.
  3. Kira semula pusat setiap kelompok.
  4. Ulang 2-3 sehingga syarat penumpuan dipenuhi (pusat kluster tidak lagi berubah, bilangan lelaran maksimum dicapai, dsb.).
  5. Langkah algoritma K-means++

Algoritma K-means++ ialah versi algoritma K-means yang dipertingkatkan, yang terutamanya mengoptimumkan pemilihan pusat pengelompokan awal. Langkah pemilihan pusat kluster awal bagi algoritma K-means++ adalah seperti berikut:

  1. Pilih titik data secara rawak sebagai pusat kluster pertama.
  2. Bagi setiap titik data, hitung jaraknya D(x) dari pusat kelompok terdekat.
  3. Pilih titik data secara rawak sebagai pusat kluster seterusnya Pastikan semakin besar jarak antara titik ini dan pusat kluster sedia ada, semakin besar kebarangkalian untuk dipilih:
    a jarak terdekat D(x)^2 antara titik dan pusat kelompok sedia ada.
    b. Kira jumlah Sum(D(x)^2) semua D(x)^2.
    c. Timbang setiap titik data mengikut perkadaran jarak terdekatnya dengan pusat kluster sedia ada, dan kebarangkalian ialah D(x)^2/Jumlah(D(x)^2).
    d. Daripada pensampelan mengikut kebarangkalian di atas, pilih titik data sebagai pusat kluster seterusnya.
  4. Ulang langkah 3 sehingga pusat kluster K dipilih.
  5. Python melaksanakan algoritma K-means++

Seterusnya, kami akan melaksanakan algoritma K-means++ melalui Python.

Mula-mula, import perpustakaan yang diperlukan:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

Seterusnya, kami menjana satu set data untuk pengelompokan:

n_samples = 1500
random_state = 170
X, y = make_blobs(n_samples=n_samples, random_state=random_state)

Kemudian, kami melatih melalui model K-means++ modul KMeans sklearn :

kmeans = KMeans(init="k-means++", n_clusters=3, n_init=10)
kmeans.fit(X)

Akhir sekali, kami memvisualisasikan hasil pengelompokan:

plt.figure(figsize=(12, 12))
h = 0.02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = kmeans.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.imshow(Z, interpolation="nearest",
          extent=(xx.min(), xx.max(), yy.min(), yy.max()),
          cmap=plt.cm.Pastel1, aspect="auto", origin="lower")
plt.scatter(X[:, 0], X[:, 1], s=30, c=kmeans.labels_, cmap=plt.cm.Paired)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
            marker="^", s=100, linewidths=3,
            color='black', zorder=10)
plt.title("K-means++ clustering")
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.show()
  1. Senario aplikasi algoritma K-means++

Algoritma K-means Sesuai untuk masalah pengelompokan data tanpa maklumat label. Berbanding dengan algoritma K-means, algoritma K-means++ lebih sesuai untuk situasi di mana terdapat banyak data atau pengagihan data secara relatifnya berselerak bagi memastikan rasional dan keunikan pusat pengelompokan awal.

Algoritma K-means++ boleh digunakan dalam perlombongan data, pemprosesan imej, pemprosesan bahasa semula jadi dan bidang lain. Algoritma pengelompokan boleh digunakan untuk mencari sampel dengan persamaan yang lebih tinggi, yang juga sangat berguna untuk visualisasi data besar.

Ringkasnya, algoritma K-means++ mempunyai prospek aplikasi yang baik dalam perlombongan data, analisis kelompok, pengecaman imej, pemprosesan bahasa semula jadi dan bidang lain.

Atas ialah kandungan terperinci Penjelasan terperinci algoritma K-means++ dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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