Python đo khoảng cách
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 Show
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
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
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 thứ khác, 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ụmBạ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
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ầnPhâ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
Họ cũng có một số điểm yếu
Phân cụm theo cấp bậcPhâ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
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:
Những điểm yếu của phương pháp phân cụm theo thứ bậc bao gồm:
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 Đ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:
Đ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:
Cách thực hiện phân cụm K-Means trong PythonTrong 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-MeansPhươ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 PythonRấ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-means bằng cách sử dụng 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
Mã này được trình bày để bạn có thể theo dõi trong bảng điều khiển 7 hoặc Jupyter Notebook. Nhấp vào dấu nhắc ( 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 >>>
Bạn có thể tạo dữ liệu từ GIF ở trên bằng cách sử dụng 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. 9 sử dụng các tham số này
9 trả về một bộ gồm hai giá trị
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 >>>
Cá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ố 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à 5, 7Dưới đây là năm yếu tố đầu tiên cho mỗi biến được trả về bởi 9>>>
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 máy học 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 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ô chuẩn hóa hoặc dịch chuyển 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>>>
Hãy xem cách các giá trị đã được chia tỷ lệ trong 0>>>
Bây giờ dữ liệu đã sẵn sàng để được phân cụm. Lớp công cụ ước tính 1 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
Khởi tạo lớp 1 với các đối số sau>>>
Tê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 0. Thao tác này sẽ thực hiện mười lần chạy thuật toán k-means trên dữ liệu của bạn với tối đa _______29_______1 lần lặp lại mỗi lần chạy>>>
Số 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 2 sau khi gọi 3>>>
Cuố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 4. Dưới đây là năm nhãn được dự đoán đầu tiên>>>
Lư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à 5 trong 6 nhưng 7 trong 4 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 9Hà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ợpTrong 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
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 __32_______0 với mỗi lần lặp và ghi lại SSE >>> 0Khối mã trước đã sử dụng toán tử giải nén từ điển của Python ( 1). Để tìm hiểu thêm về toán tử Python mạnh mẽ này, hãy xemKhi 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 0. 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 ở vị trí 3>>> 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 khó khăn 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 >>> 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ố
Giá trị hệ số hình bóng nằm trong khoảng từ 4 đến 5. 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 6 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 0. Lần này, thay vì tính toán SSE, hãy tính toán hệ số bóng>>> 3Vẽ sơ đồ điểm bóng trung bình cho mỗi 0 cho thấy rằng lựa chọn tốt nhất cho 0 là 0 vì nó có điểm tối đa>>> 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 caoPhươ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 >>> 5Lần này, hãy sử dụng 1 để tạo dữ liệu tổng hợp theo hình lưỡi liềm>>> 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 >>> 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 >>> 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 >>> 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 chỉ số 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 >>> 0Các giá trị đầu ra ARI nằm trong khoảng từ 4 đến 5. Điểm gần với 4 biểu thị các bài tập ngẫu nhiên và điểm gần với 5 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 sẽ giúp bạn chọn một số liệu đánh giá phân cụm thích hợp Cách xây dựng đường ống phân cụm K-Means trong PythonBâ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ó 6 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 7 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-MeansGiả sử bạn muốn bắt đầu với một bả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 trực quan nâng cao hơn >>> 1Tải xuống và trích xuất bộ dữ liệu TCGA từ UCI >>> 2Sau 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 3Lớp 1 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>>> 4Kiể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 >>> 5Biến 9 chứa tất cả các giá trị biểu hiện gen từ gen 7. 1 là các loại ung thư đối với mỗi mẫu trong số các mẫu 6. Bản ghi đầu tiên trong 9 tương ứng với nhãn đầu tiên trong 6Các nhãn là các chuỗi chứa chữ viết tắt của các loại ung thư
Để 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 00>>> 6Vì 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 02. Lưu trữ độ dài của mảng vào biến 6 để sử dụng sau>>> 7Trong 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 các tính nă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ì tập dữ liệu biểu hiện gen có hơn _______3_______04 tính năng, nên nó đủ điều kiện là một ứng cử viên tuyệt vời cho việc 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 phần Khối mã tiếp theo giới thiệu cho bạn khái niệm về. Lớp scikit-learning 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 1, 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 9 có tên là 08 để mở rộng quy mô đối tượng. Bạn sử dụng 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 bạn 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 10 để thực hiện giảm kích thước>>> 8Bâ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-mean. Bạn sẽ ghi đè các đối số mặc định sau của lớp 1
Xây dựng quy trình phân cụm k-mean với các đối số do người dùng xác định trong hàm tạo 1>>> 9Lớp 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 17 và 18 tới 05>>> 0Gọi 3 với 9 làm đối số thực hiện tất cả các bước quy trình trên 9>>> 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, 3 có thể in bản tóm tắt 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 >>> 2Tính cả ARI, vì có sẵn các nhãn cụm sự thật cơ bản >>> 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 24 trong bước PCA của quy trình phân cụm k-means, 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>>> 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-MeansQuy 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 tham số 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ố 10 24, bạn đã chia tất cả các tính năng thành hai thành phần hoặc kích thước. 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ế. Có thể trực quan hóa 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 đáng Trong 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 05 rất mạnh 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 29Lặp lại trên một phạm vi 27 và ghi lại các số liệu đánh giá cho mỗi lần lặp lại>>> 5Vẽ biểu đồ các số liệu đánh giá dưới dạng hàm của 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-means>>> 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 27Có hai điểm rút ra từ con số này
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 Phần kết luậnBâ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
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 The đượ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 » Chuyên gia Kỹ năng Python trong thế giới 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 Pythonistas chuyên gia 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. 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 |