Học không giám sát Python sklearn

Học không giám sát là sử dụng dữ liệu thô, chưa được gắn thẻ và áp dụng thuật toán học cho dữ liệu đó để giúp máy dự đoán kết quả của nó. Với cuốn sách này, bạn sẽ khám phá khái niệm học tập không giám sát để phân cụm các tập dữ liệu lớn và phân tích chúng nhiều lần cho đến khi tìm thấy kết quả mong muốn bằng Python

Cuốn sách này bắt đầu với sự khác biệt chính giữa học có giám sát, không giám sát và bán giám sát. Bạn sẽ được giới thiệu về các thư viện và khung được sử dụng tốt nhất từ ​​hệ sinh thái Python và giải quyết vấn đề học tập không giám sát trong cả lĩnh vực học máy và học sâu. Bạn sẽ khám phá các thuật toán, kỹ thuật khác nhau được sử dụng để triển khai học tập không giám sát trong các trường hợp sử dụng trong thế giới thực. Bạn sẽ học nhiều cách tiếp cận học tập không giám sát, bao gồm tối ưu hóa ngẫu nhiên, phân cụm, lựa chọn và chuyển đổi tính năng và lý thuyết thông tin. Bạn sẽ có được trải nghiệm thực tế về cách mạng lưới thần kinh có thể được sử dụng trong các tình huống không được giám sát. Bạn cũng sẽ khám phá các bước liên quan đến việc xây dựng và đào tạo GAN để xử lý hình ảnh

Đến cuối cuốn sách này, bạn sẽ học được nghệ thuật học tập không giám sát cho những thách thức khác nhau trong thế giới thực

Bạn sẽ học được gì

  • Sử dụng thuật toán cụm để xác định và tối ưu hóa các nhóm dữ liệu tự nhiên
  • Khám phá hoạt động phân cụm theo cấp bậc và phi tuyến tính nâng cao
  • Gán nhãn mềm cho các mô hình hỗn hợp c-means và Gaussian mờ
  • Phát hiện sự bất thường thông qua ước tính mật độ
  • Thực hiện phân tích thành phần chính bằng các mô hình mạng thần kinh
  • Tạo các mô hình không giám sát bằng GAN

Cuốn sách này dành cho ai

Cuốn sách này dành cho các nhà thống kê, nhà khoa học dữ liệu, nhà phát triển máy học và học viên học sâu muốn xây dựng các ứng dụng thông minh bằng cách triển khai học tập không giám sát khối xây dựng chính và nắm vững tất cả các kỹ thuật và thuật toán mới được cung cấp trong học máy và học sâu bằng cách sử dụng thực tế- . Một số kiến ​​​​thức trước đây về các khái niệm và thống kê học máy là mong muốn

Các thuật toán học máy không giám sát không có bất kỳ người giám sát nào để cung cấp bất kỳ loại hướng dẫn nào. Đó là lý do tại sao chúng được liên kết chặt chẽ với cái mà một số người gọi là trí tuệ nhân tạo thực sự

Trong học tập không giám sát, sẽ không có câu trả lời đúng và không có giáo viên hướng dẫn. Các thuật toán cần khám phá mẫu thú vị trong dữ liệu để học

Phân cụm là gì?

Về cơ bản, nó là một loại phương pháp học tập không giám sát và một kỹ thuật phổ biến để phân tích dữ liệu thống kê được sử dụng trong nhiều lĩnh vực. Phân cụm chủ yếu là nhiệm vụ chia tập hợp các quan sát thành các tập hợp con, được gọi là các cụm, theo cách mà các quan sát trong cùng một cụm giống nhau theo một nghĩa nào đó và chúng không giống với các quan sát trong các cụm khác. Nói một cách đơn giản, chúng ta có thể nói rằng mục tiêu chính của phân cụm là nhóm dữ liệu trên cơ sở tương đồng và không tương đồng

Ví dụ: sơ đồ sau hiển thị loại dữ liệu tương tự trong các cụm khác nhau -

Các thuật toán để phân cụm dữ liệu

Sau đây là một vài thuật toán phổ biến để phân cụm dữ liệu -

Thuật toán K-Means

Thuật toán phân cụm K-means là một trong những thuật toán nổi tiếng để phân cụm dữ liệu. Chúng ta cần giả sử rằng số cụm đã được biết trước. Điều này còn được gọi là phân cụm phẳng. Nó là một thuật toán phân cụm lặp đi lặp lại. Các bước đưa ra dưới đây cần phải được tuân theo cho thuật toán này -

Bước 1 - Chúng ta cần chỉ định số lượng K nhóm con mong muốn

Bước 2 - Cố định số lượng cụm và chỉ định ngẫu nhiên từng điểm dữ liệu cho một cụm. Hay nói cách khác, chúng ta cần phân loại dữ liệu của mình dựa trên số lượng cụm

Trong bước này, trọng tâm của cụm sẽ được tính toán

Vì đây là thuật toán lặp nên chúng ta cần cập nhật vị trí của K trọng tâm với mỗi lần lặp lại cho đến khi chúng ta tìm thấy điểm tối ưu toàn cầu hay nói cách khác là trọng tâm đạt đến vị trí tối ưu của chúng

Đoạn mã sau sẽ giúp triển khai thuật toán phân cụm K-means trong Python. Chúng tôi sẽ sử dụng mô-đun Scikit-learning

Hãy để chúng tôi nhập các gói cần thiết -

import matplotlib.pyplot as plt
import seaborn as sns; sns.set[]
import numpy as np
from sklearn.cluster import KMeans

Dòng mã sau đây sẽ giúp tạo tập dữ liệu hai chiều, chứa bốn đốm màu, bằng cách sử dụng make_blob từ sklearn. gói dữ liệu

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs[n_samples = 500, centers = 4,
            cluster_std = 0.40, random_state = 0]

Chúng ta có thể trực quan hóa tập dữ liệu bằng cách sử dụng đoạn mã sau -

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]

Ở đây, chúng tôi đang khởi tạo kmeans làm thuật toán KMeans, với tham số bắt buộc là có bao nhiêu cụm [n_cluster].

kmeans = KMeans[n_clusters = 4]

Chúng ta cần đào tạo mô hình K-means với dữ liệu đầu vào

kmeans.fit[X]
y_kmeans = kmeans.predict[X]
plt.scatter[X[:, 0], X[:, 1], c = y_kmeans, s = 50, cmap = 'viridis']

centers = kmeans.cluster_centers_

Mã được cung cấp bên dưới sẽ giúp chúng tôi vẽ đồ thị và trực quan hóa kết quả của máy dựa trên dữ liệu của chúng tôi và đồ đạc theo số lượng cụm sẽ được tìm thấy

plt.scatter[centers[:, 0], centers[:, 1], c = 'black', s = 200, alpha = 0.5];
plt.show[]

Thuật toán dịch chuyển trung bình

Đây là một thuật toán phân cụm phổ biến và mạnh mẽ khác được sử dụng trong học tập không giám sát. Nó không đưa ra bất kỳ giả định nào do đó nó là một thuật toán phi tham số. Nó còn được gọi là phân cụm theo thứ bậc hoặc phân tích cụm thay đổi trung bình. Sau đây sẽ là các bước cơ bản của thuật toán này -

  • Trước hết, chúng ta cần bắt đầu với các điểm dữ liệu được gán cho một cụm của riêng chúng

  • Bây giờ, nó tính toán trọng tâm và cập nhật vị trí của trọng tâm mới

  • Bằng cách lặp lại quá trình này, chúng ta tiến gần hơn đến đỉnh của cụm i. e. hướng tới khu vực có mật độ cao hơn

  • Thuật toán này dừng ở giai đoạn trọng tâm không di chuyển nữa

Với sự trợ giúp của đoạn mã sau, chúng tôi đang triển khai thuật toán phân cụm Mean Shift trong Python. Chúng tôi sẽ sử dụng mô-đun Scikit-learning

Hãy để chúng tôi nhập các gói cần thiết -

import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use["ggplot"]

Đoạn mã sau sẽ giúp tạo tập dữ liệu hai chiều, chứa bốn đốm màu, bằng cách sử dụng make_blob từ sklearn. gói dữ liệu

from sklearn.datasets.samples_generator import make_blobs

Chúng ta có thể hình dung tập dữ liệu bằng đoạn mã sau

centers = [[2,2],[4,5],[3,10]]
X, _ = make_blobs[n_samples = 500, centers = centers, cluster_std = 1]
plt.scatter[X[:,0],X[:,1]]
plt.show[]

Bây giờ, chúng ta cần huấn luyện mô hình cụm Dịch chuyển trung bình với dữ liệu đầu vào.

ms = MeanShift[]
ms.fit[X]
labels = ms.labels_
cluster_centers = ms.cluster_centers_

Đoạn mã sau sẽ in các trung tâm cụm và số cụm dự kiến ​​theo dữ liệu đầu vào -

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs[n_samples = 500, centers = 4,
            cluster_std = 0.40, random_state = 0]
0

Mã được cung cấp bên dưới sẽ giúp vẽ sơ đồ và trực quan hóa các phát hiện của máy dựa trên dữ liệu của chúng tôi và đồ đạc theo số lượng cụm sẽ được tìm thấy

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs[n_samples = 500, centers = 4,
            cluster_std = 0.40, random_state = 0]
1

Đo hiệu suất phân cụm

Dữ liệu trong thế giới thực không được tổ chức một cách tự nhiên thành một số cụm riêng biệt. Vì lý do này, không dễ để hình dung và rút ra kết luận. Đó là lý do tại sao chúng ta cần đo hiệu suất phân cụm cũng như chất lượng của nó. Nó có thể được thực hiện với sự trợ giúp của phân tích hình bóng

Phân tích hình bóng

Phương pháp này có thể được sử 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ơ bản, nó cung cấp một cách để đánh giá các tham số như số lượng cụm bằng cách cho điểm bóng. Điểm số này là thước đo đo mức độ gần gũi của từng điểm trong một cụm với các điểm trong cụm lân cận

Phân tích điểm bóng

Điểm có phạm vi [-1, 1]. Sau đây là phân tích về điểm số nà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 hoặc rất gần với ranh giới quyết định giữa hai cụm lân cận

  • Điểm -1 - Điểm âm cho biết rằng các mẫu đã được gán cho các cụm sai

Tính điểm bóng

Trong phần này, chúng ta sẽ tìm hiểu cách tính điểm bóng

Điểm Silhouette có thể được tính bằng cách sử dụng công thức sau –

$$điểm hình bóng = \frac{\left [ p-q \right ]}{max\left [ p,q \right ]}$$

Ở đây, 𝑝 là khoảng cách trung bình đến các điểm trong cụm gần nhất mà điểm dữ liệu không thuộc. Và, 𝑞 là khoảng cách trung bình trong cụm đến tất cả các điểm trong cụm của chính nó

Để tìm số lượng cụm tối ưu, chúng 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 K-mean để tìm số lượng cụm tối ưu -

Nhập các gói cần thiết như được hiển thị -

import matplotlib.pyplot as plt
import seaborn as sns; sns.set[]
import numpy as np
from sklearn.cluster import KMeans

Với sự trợ giúp của đoạn mã sau, chúng tôi sẽ tạo tập dữ liệu hai chiều, chứa bốn đốm màu, bằng cách sử dụng make_blob từ sklearn. gói dữ liệu

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs[n_samples = 500, centers = 4,
            cluster_std = 0.40, random_state = 0]
3

Khởi tạo các biến như hình -

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs[n_samples = 500, centers = 4,
            cluster_std = 0.40, random_state = 0]
4

Chúng ta cần lặp lại mô hình K-means qua tất cả các giá trị và cũng cần huấn luyện nó với dữ liệu đầu vào

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs[n_samples = 500, centers = 4,
            cluster_std = 0.40, random_state = 0]
5

Bây giờ, hãy ước tính điểm bóng cho mô hình phân cụm hiện tại bằng cách sử dụng thước đo khoảng cách Euclide -

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs[n_samples = 500, centers = 4,
            cluster_std = 0.40, random_state = 0]
6

Dòng mã sau đây sẽ giúp hiển thị số cụm cũng như điểm Silhouette

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs[n_samples = 500, centers = 4,
            cluster_std = 0.40, random_state = 0]
7

Bạn sẽ nhận được đầu ra sau -

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs[n_samples = 500, centers = 4,
            cluster_std = 0.40, random_state = 0]
8

Bây giờ, đầu ra cho số cụm tối ưu sẽ như sau -

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs[n_samples = 500, centers = 4,
            cluster_std = 0.40, random_state = 0]
9

Tìm hàng xóm gần nhất

Nếu chúng ta muốn xây dựng các hệ thống giới thiệu chẳng hạn như hệ thống giới thiệu phim thì chúng ta cần hiểu khái niệm tìm hàng xóm gần nhất. Đó là bởi vì hệ thống gợi ý sử dụng khái niệm hàng xóm gần nhất

Khái niệm tìm hàng xóm gần nhất có thể được định nghĩa là quá trình tìm điểm gần nhất với điểm đầu vào từ tập dữ liệu đã cho. Công dụng chính của thuật toán KNN]K-hàng xóm gần nhất] này là xây dựng các hệ thống phân loại phân loại một điểm dữ liệu dựa trên sự gần gũi của điểm dữ liệu đầu vào với các lớp khác nhau

Mã Python được cung cấp dưới đây giúp tìm K-láng giềng gần nhất của một tập dữ liệu nhất định -

Nhập các gói cần thiết như hình bên dưới. Ở đây, chúng tôi đang sử dụng mô-đun NearestNeighbors từ gói sklearn

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]
0

Bây giờ chúng ta hãy xác định dữ liệu đầu vào -

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]
1

Bây giờ, chúng ta cần xác định những người hàng xóm gần nhất -

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]
2

Chúng tôi cũng cần cung cấp dữ liệu thử nghiệm để tìm thấy những người hàng xóm gần nhất -

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]
3

Đoạn mã sau có thể trực quan hóa và vẽ sơ đồ dữ liệu đầu vào do chúng tôi xác định -

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]
4

Bây giờ, chúng ta cần xây dựng K Láng giềng gần nhất. Đối tượng cũng cần được đào tạo

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]
5

Bây giờ, chúng ta có thể in K hàng xóm gần nhất như sau

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]
6

Chúng ta có thể hình dung những người hàng xóm gần nhất cùng với điểm dữ liệu thử nghiệm

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]
7

Đầu ra

K hàng xóm gần nhất

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]
8

K-Bộ phân loại hàng xóm gần nhất

Trình phân loại K-Hàng xóm gần nhất [KNN] là mô hình phân loại sử dụng thuật toán hàng xóm gần nhất để phân loại một điểm dữ liệu nhất định. Chúng ta đã triển khai thuật toán KNN trong phần trước, bây giờ chúng ta sẽ xây dựng bộ phân loại KNN bằng thuật toán đó

Khái niệm về phân loại KNN

Khái niệm cơ bản của phân loại K-hàng xóm gần nhất là tìm một số được xác định trước, i. e. , 'k' − của mẫu đào tạo có khoảng cách gần nhất với mẫu mới, mẫu này phải được phân loại. Các mẫu mới sẽ nhận được nhãn từ chính những người hàng xóm. Các bộ phân loại KNN có một hằng số cố định do người dùng xá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 Euclide tiêu chuẩn là lựa chọn phổ biến nhất. Trình phân loại KNN hoạt động trực tiếp trên các mẫu đã học thay vì tạo quy tắc cho việc học. Thuật toán KNN là một trong những thuật toán học máy đơn giản nhất. Nó đã khá thành công trong một số lượng lớn các bài toán phân loại và hồi quy, chẳng hạn như nhận dạng ký tự hoặc phân tích hình ảnh

Thí dụ

Chúng tôi đang xây dựng bộ phân loại KNN để nhận dạng chữ số. Đối với điều này, chúng tôi sẽ sử dụng bộ dữ liệu MNIST. Chúng tôi sẽ viết mã này trong Jupyter Notebook

Nhập các gói cần thiết như hình bên dưới

Ở đây chúng tôi đang sử dụng mô-đun KNeighborsClassifier từ sklearn. gói hàng xóm -

plt.scatter[X[:, 0], X[:, 1], s = 50];
plt.show[]
9

Đoạn mã sau sẽ hiển thị hình ảnh của chữ số để xác minh hình ảnh nào chúng ta phải kiểm tra -

kmeans = KMeans[n_clusters = 4]
0

Bây giờ, chúng ta cần tải bộ dữ liệu MNIST. Trên thực tế có tổng số 1797 hình ảnh nhưng chúng tôi đang sử 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ữ cho mục đích thử nghiệm

kmeans = KMeans[n_clusters = 4]
1

Bây giờ, khi hiển thị hình ảnh, chúng ta có thể thấy đầu ra như sau -

kmeans = KMeans[n_clusters = 4]
2

Image_display[0]

Hình ảnh của 0 được hiển thị như sau -

Image_display[9]

Hình ảnh của 9 được hiển thị như sau -

chữ số. phím[]

Bây giờ, chúng ta cần tạo tập dữ liệu huấn luyện và kiểm tra và cung cấp tập dữ liệu kiểm tra cho bộ phân loại KNN

kmeans = KMeans[n_clusters = 4]
3

Đầu ra sau đây sẽ tạo K hàm tạo phân loại hàng xóm gần nhất -

kmeans = KMeans[n_clusters = 4]
4

Chúng tôi cần tạo mẫu thử nghiệm bằng cách cung cấp bất kỳ số tùy ý nào lớn hơn 1600, đó là các mẫu đào tạo

Học không giám sát trong Python là gì?

Học không giám sát là một loại kỹ thuật máy học [ML] được sử dụng để tìm các mẫu trong dữ liệu . Dữ liệu được cung cấp cho các thuật toán không giám sát không được gắn nhãn, điều đó có nghĩa là chỉ các biến đầu vào [x] được cung cấp mà không có biến đầu ra tương ứng.

Các ví dụ về học tập không giám sát là gì?

Một số ví dụ về thuật toán học không giám sát bao gồm Phân cụm K-Means, Phân tích thành phần chính và Phân cụm theo cấp bậc .

Sklearn có phải là TensorFlow không?

Scikit-learning và TensorFlow được thiết kế để hỗ trợ các nhà phát triển tạo và đo điểm chuẩn cho các mô hình mới, do đó, việc triển khai chức năng của chúng rất giống nhau, ngoại trừ Scikit-learning được sử dụng trong thực tế . .

Tại sao sklearn được sử dụng trong Python?

Scikit-learning [Sklearn] là thư viện mạnh mẽ và hữu ích nhất dành cho máy học trong Python. Nó cung cấp một loạt các công cụ hiệu quả để học máy và lập mô hình thống kê bao gồm phân loại, hồi quy, phân cụm và giảm kích thước thông qua giao diện nhất quán trong Python

Chủ Đề