sẽ hoàn thành hai bước đầu tiên. Vì bạn không chỉ định bất kỳ tham số nào nên nó sử dụng các giá trị tiêu chuẩn
34In [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
35In [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
Vì vậy,
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
36 sẽ cung cấp cho bạn một cụm kết tụ theo thứ bậc được liên kết duy nhất của In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
37. Phân cụm này là một loại phân cấp các giải pháp. Từ hệ thống phân cấp này, bạn nhận được một số thông tin về cấu trúc dữ liệu của mình. Những gì bạn có thể làm bây giờ là Phương pháp phân cụm k-means là một kỹ thuật học máy không giám sát được sử dụng để xác định các cụm đối tượng dữ liệu trong tập dữ liệu. Có nhiều loại phương pháp phân cụm khác nhau, nhưng k-means là một trong những phương pháp lâu đời nhất và dễ tiếp cận nhất. Những đặc điểm này làm cho việc triển khai phân cụm k-means trong Python khá đơn giản, ngay cả đối với các lập trình viên mới làm quen và các nhà khoa học dữ liệu
Nếu bạn quan tâm đến việc tìm hiểu cách thức và thời điểm triển khai phân cụm k-means trong Python, thì đây là nơi phù hợp. Bạn sẽ xem qua một ví dụ toàn diện về phân cụm k-means bằng Python, từ tiền xử lý dữ liệu đến đánh giá kết quả
Trong hướng dẫn này, bạn sẽ học
- K-nghĩa là phân cụm là gì
- Khi nào sử dụng phân cụm k-means để phân tích dữ liệu của bạn
- Cách triển khai phân cụm k-means trong Python với scikit-learning
- Cách chọn một số cụm có ý nghĩa
Nhấp vào liên kết bên dưới để tải xuống mã mà bạn sẽ sử dụng để làm theo cùng với các ví dụ trong hướng dẫn này và triển khai quy trình phân cụm k-means của riêng bạn
Tải xuống mã mẫu. Nhấp vào đây để lấy mã bạn sẽ sử dụng để tìm hiểu cách viết đường dẫn phân cụm k-means trong hướng dẫn này
Phân cụm là gì?
Phân cụm là một tập hợp các kỹ thuật được sử dụng để phân vùng dữ liệu thành các nhóm hoặc cụm. Các cụm được định nghĩa một cách lỏng lẻo là các nhóm đối tượng dữ liệu giống với các đối tượng khác trong cụm của chúng hơn là với các đối tượng dữ liệu trong các cụm khác. Trong thực tế, phân cụm giúp xác định hai phẩm chất của dữ liệu
- ý nghĩa
- hữu ích
Các cụm có ý nghĩa mở rộng kiến thức miền. Ví dụ, trong lĩnh vực y tế, các nhà nghiên cứu đã áp dụng phân cụm cho các thí nghiệm biểu hiện gen. Kết quả phân nhóm đã xác định các nhóm bệnh nhân phản ứng khác nhau với các phương pháp điều trị y tế
Mặt khác, các cụm hữu ích đóng vai trò là bước trung gian trong đường dẫn dữ liệu. Ví dụ: các doanh nghiệp sử dụng phân cụm để phân khúc khách hàng. Kết quả phân cụm phân chia khách hàng thành các nhóm có lịch sử mua hàng tương tự, sau đó doanh nghiệp có thể sử dụng để tạo các chiến dịch quảng cáo được nhắm mục tiêu
Ghi chú. Bạn sẽ tìm hiểu về các kỹ thuật học máy không giám sát trong hướng dẫn này. Nếu bạn muốn tìm hiểu thêm về các kỹ thuật học máy có giám sát, hãy xem Hồi quy logistic trong Python
Có nhiều ứng dụng khác của phân cụm, chẳng hạn như phân cụm tài liệu và phân tích mạng xã hội. Các ứng dụng này có liên quan trong hầu hết mọi ngành, làm cho việc phân cụm trở thành một kỹ năng có giá trị cho các chuyên gia làm việc với dữ liệu trong bất kỳ lĩnh vực nào
Loại bỏ các quảng cáoTổng quan về kỹ thuật phân cụm
Bạn có thể thực hiện phân cụm bằng nhiều cách tiếp cận khác nhau—thực tế là có rất nhiều loại thuật toán phân cụm. Mỗi loại này đều có điểm mạnh và điểm yếu riêng. Điều này có nghĩa là các thuật toán phân cụm nhất định sẽ dẫn đến việc gán cụm tự nhiên hơn tùy thuộc vào dữ liệu đầu vào
Ghi chú. Nếu bạn muốn tìm hiểu về các thuật toán phân cụm không được đề cập trong phần này, thì hãy xem Khảo sát toàn diện về các thuật toán phân cụm để có đánh giá tuyệt vời về các kỹ thuật phổ biến
Việc chọn một thuật toán phân cụm thích hợp cho tập dữ liệu của bạn thường khó khăn do có nhiều lựa chọn. Một số yếu tố quan trọng ảnh hưởng đến quyết định này bao gồm các đặc điểm của cụm, tính năng của tập dữ liệu, số lượng ngoại lệ và số lượng đối tượng dữ liệu
Bạn sẽ khám phá cách các yếu tố này giúp xác định cách tiếp cận nào phù hợp nhất bằng cách xem xét ba loại thuật toán phân cụm phổ biến
- phân cụm một phần
- phân cụm theo thứ bậc
- Phân cụm dựa trên mật độ
Thật đáng để xem xét các danh mục này ở cấp độ cao trước khi chuyển ngay sang phương tiện k. Bạn sẽ tìm hiểu điểm mạnh và điểm yếu của từng danh mục để cung cấp ngữ cảnh về cách phương tiện k phù hợp với bối cảnh của các thuật toán phân cụm
Phân cụm một phần
Phân cụm từng phần chia các đối tượng dữ liệu thành các nhóm không chồng chéo. Nói cách khác, không có đối tượng nào có thể là thành viên của nhiều hơn một cụm và mỗi cụm phải có ít nhất một đối tượng
Các kỹ thuật này yêu cầu người dùng chỉ định số lượng cụm, được biểu thị bằng biến k. Nhiều thuật toán phân cụm phân vùng hoạt động thông qua một quy trình lặp để gán các tập hợp con của các điểm dữ liệu thành k cụm. Hai ví dụ về thuật toán phân cụm là k-means và k-medoids
Các thuật toán này đều không xác định, có nghĩa là chúng có thể tạo ra các kết quả khác nhau từ hai lần chạy riêng biệt ngay cả khi các lần chạy dựa trên cùng một đầu vào
Phương pháp phân cụm từng phần có một số điểm mạnh
- Chúng hoạt động tốt khi các cụm có dạng hình cầu
- Chúng có thể mở rộng theo độ phức tạp của thuật toán
Họ cũng có một số điểm yếu
- Chúng không phù hợp với các cụm có hình dạng phức tạp và kích thước khác nhau
- Chúng bị hỏng khi được sử dụng với các cụm có mật độ khác nhau
Phân cụm theo cấp bậc
Phân cụm theo cấp bậc xác định các nhiệm vụ của cụm bằng cách xây dựng hệ thống phân cấp. Điều này được thực hiện theo cách tiếp cận từ dưới lên hoặc từ trên xuống
Phân cụm kết tụ là cách tiếp cận từ dưới lên. Nó hợp nhất hai điểm giống nhau nhất cho đến khi tất cả các điểm được hợp nhất thành một cụm duy nhất
Phân cụm chia rẽ là cách tiếp cận từ trên xuống. Nó bắt đầu với tất cả các điểm là một cụm và chia nhỏ các cụm ít giống nhau nhất ở mỗi bước cho đến khi chỉ còn lại các điểm dữ liệu duy nhất
Các phương pháp này tạo ra một hệ thống phân cấp các điểm dựa trên cây được gọi là dendrogram. Tương tự như phân cụm theo phân vùng, trong phân cụm theo thứ bậc, số lượng cụm [k] thường được người dùng xác định trước. Các cụm được chỉ định bằng cách cắt dendrogram ở độ sâu xác định dẫn đến k nhóm dendrogram nhỏ hơn
Không giống như nhiều kỹ thuật phân cụm theo phân vùng, phân cụm theo cấp bậc là một quy trình xác định, nghĩa là việc gán cụm sẽ không thay đổi khi bạn chạy một thuật toán hai lần trên cùng một dữ liệu đầu vào
Điểm mạnh của các phương pháp phân cụm theo cấp bậc bao gồm:
- Chúng thường tiết lộ các chi tiết tốt hơn về mối quan hệ giữa các đối tượng dữ liệu
- Họ cung cấp một chương trình dendro có thể hiểu được
Những điểm yếu của phương pháp phân cụm theo thứ bậc bao gồm:
- Chúng đắt tiền về mặt tính toán đối với độ phức tạp của thuật toán
- Họ nhạy cảm với tiếng ồn và ngoại lệ
Phân cụm dựa trên mật độ
Phân cụm dựa trên mật độ xác định phân bổ cụm dựa trên mật độ của các điểm dữ liệu trong một vùng. Các cụm được chỉ định ở nơi có mật độ điểm dữ liệu cao được phân tách bằng các vùng có mật độ thấp
Không giống như các danh mục phân cụm khác, phương pháp này không yêu cầu người dùng chỉ định số lượng cụm. Thay vào đó, có một tham số dựa trên khoảng cách hoạt động như một ngưỡng có thể điều chỉnh. Ngưỡng này xác định mức độ gần các điểm phải được coi là thành viên cụm
Ví dụ về các thuật toán phân cụm dựa trên mật độ bao gồm Phân cụm ứng dụng không gian dựa trên mật độ có nhiễu hoặc DBSCAN và Sắp xếp các điểm để xác định cấu trúc phân cụm hoặc OPTICS
Điểm mạnh của các phương pháp phân cụm dựa trên mật độ bao gồm:
- Họ xuất sắc trong việc xác định các cụm hình dạng không hình cầu
- Họ có khả năng chống lại các ngoại lệ
Điểm yếu của các phương pháp phân cụm dựa trên mật độ bao gồm:
- Chúng không phù hợp để phân cụm trong không gian nhiều chiều
- Họ gặp khó khăn trong việc xác định các cụm có mật độ khác nhau
Cách thực hiện phân cụm K-Means trong Python
Trong phần này, bạn sẽ thực hiện chuyến tham quan từng bước về phiên bản truyền thống của thuật toán k-means. Hiểu các chi tiết của thuật toán là một bước cơ bản trong quá trình viết đường dẫn phân cụm k-mean của bạn trong Python. Những gì bạn học được trong phần này sẽ giúp bạn quyết định xem phương tiện k có phải là lựa chọn đúng đắn để giải quyết vấn đề phân cụm của bạn hay không
Hiểu thuật toán K-Means
Phương tiện k thông thường chỉ cần một vài bước. Bước đầu tiên là chọn ngẫu nhiên k trọng tâm, trong đó k bằng số cụm bạn chọn. Centroid là các điểm dữ liệu đại diện cho trung tâm của một cụm
Yếu tố chính của thuật toán hoạt động theo quy trình gồm hai bước được gọi là tối đa hóa kỳ vọng. Bước kỳ vọng gán từng điểm dữ liệu cho trọng tâm gần nhất của nó. Sau đó, bước tối đa hóa tính toán giá trị trung bình của tất cả các điểm cho từng cụm và đặt trọng tâm mới. Đây là phiên bản thông thường của thuật toán k-means trông như thế nào
Chất lượng của các phép gán cụm được xác định bằng cách tính tổng sai số bình phương [SSE] sau khi các trọng tâm hội tụ hoặc khớp với phép gán của lần lặp trước đó. SSE được định nghĩa là tổng các khoảng cách Euclide bình phương của mỗi điểm đến trọng tâm gần nhất của nó. Vì đây là thước đo lỗi nên mục tiêu của k-means là cố gắng giảm thiểu giá trị này
Hình dưới đây cho thấy các trọng tâm và SSE cập nhật qua năm lần lặp đầu tiên từ hai lần chạy khác nhau của thuật toán k-means trên cùng một tập dữ liệu
Mục đích của hình này là để chỉ ra rằng việc khởi tạo các trọng tâm là một bước quan trọng. Nó cũng nêu bật việc sử dụng SSE làm thước đo hiệu suất phân cụm. Sau khi chọn một số cụm và trọng tâm ban đầu, bước tối đa hóa kỳ vọng được lặp lại cho đến khi các vị trí trọng tâm đạt đến sự hội tụ và không thay đổi
Bước khởi tạo ngẫu nhiên làm cho thuật toán k-mean trở nên không xác định, nghĩa là các phép gán cụm sẽ thay đổi nếu bạn chạy cùng một thuật toán hai lần trên cùng một tập dữ liệu. Các nhà nghiên cứu thường chạy một số lần khởi tạo toàn bộ thuật toán k-means và chọn các phép gán cụm từ lần khởi tạo với SSE thấp nhất
Viết mã phân cụm K-Means đầu tiên của bạn bằng Python
Rất may, có một triển khai mạnh mẽ về phân cụm k-mean trong Python từ gói học máy phổ biến scikit-learn. Bạn sẽ học cách viết triển khai thực tế của thuật toán k-mean bằng cách sử dụng phiên bản scikit-learning của thuật toán
Ghi chú. Nếu bạn muốn hiểu sâu hơn về cách viết thuật toán k-means của riêng mình bằng Python, thì hãy xem Sổ tay khoa học dữ liệu Python
Mã trong hướng dẫn này yêu cầu một số gói Python bên ngoài phổ biến và giả định rằng bạn đã cài đặt Python với Anaconda. Để biết thêm thông tin về cách thiết lập môi trường Python cho máy học trong Windows, hãy đọc qua Thiết lập Python cho máy học trên Windows
Nếu không, bạn có thể bắt đầu bằng cách cài đặt các gói cần thiết
[base] $ conda install matplotlib numpy pandas seaborn scikit-learn ipython
[base] $ conda install -c conda-forge kneed
Mã này được trình bày để bạn có thể theo dõi trong bảng điều khiển
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
7 hoặc Jupyter Notebook. Nhấp vào dấu nhắc [In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
8] ở trên cùng bên phải của mỗi khối mã để xem mã được định dạng để sao chép-dán. Bạn cũng có thể tải xuống mã nguồn được sử dụng trong bài viết này bằng cách nhấp vào liên kết bên dướiTải xuống mã mẫu. Nhấp vào đây để lấy mã bạn sẽ sử dụng để tìm hiểu cách viết đường dẫn phân cụm k-means trong hướng dẫn này
Bước này sẽ nhập các mô-đun cần thiết cho tất cả mã trong phần này
>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
Bạn có thể tạo dữ liệu từ GIF ở trên bằng cách sử dụng
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
9, một chức năng tiện lợi trong scikit-learning được sử dụng để tạo các cụm tổng hợp. In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
9 sử dụng các tham số này
1 là tổng số mẫu cần tạoIn [5]: scaler = StandardScaler[] ...: scaled_features = scaler.fit_transform[features]
2 là số lượng trung tâm để tạo raIn [5]: scaler = StandardScaler[] ...: scaled_features = scaler.fit_transform[features]
3 là độ lệch chuẩnIn [5]: scaler = StandardScaler[] ...: scaled_features = scaler.fit_transform[features]
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
9 trả về một bộ gồm hai giá trị- Một mảng NumPy hai chiều với các giá trị x và y cho mỗi mẫu
- Mảng NumPy một chiều chứa các nhãn cụm cho từng mẫu
Ghi chú. Nhiều thuật toán scikit-learning phụ thuộc rất nhiều vào NumPy trong quá trình triển khai của chúng. Nếu bạn muốn tìm hiểu thêm về mảng NumPy, hãy xem Look Ma, No For-Loops. Lập trình mảng với NumPy
Tạo dữ liệu tổng hợp và nhãn
>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
0Các thuật toán học máy không xác định như phương tiện k rất khó tái tạo. Tham số
In [5]: scaler = StandardScaler[]
...: scaled_features = scaler.fit_transform[features]
5 được đặt thành giá trị nguyên để bạn có thể theo dõi dữ liệu được trình bày trong hướng dẫn. Trong thực tế, tốt nhất là để lại giá trị mặc định là In [5]: scaler = StandardScaler[]
...: scaled_features = scaler.fit_transform[features]
5, In [5]: scaler = StandardScaler[]
...: scaled_features = scaler.fit_transform[features]
7Dưới đây là năm phần tử đầu tiên cho mỗi biến được trả về bởi
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
9>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
Tập dữ liệu thường chứa các đặc điểm số đã được đo bằng các đơn vị khác nhau, chẳng hạn như chiều cao [tính bằng inch] và cân nặng [tính bằng pound]. Một thuật toán học máy sẽ coi cân nặng quan trọng hơn chiều cao chỉ vì các giá trị của cân nặng lớn hơn và có độ biến thiên cao hơn từ người này sang người khác
Các thuật toán học máy cần xem xét tất cả các tính năng trên một sân chơi bình đẳng. Điều đó có nghĩa là các giá trị cho tất cả các tính năng phải được chuyển đổi thành cùng một tỷ lệ
Quá trình chuyển đổi các tính năng số để sử dụng cùng một tỷ lệ được gọi là tỷ lệ tính năng. Đây là bước tiền xử lý dữ liệu quan trọng đối với hầu hết các thuật toán học máy dựa trên khoảng cách vì nó có thể tác động đáng kể đến hiệu suất thuật toán của bạn
Có một số cách tiếp cận để thực hiện nhân rộng tính năng. Một cách tuyệt vời để xác định kỹ thuật nào phù hợp với tập dữ liệu của bạn là đọc tài liệu tiền xử lý của scikit-learn
Trong ví dụ này, bạn sẽ sử dụng lớp
In [5]: scaler = StandardScaler[]
...: scaled_features = scaler.fit_transform[features]
9. Lớp này thực hiện một loại tính năng mở rộng quy mô được gọi là tiêu chuẩn hóa. Quy mô tiêu chuẩn hóa hoặc thay đổi giá trị cho từng đối tượng số trong tập dữ liệu của bạn để các đối tượng có giá trị trung bình là 0 và độ lệch chuẩn là 1>>>
In [5]: scaler = StandardScaler[]
...: scaled_features = scaler.fit_transform[features]
Hãy xem cách các giá trị đã được chia tỷ lệ trong
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
80>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
8Bây giờ dữ liệu đã sẵn sàng để được phân cụm. Lớp công cụ ước tính
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
81 trong scikit-learning là nơi bạn đặt tham số thuật toán trước khi khớp công cụ ước tính với dữ liệu. Việc triển khai scikit-learning rất linh hoạt, cung cấp một số tham số có thể được điều chỉnhDưới đây là các tham số được sử dụng trong ví dụ này
82 điều khiển kỹ thuật khởi tạo. Phiên bản tiêu chuẩn của thuật toán k-means được triển khai bằng cách đặtIn [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
82 thànhIn [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
84. Đặt giá trị này thànhIn [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
85 sẽ sử dụng một thủ thuật nâng cao để tăng tốc độ hội tụ mà bạn sẽ sử dụng sau nàyIn [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
86 đặt k cho bước phân cụm. Đây là thông số quan trọng nhất cho k-meansIn [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
87 đặt số lần khởi tạo để thực hiện. Điều này rất quan trọng vì hai lần chạy có thể hội tụ trên các nhiệm vụ cụm khác nhau. Hành vi mặc định cho thuật toán scikit-learning là thực hiện mười lần chạy k-mean và trả về kết quả của lần chạy có SSE thấp nhấtIn [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
88 đặt số lần lặp lại tối đa cho mỗi lần khởi tạo thuật toán k-meansIn [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
Khởi tạo lớp
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
81 với các đối số sau>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
9Tên tham số khớp với ngôn ngữ được sử dụng để mô tả thuật toán k-means trước đó trong hướng dẫn. Bây giờ lớp k-mean đã sẵn sàng, bước tiếp theo là khớp nó với dữ liệu trong
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
80. Thao tác này sẽ thực hiện mười lần chạy thuật toán k-mean trên dữ liệu của bạn với tối đa 291 lần lặp lại mỗi lần chạy>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
2Số liệu thống kê từ lần chạy khởi tạo với SSE thấp nhất có sẵn dưới dạng thuộc tính của
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
92 sau khi gọi In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
93>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
5Cuối cùng, các phép gán cụm được lưu trữ dưới dạng mảng NumPy một chiều trong
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
94. Dưới đây là năm nhãn được dự đoán đầu tiên>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
7Lưu ý rằng thứ tự của nhãn cụm cho hai đối tượng dữ liệu đầu tiên đã bị đảo lộn. Thứ tự là
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
95 trong In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
96 nhưng In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
97 trong In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
94 mặc dù những đối tượng dữ liệu đó vẫn là thành viên của cụm ban đầu của chúng trong In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
99Hành vi này là bình thường vì thứ tự của nhãn cụm phụ thuộc vào quá trình khởi tạo. Cụm 0 từ lần chạy đầu tiên có thể được gắn nhãn cụm 1 trong lần chạy thứ hai và ngược lại. Điều này không ảnh hưởng đến các chỉ số đánh giá phân cụm
Loại bỏ các quảng cáoChọn số cụm thích hợp
Trong phần này, bạn sẽ xem xét hai phương pháp thường được sử dụng để đánh giá số cụm phù hợp
- phương pháp khuỷu tay
- hệ số bóng
Chúng thường được sử dụng như các kỹ thuật đánh giá bổ sung hơn là một kỹ thuật được ưu tiên hơn kỹ thuật kia. Để thực hiện phương pháp khuỷu tay, hãy chạy một số phương tiện k, tăng 320 với mỗi lần lặp lại và ghi lại SSE
>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
0Khối mã trước đã sử dụng toán tử giải nén từ điển của Python [
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
21]. Để tìm hiểu thêm về toán tử Python mạnh mẽ này, hãy xem Cách lặp qua từ điển trong PythonKhi bạn vẽ biểu đồ SSE dưới dạng hàm số lượng cụm, hãy lưu ý rằng SSE tiếp tục giảm khi bạn tăng
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
20. Khi nhiều trọng tâm được thêm vào, khoảng cách từ mỗi điểm đến trọng tâm gần nhất của nó sẽ giảmCó một điểm hấp dẫn nơi đường cong SSE bắt đầu uốn cong được gọi là điểm khuỷu tay. Giá trị x của điểm này được cho là sự đánh đổi hợp lý giữa lỗi và số lượng cụm. Trong ví dụ này, khuỷu tay nằm ở
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
23>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
1Đoạn mã trên tạo ra cốt truyện sau
Xác định điểm khuỷu tay trong đường cong SSE không phải lúc nào cũng đơn giản. Nếu bạn gặp sự cố khi chọn điểm khuỷu tay của đường cong, thì bạn có thể sử dụng gói Python, kneed, để xác định điểm khuỷu tay theo chương trình
>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
2Hệ số hình bóng là thước đo sự gắn kết và phân tách cụm. Nó định lượng mức độ phù hợp của một điểm dữ liệu với cụm được chỉ định của nó dựa trên hai yếu tố
- Mức độ gần của điểm dữ liệu với các điểm khác trong cụm
- Điểm dữ liệu cách các điểm trong các cụm khác bao xa
Các giá trị hệ số hình bóng nằm trong khoảng từ
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
24 đến In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
25. Số lượng lớn hơn chỉ ra rằng các mẫu ở gần cụm của chúng hơn so với các cụm khácTrong triển khai scikit-learning của hệ số hình bóng, hệ số hình bóng trung bình của tất cả các mẫu được tóm tắt thành một điểm. Hàm
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
26 cần tối thiểu hai cụm, nếu không nó sẽ đưa ra một ngoại lệLặp lại các giá trị của
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
20. Lần này, thay vì tính toán SSE, hãy tính toán hệ số bóng>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
3Vẽ sơ đồ điểm bóng trung bình cho mỗi
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
20 cho thấy lựa chọn tốt nhất cho In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
20 là In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
50 vì nó có điểm tối đa>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
4Đoạn mã trên tạo ra cốt truyện sau
Cuối cùng, quyết định của bạn về số lượng cụm sẽ sử dụng phải được hướng dẫn bởi sự kết hợp giữa kiến thức miền và chỉ số đánh giá cụm
Loại bỏ các quảng cáoĐánh giá hiệu suất phân cụm bằng các kỹ thuật nâng cao
Phương pháp khuỷu tay và hệ số hình bóng đánh giá hiệu suất phân cụm mà không cần sử dụng nhãn sự thật cơ bản. Nhãn sự thật cơ bản phân loại các điểm dữ liệu thành các nhóm dựa trên sự phân công của con người hoặc thuật toán hiện có. Các loại số liệu này cố gắng hết sức để đề xuất số lượng cụm chính xác nhưng có thể gây hiểu nhầm khi sử dụng mà không có ngữ cảnh
Ghi chú. Trong thực tế, rất hiếm khi gặp các bộ dữ liệu có nhãn sự thật cơ bản
Khi so sánh phương tiện k với cách tiếp cận dựa trên mật độ trên các cụm không hình cầu, kết quả từ phương pháp khuỷu tay và hệ số bóng hiếm khi phù hợp với trực giác của con người. Kịch bản này nêu bật lý do tại sao các kỹ thuật đánh giá phân cụm nâng cao là cần thiết. Để trực quan hóa một ví dụ, hãy nhập các mô-đun bổ sung này
>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
5Lần này, hãy sử dụng
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
51 để tạo dữ liệu tổng hợp theo hình lưỡi liềm>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
6Khớp cả thuật toán k-means và DBSCAN với dữ liệu mới và đánh giá hiệu suất một cách trực quan bằng cách vẽ đồ thị các phép gán cụm với Matplotlib
>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
7In hệ số hình bóng cho mỗi trong hai thuật toán và so sánh chúng. Hệ số hình bóng cao hơn cho thấy các cụm tốt hơn, điều này gây hiểu lầm trong trường hợp này
>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
8Hệ số hình bóng cao hơn đối với thuật toán k-mean. Thuật toán DBSCAN dường như tìm thấy nhiều cụm tự nhiên hơn theo hình dạng của dữ liệu
Điều này gợi ý rằng bạn cần một phương pháp tốt hơn để so sánh hiệu suất của hai thuật toán phân cụm này
Nếu bạn quan tâm, bạn có thể tìm mã cho cốt truyện trên bằng cách mở rộng hộp bên dưới
Lưỡi liềm biểu đồHiển thị/Ẩn
Để tìm hiểu thêm về vẽ đồ thị bằng Matplotlib và Python, hãy xem Vẽ đồ thị bằng Python với Matplotlib [Hướng dẫn]. Đây là cách bạn có thể vẽ biểu đồ so sánh hai thuật toán trong ví dụ về trăng lưỡi liềm
>>>
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
9Vì các nhãn sự thật cơ bản đã được biết, nên có thể sử dụng chỉ số phân cụm để xem xét các nhãn trong đánh giá của nó. Bạn có thể sử dụng triển khai scikit-learning của một số liệu chung được gọi là chỉ số rand được điều chỉnh [ARI]. Không giống như hệ số hình bóng, ARI sử dụng phép gán cụm thực để đo lường sự giống nhau giữa nhãn thực và nhãn dự đoán
So sánh kết quả phân cụm của DBSCAN và k-means sử dụng ARI làm chỉ số hiệu suất
>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
00Các giá trị đầu ra ARI nằm trong khoảng từ
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
24 đến In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
25. Điểm gần với In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
54 biểu thị các bài tập ngẫu nhiên và điểm gần với In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
25 biểu thị các cụm được dán nhãn hoàn hảoDựa trên đầu ra ở trên, bạn có thể thấy rằng hệ số hình bóng bị sai lệch. ARI cho thấy DBSCAN là lựa chọn tốt nhất cho ví dụ về lưỡi liềm tổng hợp so với phương tiện k
Có một số số liệu đánh giá chất lượng của các thuật toán phân cụm. Đọc qua các triển khai trong scikit-learning sẽ giúp bạn chọn chỉ số đánh giá phân cụm phù hợp
Cách xây dựng đường ống phân cụm K-Means trong Python
Bây giờ bạn đã có hiểu biết cơ bản về phân cụm k-mean trong Python, đã đến lúc thực hiện phân cụm k-mean trên tập dữ liệu trong thế giới thực. Những dữ liệu này chứa các giá trị biểu hiện gen từ một bản thảo được tác giả bởi các nhà điều tra dự án phân tích Pan-Cancer của The Cancer Genome Atlas [TCGA]
Có
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
56 mẫu [hàng] đại diện cho năm phân nhóm ung thư riêng biệt. Mỗi mẫu có giá trị biểu hiện gen cho In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
57 gen [cột]. Tập dữ liệu có sẵn từ Kho lưu trữ học máy của UC Irvine, nhưng bạn có thể sử dụng mã Python bên dưới để lấy dữ liệu theo chương trìnhĐể làm theo các ví dụ bên dưới, bạn có thể tải xuống mã nguồn bằng cách nhấp vào liên kết sau
Tải xuống mã mẫu. Nhấp vào đây để lấy mã bạn sẽ sử dụng để tìm hiểu cách viết đường dẫn phân cụm k-means trong hướng dẫn này
Trong phần này, bạn sẽ xây dựng một quy trình phân cụm k-means mạnh mẽ. Vì bạn sẽ thực hiện nhiều phép biến đổi dữ liệu đầu vào ban đầu, quy trình bán hàng của bạn cũng sẽ đóng vai trò là một khung phân cụm thực tế
Xây dựng đường ống phân cụm K-Means
Giả sử bạn muốn bắt đầu với một không gian tên mới, hãy nhập tất cả các mô-đun cần thiết để xây dựng và đánh giá quy trình, bao gồm pandas và seaborn để có hình ảnh hóa nâng cao hơn
>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
01Tải xuống và trích xuất bộ dữ liệu TCGA từ UCI
>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
02Sau khi quá trình tải xuống và giải nén hoàn tất, bạn sẽ có một thư mục giống như thế này
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
03Lớp
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
81 trong scikit-learning yêu cầu một mảng NumPy làm đối số. Gói NumPy có chức năng trợ giúp để tải dữ liệu từ tệp văn bản vào bộ nhớ dưới dạng mảng NumPy>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
04Kiểm tra ba cột dữ liệu đầu tiên cho năm mẫu đầu tiên cũng như nhãn cho năm mẫu đầu tiên
>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
05Biến
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
59 chứa tất cả các giá trị biểu hiện gen từ gen In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
57. In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
71 là các loại ung thư cho từng mẫu trong số các mẫu In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
56. Bản ghi đầu tiên trong In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
59 tương ứng với nhãn đầu tiên trong In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
96Các nhãn là các chuỗi chứa chữ viết tắt của các loại ung thư
75. Ung thư biểu mô xâm lấn vúIn [1]: import matplotlib.pyplot as plt ...: from kneed import KneeLocator ...: from sklearn.datasets import make_blobs ...: from sklearn.cluster import KMeans ...: from sklearn.metrics import silhouette_score ...: from sklearn.preprocessing import StandardScaler
76. ung thư biểu mô tuyến đại tràngIn [1]: import matplotlib.pyplot as plt ...: from kneed import KneeLocator ...: from sklearn.datasets import make_blobs ...: from sklearn.cluster import KMeans ...: from sklearn.metrics import silhouette_score ...: from sklearn.preprocessing import StandardScaler
77. Ung thư biểu mô tế bào sáng thận thậnIn [1]: import matplotlib.pyplot as plt ...: from kneed import KneeLocator ...: from sklearn.datasets import make_blobs ...: from sklearn.cluster import KMeans ...: from sklearn.metrics import silhouette_score ...: from sklearn.preprocessing import StandardScaler
78. ung thư biểu mô phổiIn [1]: import matplotlib.pyplot as plt ...: from kneed import KneeLocator ...: from sklearn.datasets import make_blobs ...: from sklearn.cluster import KMeans ...: from sklearn.metrics import silhouette_score ...: from sklearn.preprocessing import StandardScaler
79. ung thư tuyến tiền liệtIn [1]: import matplotlib.pyplot as plt ...: from kneed import KneeLocator ...: from sklearn.datasets import make_blobs ...: from sklearn.cluster import KMeans ...: from sklearn.metrics import silhouette_score ...: from sklearn.preprocessing import StandardScaler
Để sử dụng các nhãn này trong các phương pháp đánh giá, trước tiên bạn cần chuyển đổi các chữ viết tắt thành số nguyên với
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
00>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
06Vì
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
01 đã được khớp với dữ liệu, bạn có thể thấy các lớp duy nhất được biểu diễn bằng cách sử dụng In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
02. Lưu trữ độ dài của mảng vào biến In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
86 để sử dụng sau>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
07Trong các quy trình học máy thực tế, dữ liệu thường trải qua nhiều chuỗi biến đổi trước khi đưa vào thuật toán phân cụm. Bạn đã tìm hiểu về tầm quan trọng của một trong các bước chuyển đổi này, nhân rộng tính năng, trước đó trong hướng dẫn này. Một kỹ thuật chuyển đổi dữ liệu quan trọng không kém là giảm kích thước, giúp giảm số lượng đối tượng trong tập dữ liệu bằng cách loại bỏ hoặc kết hợp chúng
Các kỹ thuật giảm kích thước giúp giải quyết vấn đề với các thuật toán học máy được gọi là lời nguyền của kích thước. Nói tóm lại, khi số lượng tính năng tăng lên, không gian tính năng trở nên thưa thớt. Sự thưa thớt này khiến các thuật toán khó tìm các đối tượng dữ liệu gần nhau trong không gian nhiều chiều hơn. Vì bộ dữ liệu biểu hiện gen có hơn 304 tính năng, nên nó đủ điều kiện là một ứng cử viên tuyệt vời để giảm kích thước
Phân tích thành phần chính [PCA] là một trong nhiều kỹ thuật giảm kích thước. PCA biến đổi dữ liệu đầu vào bằng cách chiếu dữ liệu đó vào một số lượng kích thước thấp hơn được gọi là các thành phần. Các thành phần nắm bắt sự thay đổi của dữ liệu đầu vào thông qua sự kết hợp tuyến tính của các tính năng của dữ liệu đầu vào
Ghi chú. Phần mô tả đầy đủ về PCA nằm ngoài phạm vi của hướng dẫn này, nhưng bạn có thể tìm hiểu thêm về nó trong hướng dẫn sử dụng scikit-learning
Khối mã tiếp theo giới thiệu cho bạn khái niệm về đường ống scikit-learning. Lớp scikit-learning
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
05 là một triển khai cụ thể của ý tưởng trừu tượng về quy trình học máyDữ liệu biểu hiện gen của bạn không ở định dạng tối ưu cho lớp
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
81, vì vậy, bạn sẽ cần xây dựng một quy trình tiền xử lý. Quy trình sẽ triển khai một giải pháp thay thế cho lớp In [5]: scaler = StandardScaler[]
...: scaled_features = scaler.fit_transform[features]
9 có tên là In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
08 để mở rộng quy mô đối tượng. Bạn sử dụng In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
08 khi bạn không cho rằng hình dạng của tất cả các đối tượng địa lý của mình tuân theo phân phối chuẩnBước tiếp theo trong quy trình tiền xử lý của bạn sẽ triển khai lớp
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
10 để thực hiện giảm kích thước>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
08Bây giờ bạn đã xây dựng một quy trình để xử lý dữ liệu, bạn sẽ xây dựng một quy trình riêng để thực hiện phân cụm k-means. Bạn sẽ ghi đè các đối số mặc định sau của lớp
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
81trong đó. Bạn sẽ sử dụng
85 thay vìIn [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
84 để đảm bảo các trọng tâm được khởi tạo với khoảng cách giữa chúng. Trong hầu hết các trường hợp, đây sẽ là một cải tiến so vớiIn [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
84In [3]: features[:5] Out[3]: array[[[ 9.77075874, 3.27621022], [ -9.71349666, 11.27451802], [ -6.91330582, -9.34755911], [-10.86185913, -10.75063497], [ -8.50038027, -4.54370383]]] In [4]: true_labels[:5] Out[4]: array[[1, 0, 2, 2, 2]]
n_init. Bạn sẽ tăng số lần khởi tạo để đảm bảo tìm được giải pháp ổn định
max_iter. Bạn sẽ tăng số lần lặp lại cho mỗi lần khởi tạo để đảm bảo rằng phương tiện k sẽ hội tụ
Xây dựng quy trình phân cụm k-means với các đối số do người dùng xác định trong hàm tạo
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
81>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
09Lớp
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
05 có thể được xâu chuỗi để tạo thành một đường dẫn lớn hơn. Xây dựng một quy trình phân cụm k-mean từ đầu đến cuối bằng cách chuyển các quy trình In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
17 và In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
18 đến In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
05>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
0Gọi
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
93 với In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
59 làm đối số thực hiện tất cả các bước quy trình trên In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
59>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
1Đường ống thực hiện tất cả các bước cần thiết để thực hiện phân cụm k-means trên dữ liệu biểu hiện gen. Tùy thuộc vào REPL Python của bạn,
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
93 có thể in bản tóm tắt về quy trình. Các đối tượng được xác định bên trong đường ống có thể truy cập bằng tên bước của chúngĐánh giá hiệu suất bằng cách tính toán hệ số hình bóng
>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
2Tính cả ARI, vì có sẵn các nhãn cụm sự thật cơ bản
>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
3Như đã đề cập trước đó, thang đo cho từng chỉ số hiệu suất phân cụm này nằm trong khoảng từ -1 đến 1. Hệ số hình bóng bằng 0 cho biết các cụm chồng chéo lên nhau đáng kể và hệ số hình bóng bằng 1 cho biết các cụm được phân tách rõ ràng. Điểm ARI bằng 0 cho biết nhãn cụm được chỉ định ngẫu nhiên và điểm ARI bằng 1 nghĩa là nhãn thực và nhãn dự đoán tạo thành cụm giống hệt nhau
Vì bạn đã chỉ định
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
24 trong bước PCA của quy trình phân cụm k-mean, nên bạn cũng có thể trực quan hóa dữ liệu trong ngữ cảnh của nhãn thực và nhãn dự đoán. Vẽ kết quả bằng cách sử dụng DataFrame của gấu trúc và thư viện vẽ đồ thị trên biển>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
4Đây là cốt truyện trông như thế nào
Biểu diễn trực quan của các cụm xác nhận kết quả của hai chỉ số đánh giá phân cụm. Hiệu suất đường ống dẫn của bạn khá tốt. Các cụm chỉ chồng chéo một chút và việc gán cụm tốt hơn nhiều so với ngẫu nhiên
Loại bỏ các quảng cáoĐiều chỉnh đường ống phân cụm K-Means
Quy trình phân cụm k-mean đầu tiên của bạn hoạt động tốt nhưng vẫn còn chỗ cần cải thiện. Đó là lý do tại sao bạn gặp khó khăn khi xây dựng đường ống dẫn. bạn có thể điều chỉnh các tham số để có được kết quả phân cụm mong muốn nhất
Quá trình điều chỉnh tham số bao gồm thay đổi tuần tự một trong các giá trị đầu vào của các tham số của thuật toán và ghi lại kết quả. Khi kết thúc quá trình điều chỉnh thông số, bạn sẽ có một tập hợp các điểm hiệu suất, một điểm cho mỗi giá trị mới của một thông số nhất định. Điều chỉnh tham số là một phương pháp mạnh mẽ để tối đa hóa hiệu suất từ quy trình phân cụm của bạn
Bằng cách đặt tham số
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
10 In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
24, bạn đã chia tất cả các tính năng thành hai thành phần hoặc thứ nguyên. Giá trị này thuận tiện cho việc hiển thị trên biểu đồ hai chiều. Nhưng chỉ sử dụng hai thành phần có nghĩa là bước PCA sẽ không nắm bắt được tất cả các phương sai được giải thích của dữ liệu đầu vàoPhương sai được giải thích đo lường sự khác biệt giữa dữ liệu được chuyển đổi PCA và dữ liệu đầu vào thực tế. Mối quan hệ giữa
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
27 và phương sai được giải thích có thể được hình dung trong một biểu đồ để cho bạn biết bạn cần bao nhiêu thành phần trong PCA của mình để nắm bắt một tỷ lệ phần trăm nhất định của phương sai trong dữ liệu đầu vào. Bạn cũng có thể sử dụng các chỉ số hiệu suất phân cụm để đánh giá số lượng thành phần cần thiết để đạt được kết quả phân cụm thỏa đángTrong ví dụ này, bạn sẽ sử dụng chỉ số hiệu suất phân cụm để xác định số lượng thành phần thích hợp trong bước PCA. Lớp
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
05 mạnh mẽ trong tình huống này. Nó cho phép bạn thực hiện điều chỉnh tham số cơ bản bằng vòng lặp In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
29Lặp lại trên một phạm vi
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
27 và ghi lại các số liệu đánh giá cho mỗi lần lặp lại>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
5Vẽ biểu đồ các số liệu đánh giá dưới dạng hàm của
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
27 để trực quan hóa mối quan hệ giữa việc thêm các thành phần và hiệu suất của kết quả phân cụm k-mean>>>
In [3]: features[:5]
Out[3]:
array[[[ 9.77075874, 3.27621022],
[ -9.71349666, 11.27451802],
[ -6.91330582, -9.34755911],
[-10.86185913, -10.75063497],
[ -8.50038027, -4.54370383]]]
In [4]: true_labels[:5]
Out[4]: array[[1, 0, 2, 2, 2]]
6Đoạn mã trên tạo biểu đồ hiển thị số liệu hiệu suất dưới dạng hàm của
In [1]: import matplotlib.pyplot as plt
...: from kneed import KneeLocator
...: from sklearn.datasets import make_blobs
...: from sklearn.cluster import KMeans
...: from sklearn.metrics import silhouette_score
...: from sklearn.preprocessing import StandardScaler
27Có hai điểm rút ra từ con số này
Hệ số hình bóng giảm tuyến tính. Hệ số hình bóng phụ thuộc vào khoảng cách giữa các điểm, do đó khi số lượng kích thước tăng lên, độ thưa tăng lên
ARI cải thiện đáng kể khi bạn thêm các thành phần. Nó dường như bắt đầu giảm dần sau
33, do đó, đó sẽ là giá trị được sử dụng để trình bày kết quả phân cụm tốt nhất từ quy trình nàyIn [1]: import matplotlib.pyplot as plt ...: from kneed import KneeLocator ...: from sklearn.datasets import make_blobs ...: from sklearn.cluster import KMeans ...: from sklearn.metrics import silhouette_score ...: from sklearn.preprocessing import StandardScaler
Giống như hầu hết các quyết định học máy, bạn phải cân bằng việc tối ưu hóa các chỉ số đánh giá phân cụm với mục tiêu của nhiệm vụ phân cụm. Trong các trường hợp có nhãn cụm, như trường hợp của bộ dữ liệu ung thư được sử dụng trong hướng dẫn này, ARI là một lựa chọn hợp lý. ARI định lượng mức độ chính xác mà quy trình của bạn có thể gán lại các nhãn cụm
Mặt khác, hệ số hình bóng là một lựa chọn tốt cho phân cụm khám phá vì nó giúp xác định các phân cụm con. Các nhóm con này đảm bảo điều tra bổ sung, có thể dẫn đến những hiểu biết mới và quan trọng
Sự kết luận
Bây giờ bạn đã biết cách thực hiện phân cụm k-means trong Python. Quy trình phân cụm k-mean cuối cùng của bạn có thể phân cụm các bệnh nhân mắc các loại ung thư khác nhau bằng cách sử dụng dữ liệu biểu hiện gen trong thế giới thực. Bạn có thể sử dụng các kỹ thuật đã học ở đây để phân cụm dữ liệu của riêng mình, hiểu cách nhận kết quả phân cụm tốt nhất và chia sẻ thông tin chuyên sâu với người khác
Trong hướng dẫn này, bạn đã học
- Các kỹ thuật phân cụm phổ biến là gì và khi nào sử dụng chúng
- thuật toán k-means là gì
- Cách triển khai phân cụm k-means trong Python
- Cách đánh giá hiệu suất của các thuật toán phân cụm
- Cách xây dựng và điều chỉnh một đường dẫn phân cụm k-means mạnh mẽ trong Python
- Cách phân tích và trình bày kết quả phân cụm từ thuật toán k-means
Bạn cũng đã tham gia một chuyến tham quan nhanh về scikit-learning, một công cụ có thể truy cập và có thể mở rộng để triển khai phân cụm k-means trong Python. Nếu bạn muốn sao chép các ví dụ bạn đã thấy ở trên, thì hãy nhớ tải xuống mã nguồn bằng cách nhấp vào liên kết sau
Tải xuống mã mẫu. Nhấp vào đây để lấy mã bạn sẽ sử dụng để tìm hiểu cách viết đường dẫn phân cụm k-means trong hướng dẫn này
Bây giờ bạn đã sẵn sàng để thực hiện phân cụm k-means trên các bộ dữ liệu mà bạn thấy thú vị. Hãy chắc chắn để chia sẻ kết quả của bạn trong các ý kiến dưới đây
Ghi chú. Tập dữ liệu được sử dụng trong hướng dẫn này được lấy từ Kho lưu trữ học máy của UCI. Dừa, Đ. và Graff, C. [2019]. Kho lưu trữ máy học UCI. Irvine, California. Đại học California, Trường Thông tin và Khoa học Máy tính
Bộ dữ liệu gốc được duy trì bởi dự án phân tích The Cancer Genome Atlas Pan-Cancer
Đánh dấu là đã hoàn thành
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về Kevin Arvai
Kevin là một nhà khoa học dữ liệu cho một công ty nghiên cứu gen lâm sàng, một Pythonista và một người hâm mộ NBA
» Thông tin thêm về KevinMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
David
Geir Arne
Joanna
Gia-cốp
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng các chuyên gia Pythonistas
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi