Bài viết này trình bày một minh họa về phân cụm K-mean trên một dữ liệu ngẫu nhiên mẫu sử dụng thư viện cv mở.

Điều kiện tiên quyết: Numpy, OpenCV, matplot-lib

Đầu tiên chúng ta hãy trực quan hóa dữ liệu thử nghiệm với Nhiều tính năng bằng công cụ matplot-lib.

# importing required tools 
import numpy as np 
from matplotlib import pyplot as plt 
  
# creating two test data 
X = np.random.randint(10,35,(25,2)) 
Y = np.random.randint(55,70,(25,2)) 
Z = np.vstack((X,Y)) 
Z = Z.reshape((50,2)) 
  
# convert to np.float32 
Z = np.float32(Z) 
  
plt.xlabel('Test Data') 
plt.ylabel('Z samples') 
  
plt.hist(Z,256,[0,256]) 
  
plt.show() 

Ở đây ‘Z’ là một mảng có kích thước 100 và các giá trị nằm trong khoảng từ 0 đến 255. Bây giờ, hãy định hình lại ‘z’ thành một vectơ cột. Nó sẽ hữu ích hơn khi có nhiều hơn một tính năng. Sau đó thay đổi dữ liệu thành kiểu np.float32.

Đầu ra:

Bây giờ, hãy áp dụng thuật toán phân cụm k-Means vào ví dụ tương tự như trong dữ liệu thử nghiệm ở trên và xem hành vi của nó.

1. Các bước liên quan:

1) Đầu tiên chúng ta cần thiết lập một dữ liệu thử nghiệm.

2) Xác định tiêu chí và áp dụng kmeans ().

3) Bây giờ tách dữ liệu.

4) Cuối cùng Vẽ sơ đồ dữ liệu.

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

import numpy as np 
import cv2 
from matplotlib import pyplot as plt 
  
X = np.random.randint(10,45,(25,2)) 
Y = np.random.randint(55,70,(25,2)) 
Z = np.vstack((X,Y)) 
  
# convert to np.float32 
Z = np.float32(Z) 
  
# define criteria and apply kmeans() 
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) 
ret,label,center = cv2.kmeans(Z,2,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS) 
  
# Now separate the data 
A = Z[label.ravel()==0] 
B = Z[label.ravel()==1] 
  
# Plot the data 
plt.scatter(A[:,0],A[:,1]) 
plt.scatter(B[:,0],B[:,1],c = 'r') 
plt.scatter(center[:,0],center[:,1],s = 80,c = 'y', marker = 's') 
plt.xlabel('Test Data'),plt.ylabel('Z samples') 
plt.show()

Output

Ví dụ này nhằm minh họa nơi k-mean sẽ tạo ra các cụm có thể có trực quan.

Các ứng dụng:

1) Xác định Dữ liệu Ung thư.

2) Dự đoán Kết quả Học tập của Học sinh.

3) Dự đoán Hoạt động Ma túy.

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!