Hướng dẫn hierarchical clustering categorical data python - trăn dữ liệu phân loại phân nhóm phân cấp
Hướng dẫn thực hành Show
Sử dụng khoảng cách Gower trong Python.Ảnh của Munro Studio trên unplashGiới thiệuTrong năm ngoái, tôi đã làm việc trên các dự án liên quan đến trải nghiệm khách hàng (CX). Trong các dự án này, các kỹ thuật phân tích dữ liệu và học máy được thực hiện trên dữ liệu của khách hàng để cải thiện kiến thức của công ty về khách hàng. Gần đây, tôi đã tập trung nỗ lực của mình vào việc tìm kiếm các nhóm khách hàng khác nhau chia sẻ các đặc điểm nhất định để có thể thực hiện các hành động cụ thể trên họ. Như bạn có thể đã đoán, dự án đã được thực hiện bằng cách thực hiện phân cụm. Đối với những người không quen thuộc với khái niệm này, phân cụm là nhiệm vụ chia một tập hợp các đối tượng hoặc quan sát (ví dụ: khách hàng) thành các nhóm khác nhau (được gọi là cụm) dựa trên các tính năng hoặc thuộc tính của họ (ví dụ: giới tính, tuổi, xu hướng mua hàng). Sự phân chia nên được thực hiện theo cách mà các quan sát giống nhau nhất có thể trong cùng một cụm. Ngoài ra, mỗi cụm nên càng xa các cụm khác càng tốt. [1]clustering. For those unfamiliar with this concept, clustering is the task of dividing a set of objects or observations (e.g., customers) into different groups (called clusters) based on their features or properties (e.g., gender, age, purchasing trends). The division should be done in such a way that the observations are as similar as possible to each other within the same cluster. In addition, each cluster should be as far away from the others as possible. [1] Một trong những thách thức chính là tìm cách thực hiện các thuật toán phân cụm trên dữ liệu có cả biến phân loại và số. Trong thế giới thực (và đặc biệt là trong CX), rất nhiều thông tin được lưu trữ trong các biến phân loại. Mặc dù có một lượng lớn thông tin trên web về việc phân cụm với các biến số, rất khó để tìm thấy thông tin về các loại dữ liệu hỗn hợp. Đây là một nhiệm vụ phức tạp và có rất nhiều tranh cãi về việc liệu có phù hợp để sử dụng hỗn hợp các loại dữ liệu này kết hợp với các thuật toán phân cụm hay không. Tuy nhiên, tôi quyết định lao vào và cố gắng hết sức. Trong phần còn lại của blog này, tôi sẽ chia sẻ kinh nghiệm cá nhân của mình và những gì tôi đã học được. Trong các phần tiếp theo, chúng ta sẽ thấy khoảng cách Gower là gì, với các thuật toán phân cụm thuận tiện để sử dụng và một ví dụ về việc sử dụng nó trong Python. Tuyên bố miễn trừ trách nhiệm: Tôi tự coi mình là một người mới khoa học dữ liệu, vì vậy bài đăng này không phải là tạo ra một hướng dẫn đơn lẻ và ma thuật mà mọi người nên sử dụng, mà là chia sẻ kiến thức tôi có được. Mối quan tâm chính của tôi ngày nay là tiếp tục học hỏi, vì vậy tôi cởi mở với những lời chỉ trích và sửa chữa. Hãy chia sẻ suy nghĩ của bạn trong phần bình luận!: I consider myself a data science newbie, so this post is not about creating a single and magical guide that everyone should use, but about sharing the knowledge I have gained. My main interest nowadays is to keep learning, so I am open to criticism and corrections. Feel free to share your thoughts in the comments section! Khoảng cách GowerBây giờ chúng tôi hiểu ý nghĩa của phân cụm, tôi muốn làm nổi bật các câu sau đây được đề cập ở trên. Sự phân chia nên được thực hiện theo cách mà các quan sát giống nhau nhất có thể trong cùng một cụm.as similar as possible to each other within the same cluster”. Làm thế nào chúng ta có thể xác định sự tương đồng giữa các khách hàng khác nhau? Trong trường hợp chỉ có các tính năng số, giải pháp có vẻ trực quan, vì tất cả chúng ta đều có thể hiểu rằng một khách hàng 55 tuổi giống với một người 45 tuổi hơn là một người 25 tuổi. Có nhiều cách để đo lường những khoảng cách này, mặc dù thông tin này nằm ngoài phạm vi của bài đăng này.similarity between different customers? In the case of having only numerical features, the solution seems intuitive, since we can all understand that a 55-year-old customer is more similar to a 45-year-old than to a 25-year-old. There are many ways to measure these distances, although this information is beyond the scope of this post. Nhưng, điều gì sẽ xảy ra nếu chúng ta không chỉ có thông tin về tuổi của họ mà còn về tình trạng hôn nhân của họ (ví dụ: độc thân, kết hôn, đã ly dị)? Một tính năng phân loại như vậy có thể được chuyển thành một tính năng số bằng cách sử dụng các kỹ thuật như cắt bỏ, mã hóa nhãn, mã hóa một lần nóng Tuy nhiên, các phép biến đổi này có thể dẫn các thuật toán phân cụm để hiểu sai các tính năng này và tạo ra các cụm vô nghĩa. Ví dụ: nếu chúng ta sử dụng kỹ thuật mã hóa nhãn trên tính năng trạng thái hôn nhân, chúng ta sẽ có được tính năng được mã hóa sau: Kỹ thuật mã hóa nhãn được áp dụng cho tính năng trạng thái hôn nhânVấn đề với sự chuyển đổi này là thuật toán phân cụm có thể hiểu rằng một giá trị duy nhất giống với đã kết hôn (đã kết hôn [2] . Như được hiển thị, việc chuyển đổi các tính năng có thể không phải là cách tiếp cận tốt nhất. Và đây là nơi khoảng cách Gower (đo độ tương tự hoặc không giống nhau) xuất hiện. Sự tương đồng của Gower (GS) lần đầu tiên được xác định bởi J. C. Gower vào năm 1971 [2]. Để tính toán sự tương đồng giữa các quan sát I và J (ví dụ: hai khách hàng), GS được tính là trung bình của các điểm tương đồng một phần (PS) trên các tính năng M của quan sát.Gower Similarity (GS) was first defined by J. C. Gower in 1971 [2]. To calculate the similarity between observations i and j (e.g., two customers), GS is computed as the average of partial similarities (ps) across the m features of the observation. Sự tương đồng giữa các quan sát i và j. Có mỗi quan sát m Các tính năng khác nhau, cả số, phân loại hoặc hỗn hợp.Tính toán tương đồng một phần phụ thuộc vào loại tính năng được so sánh.
Điểm tương đồng một phần luôn nằm trong khoảng từ 0 đến 1. Vì vậy, khi chúng ta tính toán mức trung bình của các điểm tương đồng một phần để tính GS, chúng ta luôn có kết quả thay đổi từ 0 đến một. Không có nghĩa là các quan sát là khác nhau nhất có thể, và một nghĩa là chúng hoàn toàn bằng nhau. Nhờ những phát hiện này, chúng tôi có thể đo lường mức độ tương tự giữa hai quan sát khi có một hỗn hợp các biến phân loại và số. Tuy nhiên, trước khi đi sâu vào chi tiết, chúng ta phải thận trọng và tính đến các khía cạnh nhất định có thể làm tổn hại đến việc sử dụng khoảng cách này kết hợp với các thuật toán phân cụm. Thuộc tính toán học của khoảng cách GowerCó hai câu hỏi về xác thực chéo mà tôi khuyên bạn nên đọc:
Cả hai định nghĩa sự tương đồng của Gower (GS) là người không Euclide và không số liệu. Sự không giống nhau của Gower (GD = 1-GS) có những hạn chế tương tự như GS, do đó, nó cũng không phải là người Euclide và không số liệu. Tuy nhiên, sự không giống nhau của Gower được định nghĩa là √GD thực sự là khoảng cách Euclide (do đó, số liệu, tự động) khi không sử dụng các biến thứ tự được xử lý đặc biệt (nếu bạn quan tâm đến việc này, bạn nên xem cách Podani mở rộng Gower đến các ký tự thứ tự)Gower Similarity (GS) as non-Euclidean and non-metric. Gower Dissimilarity (GD = 1 — GS) has the same limitations as GS, so it is also non-Euclidean and non-metric. Nevertheless, Gower Dissimilarity defined as √GD is actually a Euclidean distance (therefore metric, automatically) when no specially processed ordinal variables are used (if you are interested in this you should take a look at how Podani extended Gower to ordinal characters) Điều này rất quan trọng bởi vì nếu chúng ta sử dụng GS hoặc GD, chúng ta đang sử dụng một khoảng cách không tuân theo hình học Euclide. Do đó, các phương pháp dựa trên khoảng cách Euclide không được sử dụng, như một số phương pháp phân cụm:
Khoảng cách Gower trong các ngôn ngữ lập trìnhCông việc liên quan trong R hoặc PythonBây giờ, chúng ta có thể sử dụng biện pháp này trong R hoặc Python để thực hiện phân cụm không? Về R, tôi đã tìm thấy một loạt các bài viết rất hữu ích dạy cho bạn cách sử dụng thước đo khoảng cách này thông qua một hàm gọi là Daisy:
Tuy nhiên, tôi đã tìm thấy một hướng dẫn cụ thể để thực hiện nó trong Python. Đó là lý do tại sao tôi quyết định viết blog này và cố gắng mang lại một cái gì đó mới cho cộng đồng. Hãy tha thứ cho tôi nếu hiện tại có một blog cụ thể mà tôi đã bỏ lỡ. Khoảng cách Gower trong PythonTrước hết, điều quan trọng là phải nói rằng hiện tại, chúng ta không thể đưa các thước đo khoảng cách này vào các thuật toán phân cụm được cung cấp bởi Scikit-learn. Đây là một vấn đề mở trên Scikit-Learn xông Github kể từ năm 2015. Tuy nhiên, kể từ năm 2017, một nhóm các thành viên cộng đồng do Marcelo Beckmann lãnh đạo đã làm việc để thực hiện khoảng cách Gower. Hy vọng, nó sẽ sớm có sẵn để sử dụng trong thư viện. Trong quá trình này, một nhà phát triển khác có tên Michael Yan rõ ràng đã sử dụng mã Marcelo Beckmann, để tạo ra một gói không scikit có tên là Gowerthat có thể được sử dụng, mà không cần chờ đợi các quy trình xác nhận tốn kém và cần thiết của cộng đồng Scikit-e-Dearn. Lưu ý rằng việc triển khai này sử dụng sự khác biệt của Gower (GD).gowerthat can already be used, without waiting for the costly and necessary validation processes of the scikit-learn community. Note that this implementation uses Gower Dissimilarity (GD). Thực hiện thực hiệnDữ liệuKhi tôi tìm hiểu về các thuật toán hoặc phương thức mới, tôi thực sự muốn thấy kết quả trong các bộ dữ liệu rất nhỏ nơi tôi có thể tập trung vào các chi tiết. Vì vậy, để thực hiện, chúng tôi sẽ sử dụng một bộ dữ liệu tổng hợp nhỏ có chứa thông tin tạo nên về khách hàng của một cửa hàng tạp hóa. Mã Python để tạo khung dữ liệu PandasDữ liệu được tạo có 10 khách hàng và 6 tính năng:
Tất cả các thông tin có thể được nhìn thấy dưới đây: Khách hàng dữ liệu tổng hợpKhoảng cách GowerBây giờ, đã đến lúc sử dụng gói Gower được đề cập trước đây để tính tất cả khoảng cách giữa các khách hàng khác nhau. Hãy để Lừa thực hiện một đầu tiên theo cách thủ công và hãy nhớ rằng gói này đang tính toán sự không giống nhau của Gower (DS). Vì vậy, cách để tính toán nó thay đổi một chút.remember that this package is calculating the Gower Dissimilarity (DS). So the way to calculate it changes a bit.
Theo quy trình này, sau đó chúng tôi tính toán tất cả sự khác biệt một phần cho hai khách hàng đầu tiên. Tính toán sự khác biệt một phần cho hai khách hàng đầu tiênSự không giống nhau giữa cả hai khách hàng là trung bình của sự khác biệt một phần dọc theo các tính năng khác nhau: (0,044118 + 0 + 0 + 0.096154 + 0 + 0) / 6 = 0,023379. Vì giá trị gần bằng 0, chúng tôi có thể nói rằng cả hai khách hàng đều rất giống nhau. Hãy cùng sử dụng gói Gower để tính toán tất cả sự khác biệt giữa các khách hàng. Sau đó, lưu trữ kết quả trong một ma trận: Ma trận khoảng cáchChúng ta có thể giải thích ma trận như sau. Trong cột đầu tiên, chúng tôi thấy sự khác biệt của khách hàng đầu tiên với tất cả những người khác. Khách hàng này tương tự như khách hàng thứ hai, thứ ba và thứ sáu, do GD thấp. Thực hiện phân cụm trên ma trận khoảng cáchMa trận mà chúng ta vừa thấy có thể được sử dụng trong hầu hết mọi thuật toán phân cụm Scikit-learn. Tuy nhiên, chúng ta phải nhớ những hạn chế mà khoảng cách Gower có do thực tế là nó không phải là Euclide hay số liệu. Để sử dụng Gower trong thuật toán phân cụm Scikit-learn, chúng ta phải tìm trong tài liệu của phương thức đã chọn cho tùy chọn truyền trực tiếp ma trận khoảng cách. Mặc dù tên của tham số có thể thay đổi tùy thuộc vào thuật toán, chúng ta hầu như nên luôn đặt giá trị được tính toán trước, vì vậy tôi khuyên bạn nên đi đến tài liệu của thuật toán và tìm từ này. Trong bài đăng này, chúng tôi sẽ sử dụng thuật toán DBSCAN (Phân cụm không gian dựa trên mật độ của các ứng dụng có tiếng ồn). Hiểu được thuật toán nằm ngoài phạm vi của bài đăng này, vì vậy chúng tôi đã giành chiến thắng đi vào chi tiết. Tôi để lại ở đây liên kết đến lý thuyết đằng sau thuật toán và GIF giải thích trực quan chức năng cơ bản của nó.DBSCAN (Density-Based Spatial Clustering of Applications with Noise) algorithm. Understanding the algorithm is beyond the scope of this post, so we won’t go into details. I leave here the link to the theory behind the algorithm and a gif that visually explains its basic functioning. Ở đây chúng tôi có mã nơi chúng tôi xác định thuật toán phân cụm và định cấu hình nó để số liệu được sử dụng là có tính hợp đồng. Khi chúng tôi phù hợp với thuật toán, thay vì giới thiệu bộ dữ liệu với dữ liệu của chúng tôi, chúng tôi sẽ giới thiệu ma trận khoảng cách mà chúng tôi đã tính toán. Ngoài ra, chúng tôi thêm kết quả của cụm vào dữ liệu gốc để có thể giải thích kết quả. Kết quả cuối cùng có thể được nhìn thấy dưới đây: Nếu chúng ta phân tích các cụm khác nhau mà chúng ta có:
Những kết quả này sẽ cho phép chúng tôi biết các nhóm khác nhau mà khách hàng của chúng tôi được chia. Do đó, chúng tôi có thể thực hiện các hành động cụ thể đối với chúng, chẳng hạn như các chiến dịch quảng cáo được cá nhân hóa, cung cấp nhắm vào các nhóm cụ thể, đúng là ví dụ này rất nhỏ và được thiết lập để có một phân cụm thành công, các dự án thực sự phức tạp hơn và thời gian- tiêu thụ để đạt được kết quả quan trọng. Sự kết luậnBài đăng này đề xuất một phương pháp để thực hiện phân cụm với khoảng cách Gower trong Python. Nó cũng phơi bày những hạn chế của chính đo khoảng cách để nó có thể được sử dụng đúng cách. Cuối cùng, ví dụ nhỏ xác nhận rằng việc phân cụm được phát triển theo cách này có ý nghĩa và có thể cung cấp cho chúng ta rất nhiều thông tin. Tôi hy vọng bạn thấy phương pháp này hữu ích và bạn thấy bài viết dễ đọc. Và trên hết, tôi rất vui khi nhận được bất kỳ loại phản hồi nào. Vì vậy, hãy thoải mái chia sẻ suy nghĩ của bạn! Người giới thiệu. [2] J. C. Gower, Một hệ số tương tự chung và một số tính chất của nó (1971), Sinh trắc học Có thể sử dụng phân cụm phân cấp cho dữ liệu phân loại không?Đối với dữ liệu phân loại hoặc thường cho các loại dữ liệu hỗn hợp (các loại dữ liệu số và phân loại), chúng tôi sử dụng phân cụm phân cấp. Trong phương pháp này, chúng ta cần một hàm để tính khoảng cách giữa các quan sát của dữ liệu.. In this method, we need a function to calculate the distance between observations of data.
Làm thế nào để bạn phân cụm dữ liệu phân loại trong Python?Phương thức K được sử dụng để phân cụm các biến phân loại.Nó xác định các cụm dựa trên số lượng các danh mục phù hợp giữa các điểm dữ liệu... It defines clusters based on the number of matching categories between data points. (This is in contrast to the more well-known k-means algorithm, which clusters numerical data based on distant measures like Euclidean distance etc.)
K có nghĩa là phân cụm hoạt động với dữ liệu phân loại?Thuật toán K-MEAN không áp dụng cho dữ liệu phân loại, vì các biến phân loại là rời rạc và không có bất kỳ nguồn gốc tự nhiên nào.Vì vậy, tính toán khoảng cách Euclide cho không gian không có ý nghĩa.not applicable to categorical data, as categorical variables are discrete and do not have any natural origin. So computing euclidean distance for such as space is not meaningful.
Làm thế nào để bạn thực hiện một cụm phân cấp trong Python?Làm thế nào nó hoạt động?.. Bắt đầu bằng cách trực quan hóa một số điểm dữ liệu: Nhập Numpy dưới dạng NP.Nhập matplotlib.pyplot như plt..... Nhập khẩu Numpy dưới dạng NP.Nhập matplotlib.pyplot như plt.từ scipy.cluster.Hierarchy nhập khẩu dendrogram, liên kết..... Nhập khẩu Numpy dưới dạng NP.Nhập matplotlib.pyplot như plt.Từ sklearn.Cluster Nhập AgglomerativeClustering .. |