Computer >> Máy Tính >  >> Lập trình >> Python

Triển khai thuật toán dịch chuyển trung bình bằng Python


Có nhiều loại thuật toán phân cụm trong Học máy. Các thuật toán này có thể được thực hiện bằng Python. Trong bài viết này, chúng ta hãy thảo luận và triển khai thuật toán 'Mean − Shift' bằng Python. Đây là một thuật toán phân cụm được sử dụng như một phương pháp học tập không có giám sát.

Trong thuật toán này, không có giả định nào được đưa ra. Điều này ngụ ý rằng nó là một thuật toán không tham số. Thuật toán này chỉ định lặp đi lặp lại các điểm dữ liệu cho các cụm nhất định, được thực hiện bằng cách chuyển các điểm dữ liệu này về phía có mật độ điểm dữ liệu cao nhất.

Mật độ điểm dữ liệu cao này được gọi là trung tâm của cụm. Sự khác biệt giữa thuật toán Mean shift và K có nghĩa là phân cụm là trước đây (K-nghĩa là) số lượng cụm cần phải được chỉ định trước.

Điều này là do số lượng cụm được tìm thấy với sự trợ giúp của thuật toán K có nghĩa là dựa trên dữ liệu hiện tại.

Hãy để chúng tôi hiểu các bước trong thuật toán Mean-shift -

  • Các điểm dữ liệu được gán cho một cụm riêng của nó.

  • Sau đó, trọng tâm của các cụm này được xác định.

  • Vị trí của các trung tâm này được cập nhật lặp đi lặp lại.

  • Tiếp theo, quá trình chuyển sang các vùng có mật độ cao hơn.

  • Khi các trung tâm đạt đến một vị trí mà chúng không thể di chuyển xa hơn, quá trình sẽ dừng lại.

Hãy để chúng tôi hiểu cách nó có thể được triển khai bằng Python, sử dụng scikit-learning -

Ví dụ

import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn.datasets.samples_generator import make_blobs
centers = [[3,3,1],[4,5,5],[11,10,10]]
X, _ = make_blobs(n_samples = 950, centers = centers, cluster_std = 0.89)
plt.title("Implementation of Mean-Shift algorithm")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.scatter(X[:,0],X[:,1])
plt.show()

ms = MeanShift()
ms.fit(X)
labels = ms.labels_
clusterCent = ms.cluster_centers_
print(clusterCent)
numCluster = len(np.unique(labels))
print("Estimated clusters:", numCluster)
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
   plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 3)
plt.scatter(clusterCent[:,0],clusterCent[:,1],
   marker=".",color='k', s=20, linewidths = 5, zorder=10)
plt.show()

Đầu ra

Triển khai thuật toán dịch chuyển trung bình bằng Python

[[ 3.05250924 3.03734994 1.06159541]
[ 3.92913017 4.99956874 4.86668482]
[10.99127523 10.02361122 10.00084718]]
Estimated clusters: 3

Triển khai thuật toán dịch chuyển trung bình bằng Python

Giải thích

  • Các gói bắt buộc được nhập và bí danh của nó được xác định để dễ sử dụng.

  • ‘Ggplot’ được chỉ định cho hàm ‘use’ có trong lớp ‘style’.

  • Hàm 'make_blobs' được sử dụng để tạo các cụm dữ liệu.

  • Các hàm set_xlabel, set_ylabel và set_title được sử dụng để cung cấp nhãn cho trục ‘X’, trục ‘Y’ và tiêu đề.

  • Hàm ‘MeanShift’ được gọi và được gán cho một biến.

  • Dữ liệu phù hợp với mô hình.

  • Các nhãn và số lượng các cụm được xác định.

  • Dữ liệu này được vẽ và biểu đồ phân tán cho dữ liệu phù hợp với mô hình cũng được hiển thị.

  • Nó được hiển thị trên bảng điều khiển bằng cách sử dụng chức năng "show".