K-Means phân cụm cho dữ liệu số và phân loại hỗn hợp


133

Tập dữ liệu của tôi chứa một số thuộc tính số và một thuộc tính phân loại.

Nói rằng NumericAttr1, NumericAttr2, ..., NumericAttrN, CategoricalAttr,

trong đó CategoricalAttrcó một trong ba giá trị có thể : CategoricalAttrValue1, CategoricalAttrValue2hoặc CategoricalAttrValue3.

Tôi đang sử dụng triển khai thuật toán phân cụm k-nghĩa mặc định cho Octave https://blog.west.uni-koblenz.de/2012-07-14/a-usiness-k-means-code-for-octave/ . Nó chỉ hoạt động với dữ liệu số.

Vì vậy, câu hỏi của tôi: có đúng không khi chia thuộc tính phân loại CategoricalAttrthành ba biến số (nhị phân), như thế IsCategoricalAttrValue1, IsCategoricalAttrValue2, IsCategoricalAttrValue3nào?


7
Có, sử dụng mã hóa 1 trong n cũng hợp lệ.
Sean Owen

1
Có lẽ cách tiếp cận này sẽ hữu ích: zeszyty-naukowe.wwsi.edu.pl/zeszyty/zeszyt12/ mẹo

Bạn có ý tưởng nào về việc kết hợp cụm 'TIME SERIES' của dữ liệu phân loại và số không?
Leila Yousefi

Câu trả lời:


122

Thuật toán k-mean tiêu chuẩn không thể áp dụng trực tiếp cho dữ liệu phân loại, vì nhiều lý do. Không gian mẫu cho dữ liệu phân loại là rời rạc và không có nguồn gốc tự nhiên. Hàm khoảng cách Euclide trên một không gian như vậy không thực sự có ý nghĩa. Như ai đó đã nói, "Thực tế một con rắn không có bánh xe hay chân cho phép chúng ta không nói gì về giá trị tương đối của bánh xe và chân." (từ đây )

Có một biến thể của phương tiện k được gọi là chế độ k, được Zhexue Huang giới thiệu trong bài viết này , phù hợp với dữ liệu phân loại. Lưu ý rằng các giải pháp bạn nhận được rất nhạy cảm với các điều kiện ban đầu, như được thảo luận ở đây (PDF), chẳng hạn.

Bài viết của Huang (được liên kết ở trên) cũng có một phần về "nguyên mẫu k" áp dụng cho dữ liệu với sự pha trộn của các tính năng phân loại và số. Nó sử dụng thước đo khoảng cách kết hợp khoảng cách Hamming cho các tính năng phân loại và khoảng cách Euclide cho các tính năng số.

Một tìm kiếm của Google về "hỗn hợp dữ liệu phân loại k" có nghĩa là xuất hiện khá nhiều bài báo gần đây về các thuật toán khác nhau để phân cụm giống như phương tiện k với sự kết hợp của dữ liệu phân loại và dữ liệu số. (Tôi chưa đọc chúng, vì vậy tôi không thể nhận xét về giá trị của chúng.)


Trên thực tế, những gì bạn đề xuất (chuyển đổi các thuộc tính phân loại thành giá trị nhị phân và sau đó thực hiện phương tiện k như thể đây là các giá trị số) là một cách tiếp cận khác đã được thử trước đó (trước chế độ k). (Xem Ralambondrainy, H. 1995. Một phiên bản khái niệm của thuật toán k-mean. Thư nhận dạng mẫu, 16: 1147 Ném1157.) Nhưng tôi tin rằng phương pháp k-mode được ưa thích vì những lý do tôi đã nêu ở trên.


10
Nếu quy mô của bạn các tính năng số của bạn đến cùng phạm vi với các tính năng phân loại nhị phân thì sự tương tự cosine có xu hướng mang lại kết quả rất giống với phương pháp Hamming ở trên. Tôi không có cách nào mạnh mẽ để xác nhận rằng điều này hoạt động trong mọi trường hợp vì vậy khi tôi có dữ liệu hỗn hợp giữa mèo và num, tôi luôn kiểm tra phân cụm trên một mẫu bằng phương pháp cosine đơn giản mà tôi đã đề cập và hỗn hợp phức tạp hơn với Hamming. Nếu sự khác biệt là không đáng kể, tôi thích phương pháp đơn giản hơn.
cwharland

1
Nghe có vẻ như một cách tiếp cận hợp lý, @cwharland. Khi xem xét thêm, tôi cũng lưu ý rằng một trong những lợi thế mà Huang mang lại cho cách tiếp cận chế độ k so với Ralambondrainy - rằng bạn không phải giới thiệu một tính năng riêng cho từng giá trị của biến phân loại của mình - thực sự không quan trọng trong Trường hợp của OP khi anh ta chỉ có một biến phân loại duy nhất với ba giá trị. Tốt hơn để đi với cách tiếp cận đơn giản nhất mà làm việc.
Tim Goodman

3
Câu trả lời tốt. Có khả năng hữu ích: Tôi đã triển khai các chế độ k và nguyên mẫu k của Huang (và một số biến thể) trong Python: github.com/nicodv/kmodes
Def_Os

2
Tôi không khuyên bạn nên chuyển đổi các thuộc tính phân loại thành các giá trị số. Hãy tưởng tượng bạn có hai tên thành phố: NY và LA. Nếu bạn áp dụng NY số 3 và LA số 8, khoảng cách là 5, nhưng 5 đó không có gì để thấy với sự khác biệt giữa NY và LA.
adesantos

@adesantos Có, đó là một vấn đề với việc biểu diễn nhiều danh mục bằng một tính năng số duy nhất và sử dụng khoảng cách Euclide. Sử dụng khoảng cách Hamming là một cách tiếp cận; trong trường hợp đó, khoảng cách là 1 cho mỗi tính năng khác nhau (thay vì chênh lệch giữa các giá trị số được gán cho các danh mục). Làm cho mỗi danh mục trở thành tính năng riêng của nó là một cách tiếp cận khác (ví dụ: 0 hoặc 1 cho "là NY" và 0 hoặc 1 cho "là LA").
Tim Goodman

24

Theo tôi, có những giải pháp để đối phó với dữ liệu phân loại trong phân cụm. R đi kèm với một khoảng cách cụ thể cho dữ liệu phân loại. Khoảng cách này được gọi là Gower ( http://www.rdocumentation.org/packages/StatMatch/versions/1.2.0/topics/gower.dist ) và nó hoạt động khá tốt.


2
Đây là cách tiếp cận tôi đang sử dụng cho một tập dữ liệu hỗn hợp - phân vùng xung quanh các medoid được áp dụng cho ma trận khoảng cách Gower (xem r-bloggers.com/clustering-mixed-data-types-in-r ). Vấn đề là việc tính toán ma trận khoảng cách đòi hỏi rất nhiều bộ nhớ, tỷ lệ với O (n ^ 2), do đó đối với các bộ dữ liệu lớn hơn 10 hoặc 20.000 bản ghi tôi đang xem các biến thể trên cụm k-có nghĩa là cần ít bộ nhớ hơn và có thể xử lý dữ liệu hỗn hợp.
RobertF ngày

@RobertF giống nhau ở đây. Kích thước dữ liệu khả thi là quá thấp cho hầu hết các vấn đề không may.
heo đất

20

(Ngoài câu trả lời xuất sắc của Tim Goodman)

Sự lựa chọn các chế độ k chắc chắn là cách để đi đến sự ổn định của thuật toán phân cụm được sử dụng.

  1. Thuật toán phân cụm là miễn phí để chọn bất kỳ số liệu khoảng cách / điểm tương tự. Euclide là phổ biến nhất. Nhưng bất kỳ số liệu nào khác có thể được sử dụng tỷ lệ theo phân phối dữ liệu trong từng thứ nguyên / thuộc tính, ví dụ: số liệu Mahalanobis. Minh họa khoảng cách của các điểm dữ liệu từ trung tâm dựa trên số liệu khoảng cách được sử dụng.

  2. Liên quan đến phân cụm (số và phân loại) hỗn hợp một bài báo tốt có thể giúp là: INCONCO: Phân cụm có thể giải thích được của các đối tượng số và phân loại

  3. Ngoài k-mean: Vì vanilla k-mean đơn giản đã được loại trừ như một cách tiếp cận phù hợp cho vấn đề này, tôi sẽ vượt ra ngoài ý tưởng nghĩ về việc phân cụm như một vấn đề phù hợp mô hình. Các biện pháp khác nhau, như số liệu lý thuyết thông tin: Phân kỳ Kullback-Liebler hoạt động tốt khi cố gắng hội tụ một mô hình tham số theo hướng phân phối dữ liệu. (Tất nhiên các kỹ thuật phân cụm tham số như GMM chậm hơn Kmeans, vì vậy có những hạn chế cần xem xét)

  4. Phân cụm k-mode mờ cũng nghe có vẻ hấp dẫn vì các kỹ thuật logic mờ được phát triển để đối phó với một cái gì đó như dữ liệu phân loại. Xem phân cụm mờ của dữ liệu phân loại bằng cách sử dụng centroid mờ để biết thêm thông tin.

Ngoài ra hãy xem: ROCK: Thuật toán phân cụm mạnh mẽ cho các thuộc tính phân loại


17

Câu hỏi này có vẻ thực sự về đại diện, và không quá nhiều về phân cụm.

Dữ liệu phân loại là một vấn đề đối với hầu hết các thuật toán trong học máy. Giả sử, ví dụ, bạn có một số biến phân loại được gọi là "màu" có thể mang các giá trị đỏ, xanh hoặc vàng. Nếu chúng ta chỉ đơn giản mã hóa các số này lần lượt là 1,2 và 3, thuật toán của chúng ta sẽ nghĩ rằng màu đỏ (1) thực sự gần với màu xanh lam (2) hơn là màu vàng (3). Chúng ta cần sử dụng một đại diện cho phép máy tính hiểu rằng những thứ này thực sự khác nhau như nhau.

Một cách đơn giản là sử dụng cái được gọi là đại diện một nóng , và đó chính xác là những gì bạn nghĩ bạn nên làm. Thay vì có một biến như "màu" có thể nhận ba giá trị, chúng tôi tách nó thành ba biến. Chúng sẽ là "màu đỏ," "màu xanh lam" và "màu vàng-vàng", tất cả chỉ có thể nhận giá trị 1 hoặc 0.

Điều này làm tăng tính chiều của không gian, nhưng bây giờ bạn có thể sử dụng bất kỳ thuật toán phân cụm nào bạn muốn. Đôi khi nó có ý nghĩa để zscore hoặc làm trắng dữ liệu sau khi thực hiện quá trình này, nhưng ý tưởng của bạn chắc chắn là hợp lý.


Tôi đồng ý với câu trả lời của bạn. HotEncoding rất hữu ích.
Pramit

4

Bạn cũng có thể thử thuật toán phân cụm tối đa hóa kỳ vọng. Nó có thể hoạt động trên dữ liệu phân loại và sẽ cung cấp cho bạn khả năng thống kê về giá trị phân loại (hoặc giá trị) mà một cụm có khả năng đảm nhận nhất.


2
Bạn có thể cụ thể hơn không? EM dùng để chỉ một thuật toán tối ưu hóa có thể được sử dụng để phân cụm. Có nhiều cách để làm điều này và không rõ ý của bạn là gì.
bayer

@bayer, tôi nghĩ rằng cụm được đề cập ở đây là mô hình hỗn hợp gaussian. GMM thường sử dụng EM.
goh

1
Tôi không nghĩ đó là ý anh ấy, vì GMM không giả sử các biến phân loại.
bayer

3

Nó phụ thuộc vào biến phân loại của bạn đang được sử dụng. Đối với các biến số thứ tự, nói như xấu, trung bình và tốt, sẽ tốt hơn nếu chỉ sử dụng một biến và có các giá trị 0,1,2 và khoảng cách có ý nghĩa ở đây (Avarage gần với xấu và tốt hơn). Tuy nhiên, nếu không có thứ tự, tốt nhất bạn nên sử dụng một mã hóa nóng như đã đề cập ở trên.


3

Bạn không nên sử dụng phân cụm k-mean trên tập dữ liệu chứa các kiểu dữ liệu hỗn hợp. Thay vào đó, có một số thuật toán phân cụm có thể xử lý một cách hợp lý các kiểu dữ liệu hỗn hợp. Một số khả năng bao gồm:

1) Thuật toán dựa trên phân vùng: k-Prototypes, Squeezer
2) Thuật toán phân cấp: ROCK, Kết hợp đơn, trung bình và liên kết hoàn chỉnh
3) Thuật toán dựa trên mật độ: HIERDENC, MULIC, CLIQUE
4) Thuật toán dựa trên mô hình: Phân cụm tổ chức bản đồ

Nếu bạn muốn tìm hiểu thêm về các thuật toán này, bản thảo 'Khảo sát thuật toán phân cụm' được viết bởi Rui Xu cung cấp một giới thiệu toàn diện về phân tích cụm.


2

Mục tiêu của K-Means là giảm phương sai trong cụm và vì nó tính toán trọng tâm là điểm trung bình của cụm, nên cần phải sử dụng khoảng cách Euclide để hội tụ đúng. Do đó, nếu bạn muốn hoàn toàn sử dụng K-Means, bạn cần đảm bảo dữ liệu của bạn hoạt động tốt với nó.

Đại diện

K-Means và phân cụm nói chung, cố gắng phân vùng dữ liệu trong các nhóm có ý nghĩa bằng cách đảm bảo rằng các phiên bản trong cùng một cụm tương tự nhau. Do đó, bạn cần một cách tốt để thể hiện dữ liệu của mình để có thể dễ dàng tính toán một phép đo tương tự có ý nghĩa.

Sử dụng mã hóa một nóng trên các biến phân loại là một ý tưởng tốt khi các danh mục tương đương với nhau. Chẳng hạn, nếu bạn có màu xanh lam nhạt, xanh đậm và vàng, sử dụng mã hóa một nóng có thể không mang lại cho bạn kết quả tốt nhất, vì màu xanh đậm và xanh nhạt có khả năng "gần nhau" hơn so với màu vàng.

Trong trường hợp giá trị phân loại không "tương đương" và có thể được đặt hàng, bạn cũng có thể cung cấp cho các danh mục một giá trị số. Ví dụ, trẻ em, thiếu niên, người lớn, có khả năng có thể được đại diện là 0, 1 và 2. Điều này sẽ có ý nghĩa bởi vì một thiếu niên "gần gũi" với trẻ hơn là người lớn.

K-Medoids

Một cách tiếp cận chung hơn đối với K-Means là K-Medoids. K-Medoids hoạt động tương tự như K-Means, nhưng điểm khác biệt chính là trọng tâm cho mỗi cụm được xác định là điểm làm giảm tổng khoảng cách trong cụm. Thực thi điều này cho phép bạn sử dụng bất kỳ thước đo khoảng cách nào bạn muốn, và do đó, bạn có thể xây dựng thước đo tùy chỉnh của riêng mình, điều này sẽ tính đến những danh mục nào nên đóng hoặc không.


1

Nếu chúng ta xem xét một kịch bản trong đó biến phân loại không thể được mã hóa nóng như biến phân loại có hơn 200 loại.

Trong những trường hợp như vậy, bạn có thể sử dụng gói clustMixType

Nó có thể xử lý dữ liệu hỗn hợp (số và phân loại), bạn chỉ cần cung cấp dữ liệu, nó sẽ tự động phân tách dữ liệu Phân loại và Số.

Nếu bạn tìm thấy bất kỳ vấn đề nào như một số số thuộc phạm trù phân loại thì bạn có thể as.factor () / ngược lại as.numeric (), trên trường tương ứng đó và chuyển đổi nó thành một yếu tố và cung cấp dữ liệu mới đó cho thuật toán.

Tính toán lambda, để bạn có thể nạp dữ liệu làm đầu vào tại thời điểm phân cụm.

chúng ta thậm chí có thể lấy WSS (trong tổng bình phương), biểu đồ (biểu đồ khuỷu tay) để tìm số cụm tối ưu.

Hy vọng câu trả lời này sẽ giúp bạn có được kết quả có ý nghĩa hơn.


1

Nhiều ý kiến ​​trên cho rằng phương tiện k có thể được thực hiện trên các biến phân loại và liên tục, sai và kết quả cần phải được thực hiện bằng một nhúm muối.

Như đã đề cập ở trên bởi @Tim ở trên, sẽ không có ý nghĩa khi tính khoảng cách eidianidian giữa các điểm không có thang đo cũng như không có thứ tự. Khi bạn mã hóa một biến nóng, bạn tạo ra ma trận thưa thớt 0 và 1. Vì phạm vi của các giá trị là cố định và trong khoảng từ 0 đến 1, chúng cần được chuẩn hóa theo cùng một cách với các biến liên tục. Điểm Z được sử dụng để tìm khoảng cách giữa các điểm. Mà vẫn còn, không hoàn toàn đúng. Tôi sẽ giải thích điều này với một ví dụ. Vì các danh mục loại trừ lẫn nhau, khoảng cách giữa hai điểm liên quan đến các biến phân loại, lấy một trong hai giá trị, cao hoặc thấp, tức là hai điểm thuộc cùng một loại hoặc không. Do những giá trị cực đoan này, thuật toán kết thúc với trọng số lớn hơn các biến liên tục trong việc ảnh hưởng đến sự hình thành cụm. Điều này có thể được xác minh bằng một kiểm tra đơn giản bằng cách xem biến nào đang ảnh hưởng và bạn sẽ ngạc nhiên khi thấy hầu hết chúng sẽ là biến phân loại. (Cách tìm các biến có ảnh hưởng nhất [1])

Một ví dụ: Xem xét một quốc gia biến phân loại. Bây giờ khi chúng ta biết khoảng cách (không giống nhau) giữa các quan sát từ các quốc gia khác nhau là bằng nhau (giả sử không có sự tương đồng nào khác như các quốc gia láng giềng hoặc các quốc gia từ cùng một lục địa). Nhưng ngược lại với điều này nếu bạn tính khoảng cách giữa các quan sát sau khi bình thường hóa một giá trị được mã hóa nóng, chúng sẽ không nhất quán (mặc dù sự khác biệt là nhỏ) cùng với thực tế là chúng có giá trị cao hoặc thấp.

Cuối cùng, tùy chọn tốt nhất có sẵn cho python là các nguyên mẫu k có thể xử lý cả các biến phân loại và biến liên tục.

[1]: Tìm hầu hết các biến có ảnh hưởng trong việc hình thành cụm: https://stackoverflow.com/a/53081779/8224401


0

Các mô hình hỗn hợp có thể được sử dụng để phân cụm một tập dữ liệu bao gồm các biến liên tục và phân loại.

Bạn có thể sử dụng gói R VarSelLCM (có sẵn trên CRAN), mô hình, trong mỗi cụm, các biến liên tục theo phân phối Gaussian và các biến thứ tự / nhị phân. Cẩn thận lưu trữ dữ liệu của bạn trong data.frame trong đó các biến liên tục là "số" và biến phân loại là "yếu tố".

Một hướng dẫn có sẵn tại: http://varsellcm.r-forge.r-project.org/

Hơn nữa, các giá trị còn thiếu có thể được quản lý bởi mô hình trong tay.


0

Tôi đã gặp một vấn đề rất giống nhau và cố gắng giải quyết vấn đề của mình (không biết nguyên mẫu k tồn tại) tài liệu phong phú mà tôi thấy mình gặp phải bắt nguồn từ ý tưởng không đo các biến có cùng số liệu khoảng cách. Hơn nữa có thể tồn tại nhiều nguồn thông tin khác nhau, có thể ngụ ý các cấu trúc hoặc "quan điểm" khác nhau của dữ liệu. Đây là một vấn đề tự nhiên, bất cứ khi nào bạn phải đối mặt với các mối quan hệ xã hội như những người trên twitter / trang web, v.v.

Một trong những giải pháp khả thi là giải quyết từng tập hợp con của các biến (tức là số & phân loại) một cách riêng biệt. Có thể dễ dàng hiểu được những gì một thước đo khoảng cách làm trên thang số. Dữ liệu phân loại tự nó có thể dễ hiểu như vậy: Xem xét việc có các vectơ quan sát nhị phân: Bảng dự phòng ngày 0/1 giữa hai vectơ quan sát chứa nhiều thông tin về độ tương tự giữa hai quan sát đó. Có tài liệu phong phú dựa trên các biện pháp tương tự tùy chỉnh khác nhau trên các vectơ nhị phân - hầu hết bắt đầu từ bảng dự phòng.

Cho cả hai ma trận khoảng cách / tương tự, cả hai đều mô tả cùng một quan sát, người ta có thể trích xuất một biểu đồ trên mỗi chúng (Multi-View-Graph-Clustering) hoặc trích xuất một biểu đồ có nhiều cạnh - mỗi nút (quan sát) có nhiều cạnh một nút khác, vì có ma trận thông tin (Multi-Edge-Clustering). Mỗi cạnh được gán trọng số của độ đo tương tự / khoảng cách tương ứng. Bắt đầu tại đây: Danh sách Github của Thuật toán phân cụm đồ thị & giấy tờ của họ. Vì có nhiều bộ thông tin có sẵn trên một quan sát duy nhất, chúng phải được đan xen bằng cách sử dụng ví dụ: hậu duệ của phân tích quang phổ hoặc hệ số ma trận liên kết. Phân tích quang phổ là phương pháp mặc định để tìm các phần có kết nối cao hoặc có trọng số lớn của các biểu đồ đơn. Có một phổ nhúng của dữ liệu đan xen, bất kỳ thuật toán phân cụm trên dữ liệu số có thể dễ dàng làm việc. Mặc định của văn học là kmeans cho vấn đề đơn giản, nhưng tiên tiến hơn nhiều - và không phải là thuật toán hạn chế ngoài kia có thể được sử dụng thay thế cho nhau trong bối cảnh này.

Tôi thích vẻ đẹp và tính tổng quát trong cách tiếp cận này, vì nó có thể dễ dàng mở rộng ra nhiều bộ thông tin hơn là chỉ các loại hình và sự tôn trọng của nó đối với "thước đo" cụ thể trên mỗi tập hợp dữ liệu. Điều này không làm giảm bớt bạn khỏi việc tinh chỉnh mô hình với các số liệu về khoảng cách và độ tương tự khác nhau hoặc nhân rộng các biến của bạn (tôi thấy mình đã điều chỉnh các biến số thành tỷ lệ theo tỷ lệ trong phân tích của tôi)

Từ góc độ khả năng mở rộng xem xét, chủ yếu có hai vấn đề:

  1. Xấp xỉ vấn đề Eigen (nơi cũng có một tài liệu phong phú về thuật toán)
  2. Ước tính ma trận khoảng cách (một vấn đề hoàn toàn kết hợp, phát triển rất nhanh - tôi chưa tìm thấy cách nào hiệu quả xung quanh nó)

Hãy vui vẻ với nó!


0

Bạn có thể muốn xem kỹ thuật tính năng tự động: http://www.orges-leka.de/automatic_feature_engineering.html . Phương pháp này dựa trên Bourgain Nhúng và có thể được sử dụng để lấy các tính năng số từ các khung dữ liệu phân loại và số hỗn hợp hoặc cho bất kỳ tập dữ liệu nào hỗ trợ khoảng cách giữa hai điểm dữ liệu. Khi đã chuyển đổi dữ liệu thành các tính năng số, người ta có thể sử dụng phân cụm K-nghĩa trực tiếp sau đó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.