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

Sử dụng khoảng cách Gower trong Python.

Ảnh của Munro Studio trên unplash

Giới thiệu

Trong 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 Gower

Bâ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ân

Vấ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 với một tính năng số, độ tương tự một phần giữa hai cá thể I và J là một trừ đi phép trừ giữa các giá trị của chúng trong tính năng cụ thể (có giá trị tuyệt đối) chia cho tổng phạm vi của tính năng.numerical feature, the partial similarity between two individuals i and j is one minus the subtraction between their values in the specific feature (in absolute value) divided by the total range of the feature.
Sự tương đồng giữa quan sát I và J trong tính năng f khi f là số.
  • Đối với một tính năng phân loại, sự tương đồng một phần giữa hai cá nhân chỉ là một khi cả hai quan sát đều có cùng một giá trị cho tính năng này. Số không khác.categorical feature, the partial similarity between two individuals is one only when both observations have exactly the same value for this feature. Zero otherwise.

Đ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 Gower

Có hai câu hỏi về xác thực chéo mà tôi khuyên bạn nên đọc:

  • Chỉ số không giống nhau của Gower
  • Phân cụm phân cấp với dữ liệu loại hỗn hợp - Khoảng cách/sự tương đồng nào để sử dụng?

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:

  • K-means
  • Phường, Centroid, Phương pháp phân cấp phân cấp trung bình

Khoảng cách Gower trong các ngôn ngữ lập trình

Công việc liên quan trong R hoặc Python

Bâ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:

  • Phân cụm trên dữ liệu loại hỗn hợp: Cách tiếp cận được đề xuất bằng R.
  • Phân cụm phân loại và kiểu dữ liệu số bằng cách sử dụng khoảng cách Gower.
  • Phân cụm phân cấp trên dữ liệu phân loại trong R (chỉ với các tính năng phân loại).

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 Python

Trướ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ện

Dữ liệu

Khi 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 Pandas

Dữ liệu được tạo có 10 khách hàng và 6 tính năng:

  • Tuổi: Số: Numerical
  • Giới tính: Phân loại: Categorical
  • Tình trạng dân sự: Phân loại: Categorical
  • Mức lương: Số: Numerical
  • Khách hàng có con không?: Nhị phân: Binary
  • Loại người mua: Phân loại: Categorical

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ợp

Khoảng cách Gower

Bâ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.

  • Đối với một tính năng số, sự khác biệt một phần giữa hai khách hàng I và J là phép trừ giữa các giá trị của chúng trong tính năng cụ thể (với giá trị tuyệt đối) chia cho tổng phạm vi của tính năng. Phạm vi lương là 52000 (70000 Hàng18000) trong khi phạm vi tuổi là 68 (90 trừ22). Lưu ý tầm quan trọng của việc không có ngoại lệ trong các tính năng này. Một giá trị sai lầm cực kỳ lớn hoặc nhỏ sẽ ảnh hưởng trực tiếp đến phạm vi, và do đó, sự khác biệt trong tính năng đó sẽ trở nên ít quan trọng hơn nhiều so với chúng.numerical feature,the partial dissimilarity between two customers i and j is the subtraction between their values in the specific feature(in absolute value) divided by the total range of the feature. The range of salary is 52000 (70000–18000) while the range of age is 68 (90–22). Note the importance of not having outliers in these features. An extremely large or small erroneous value would directly affect the range, and therefore the differences in that feature would become much less important than they are.
  • Đối với một tính năng phân loại, sự khác biệt một phần giữa hai khách hàng là một khi cả hai khách hàng có giá trị khác nhau cho tính năng này. Số không khác.categorical feature, the partial dissimilarity between two customers is one when both customers have a different value for this feature. Zero otherwise.

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ên

Sự 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ách

Chú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ách

Ma 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ó:

  • Cụm 0 (màu xanh lá cây): Khách hàng có mức lương từ 18.000 đến 27.000, những người không có con và mua không thường xuyên.Customers with a salary between 18,000 and 27,000, who do not have children and purchase infrequently.
  • Cụm 1 (màu xanh): Các bà mẹ ở độ tuổi 40 kiếm được khoảng 33.000 và mua rất nhiều.Mothers in their 40s who earn around 33,000 and purchase a lot.
  • Cụm 2 (màu đỏ): Đàn ông ở độ tuổi 60, người mua vừa phải không có conMen in their 60s, moderate purchasers with no children
  • Cụm -1: Đây không phải là một cụm, mà là khách hàng mà thuật toán đã xác định là một ngoại lệ. Nó không thể được xác định trong bất kỳ cụm. This is not a cluster itself, but the customer that the algorithm has identified as an outlier. It cannot be identified in any cluster.

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ận

Bà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 ..