Phần 9: Unsupervised Learning: Clustering phần 2 – Lập trình AI bằng Python

Phần 9: Unsupervised Learning: Clustering phần 2                        – Lập trình AI bằng Python

4. Đo lường hiệu suất Clustering :

Dữ liệu thế giới thực không tự nhiên được tổ chức thành những cụm riêng biệt. Do đó, không dễ hình dung và rút ra suy luận. Đó là nguyên nhân vì sao ta cần đo hiệu suất phân cụm cũng như là chất lượng của nó. Nó có thể được bắt đầu với sự giúp đỡ của phân tích silhouette.
a. Phân tích silhouette :
Phương pháp này có thể được dùng để kiểm tra chất lượng phân cụm bằng cách đo khoảng cách giữa các cụm. Về căn bản, nó cung cấp 1 cách để đánh giá những thông số như số lượng cụm bằng cách cho điểm silhouette. Điểm số này là những liệu đo lường mức độ gần của mỗi điểm trong 1 cụm với những điểm trong các cụm lân cận.
b. Phân tích điểm silhouette :
Điểm số có phạm vi là [-1, 1] như dưới đây ;
  • Điểm +1 :  Điểm gần +1 cho biết mẫu ở xa cụm lân cận.
  • Điểm 0 : Điểm 0 cho biết mẫu nằm trên hay rất gần ranh giới quyết định giữa 2 cụm lân cận.
  • Điểm -1 : Điểm âm nêu ra rằng các mẫu được chỉ định vào các cụm sai.

5. Tính toán điểm Silhouette :

Trong mục này, ta sẽ học cách tính điểm silhouette.
Điểm Silhouette có thể được tính bằng cách sử dụng công thức sau:
Tại đây, 𝑝 là khoảng cách trung bình tới các điểm trong cụm gần đây nhất mà điểm dữ liệu không phải là 1 phần của nó. Và, 𝑞 là khoảng cách trung bình trong cụm tới toàn bộ các điểm trong cụm của chính nó.
Để tìm số lượng cụm tối ưu, ta cần chạy lại thuật toán phân cụm bằng cách nhập mô-đun số liệu từ gói sklearn. Trong ví dụ sau, chúng tôi sẽ chạy thuật toán phân cụm Okay-imply để tìm số lượng cụm tối ưu –
Tại đây, 𝑝 là khoảng cách trung bình tới các điểm trong cụm gần đây nhất mà điểm dữ liệu không phải là 1 phần của nó. Và, 𝑞 là khoảng cách trung bình trong cụm tới toàn bộ các điểm trong cụm của chính nó.
Để tìm số lượng cụm tối ưu, ta cần chạy lại thuật toán phân cụm bằng cách nhập mô-đun số liệu từ gói sklearn. Trong ví dụ sau, chúng tôi sẽ chạy thuật toán phân cụm Okay-imply để tìm số lượng cụm tối ưu :
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
Sau khi sử dụng đonaj code sau , ta sẽ tạo tập dữ liêuk 2 chiều, với 4 đốm màu, sử dụng make_blob từ package deal sklearn.dataset
from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs(n_samples = 500, facilities = 4, cluster_std = 0.40, random_state = 0)
Khởi tạo :
scores = []
values = np.arange(2, 10)
Ta cần lặp lại mô hình Okay-imply qua những giá trị và cần huấn luyện nó với dữ liệu đầu vào
for num_clusters in values:
kmeans = KMeans(init = 'okay-means++', n_clusters = num_clusters, n_init = 10)
kmeans.match(X)
Hiện tại, hãy ước lượng điểm silhouette cho mô hình phân cụm hiện giờ bằng cách sử dụng số liệu khoảng cách Euclide –
rating = metrics.silhouette_score(X, kmeans.labels_,
metric = 'euclidean', sample_size = len(X))
Dòng mã dưới đây sẽ giúp hiển thị số lượng các cụm cũng như là điểm số Silhouette.
print("nNumber of clusters =", num_clusters)
print("Silhouette rating =", rating)
scores.append(rating)
Number of clusters = 9
Silhouette rating = 0.340391138371

num_clusters = np.argmax(scores) + values[0]
print('nOptimal variety of clusters =', num_clusters)
Output :
Optimal variety of clusters = 2

6. Thuật toán Finding Nearest Neighbors :

Nếu như ta muốn xây dựng hệ thống recommender ví dụ như hệ thống giới thiệu phim thì ta cần hiểu khái niệm discovering the closest neighbors. Đó là bởi hệ thống khuyến nghị sử dụng khái niệm về những người hàng xóm gần đây nhất.
Khái niệm tìm kiếm láng giềng gần đây nhất có thể được định nghĩa rằng quá trình tìm điểm gần đây nhất với điểm đầu vào từ tập dữ liệu đã cho. Việc sử dụng chính của thuật toán KNN ( Okay-nearest neighbors ) là xây dựng các hệ thống phân loại phân loại 1 điểm dữ liệu về mức độ lân cận của điểm dữ liệu đầu vào với những lớp khác nhau.
Đoạn mã sau đưa ra sau đây giúp bạn tìm Okay-lân cận gần đây nhất của 1 tập dữ liệu nhất định –
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import NearestNeighbors
Định nghĩa dự liệu enter :
A = np.array([[3.1, 2.3], [2.3, 4.2], [3.9, 3.5], [3.7, 6.4], [4.8, 1.9], 
             [8.3, 3.1], [5.2, 7.5], [4.8, 4.7], [3.5, 5.1], [4.4, 2.9],])
Định nghĩa  nearest neighbors :
okay = 3
Ta cần cung cấp dữ liệu take a look at từ đấy tìm thấy hàng xóm gần đây nhất
test_data = [3.3, 2.9]
Đoạn mã sau có thể trực quan hóa và vẽ biểu đồ dữ liệu đầu vào :
plt.determine()
plt.title('Input knowledge')
plt.scatter(A[:,0], A[:,1], marker = 'o', s = 100, colour = 'black')
Ta bắt đầu xây dựng mô hình KNN
knn_model = NearestNeighbors(n_neighbors = okay, algorithm = 'auto').match(X)
distances, indices = knn_model.kneighbors([test_data])
Hiện tại, chúng ta sẽ có thể in Okay gần đây nhất như dưới đây
print("nK Nearest Neighbors:")
for rank, index in enumerate(indices[0][:k], begin = 1):
   print(str(rank) + " is", A[index])
Visualize các hàng xóm gần đây nhất cùng điểm dữ liệu thử nghiệm
plt.determine()
plt.title('Nearest neighbors')
plt.scatter(A[:, 0], X[:, 1], marker = 'o', s = 100, colour = 'okay')
plt.scatter(A[indices][0][:][:, 0], A[indices][0][:][:, 1],
   marker = 'o', s = 250, colour = 'okay', facecolors = 'none')
plt.scatter(test_data[0], test_data[1],
   marker = 'x', s = 100, colour = 'okay')
plt.present()
Output :
1 is [ 3.1 2.3]
2 is [ 3.9 3.5]
3 is [ 4.4 2.9]

7. Okay-Nearest Neighbors Classifier

Bộ phân loại Okay-Nearest Neighbors (KNN) là 1 mô hình phân loại sử dụng thuật toán láng giềng gần đây nhất để phân loại 1 điểm dữ liệu nhất định. Chúng ta đã thực hiện thuật toán KNN trong phần trước, hiện tại ta sẽ xây dựng bộ phân loại KNN bằng thuật toán đó.
1. Khái niệm KNN Classifier :
Khái niệm căn bản của KNN classification là tìm những được xác định trước, tức là ‘okay’ – của các mẫu huấn luyện gần đây nhất trong khoảng cách với 1 mẫu mới, mà mẫu này phải được phân loại. Các mẫu mới sẽ được dán nhãn từ chính những người hàng xóm. Những bộ phân loại KNN có 1 hằng số do người sử dụng xác định cố định cho số lượng hàng xóm phải được xác định. Đối với khoảng cách, khoảng cách Euclid tiêu chuẩn là chọn lựa thông dụng nhất. KNN Classifier hoạt động trực tiếp trên những mẫu đã học thay vì tạo nên những quy tắc để học. Thuật toán KNN là 1 trong các thuật toán đơn giản nhất trong toàn bộ các thuật toán học máy. Nó đã tương đối thành công trong những lượng lớn những bài toán phân loại và hồi quy, ví dụ, nhận dạng ký tự hay phân tích hình ảnh.
2. Ví dụ 
Ta xây dựng bộ phân loại KNN để nhận dạng những chữ số. Đối với điều đó, mình sẽ sử dụng tập dữ liệu MNIST. Mình sẽ viết mã này trong Jupyter Notebook.
Nhập những gói cần thiết như hình bên dưới đây.
Tại đây chúng tôi đang dùng mô-đun OkayNeighborsClassifier từ package deal sklearn.neighbors
from sklearn.datasets import *
import pandas as pd
%matplotlib inline
from sklearn.neighbors import OkayNeighborsClassifier
import matplotlib.pyplot as plt
import numpy as np
Đoạn mã sau sẽ hiện ra hình ảnh của chữ số để xác minh hình ảnh mà ta sẽi kiểm tra :
def Image_display(i):
   plt.imshow(digit['images'][i],cmap = 'Greys_r')
   plt.present()
Hiện tại, ta cần tải tập dữ liệu MNIST. Trên thực tế có tổng cộng 1797 hình ảnh nhưng ta đang dùng 1600 hình ảnh đầu tiên làm mẫu đào tạo và 197 hình ảnh còn lại sẽ được giữ mục đích thử nghiệm.
digit = load_digits()
digit_d = pd.DataFrame(digit['data'][0:1600])
Hiện tại, khi hiển thị hình ảnh, ta có thể nhận thấy kết quả như dưới đây:
Image_display(0)
Image_display(0)
picture số 0 hiển thị như dưới đây :
Image_display(9)
picture số 9 hiển thị như dưới đây :
digit.keys()
Hiện tại, ta cần tạo tập dữ liệu đào tạo và thử nghiệm và cung cấp tập dữ liệu thử nghiệm cho những bộ phân loại KNN.
train_x = digit['data'][:1600]
train_y = digit['target'][:1600]
KNN = OkayNeighborsClassifier(20)
KNN.match(train_x,train_y)
Đầu ra dưới đây sẽ tạo nên Okay phương thức khởi tạo bộ KNN classifier:
OkayNeighborsClassifier(algorithm = 'auto', leaf_size = 30, metric = 'minkowski',
   metric_params = None, n_jobs = 1, n_neighbors = 20, p = 2,
   weights = 'uniform')
Ta cần tạo mẫu thử nghiệm bằng cách cung cấp bất kỳ số thoải mái nào lớn hơn 1600, là các mẫu huấn luyện.
take a look at = np.array(digit['data'][1725])
test1 = take a look at.reshape(1,-1)
Image_display(1725)
Image_display(6)
Ảnh số 6 hiển thị như dưới đây :
Ta nhận diện dữ liệu take a look at như dưới đây :
KNN.predict(test1)
Đoạn mã trên sẽ tạo nên kết quả sau:
array([6])
Xem xét đoạn sau :
digit['target_names']
Đoạn mã trên sẽ tạo nên kết quả sau:
array((*2*))

admin

Leave a Reply

Your email address will not be published. Required fields are marked *