2014-10-15 22 views
7

Tôi có tập dữ liệu chứa cả thuộc tính phân loại (danh nghĩa và thứ tự) và số. Tôi muốn tính toán ma trận tương tự (dis) trên các quan sát của tôi bằng cách sử dụng các thuộc tính hỗn hợp này. Sử dụng daisy() chức năng của gói cụm trong R, tôi có thể dễ dàng có được một ma trận không giống nhau như sau:Python tương đương với daisy() trong gói cụm của R

if(!require("cluster")) { install.packages("cluster"); require("cluster") } 
data(flower) 
as.matrix(daisy(flower, metric = "gower")) 

này sử dụng gower số liệu để đối phó với các biến danh nghĩa. Có tương đương Python của hàm daisy() trong R không?

Hoặc có thể là bất kỳ chức năng mô-đun nào khác cho phép sử dụng chỉ số Gower hoặc điều gì đó tương tự để tính toán ma trận tương tự (dis) cho tập dữ liệu với thuộc tính hỗn hợp (danh nghĩa, số)?

Trả lời

4

Tôi tin rằng bạn đang tìm kiếm scipy.spatial.distance.pdist.

Nếu bạn thực hiện một hàm tính khoảng cách Gower trên một cặp quan sát, bạn có thể chuyển hàm đó thành pdist và nó sẽ áp dụng nó theo cặp và trả về ma trận kết quả của khoảng cách hai chiều. Nó không xuất hiện rằng khoảng cách Gower là một trong những tùy chọn tích hợp. Tương tự như vậy, nếu một quan sát có thuộc tính hỗn hợp, bạn có thể chỉ định hàm của riêng bạn, sử dụng một cái gì đó giống như khoảng cách Euclide trên tập hợp con của thuộc tính số, khoảng cách Gower trên tập con của thuộc tính phân loại và thêm chúng - hoặc bất kỳ việc thực hiện nào khác về ý nghĩa của nó đối với ứng dụng của bạn, để tính toán khoảng cách giữa hai quan sát riêng biệt.

Để phân cụm bằng Python, thường bạn muốn làm việc với scikits.learnthis question and answer page thảo luận chính xác vấn đề này bằng cách sử dụng thước đo khoảng cách tùy chỉnh (trong trường hợp của bạn Gower) với scikits - không xuất hiện.

Bạn có thể sử dụng một trong các lựa chọn được cung cấp bởi pdist cùng với việc triển khai tại trang trả lời được liên kết đó - hoặc bạn có thể thực hiện một chức năng cho tương đồng Gower và sử dụng. Nhưng nếu bạn muốn các công cụ phân cụm từ các scikits, nó không xuất hiện trực tiếp.

+1

Cảm ơn bạn, bạn có biết của bất kỳ ra khỏi số liệu khoảng cách hộp có sẵn trong scikitlearn có thể cùng nhau đối phó với các biến phân loại và số? – Rhubarb

+1

Tôi thì không. Tài liệu của họ tốt, vì vậy việc tìm kiếm sẽ tiết lộ kết quả nhanh chóng nếu nó tồn tại. Tuy nhiên, cách tiếp cận của tôi là xác định hàm khoảng cách nhỏ của riêng tôi để xử lý điều này theo cách tôi muốn và chuyển nó thành 'pdist'. Bằng cách đó tôi có thể kiểm soát tầm quan trọng tương đối của các khía cạnh khác nhau của phép tính đó.Nếu điều này trở nên chậm chạp, tôi sẽ sử dụng numba hoặc Cython để nhắm mục tiêu triển khai thực hiện chức năng đó ở mức thấp hơn để tăng tốc nó. – ely

4

Chỉ cần thực hiện chức năng Gower để sử dụng với pdist sẽ không đủ.

Nội bộ pdist thực hiện một số phép biến đổi số sẽ thất bại nếu bạn sử dụng ma trận với dữ liệu hỗn hợp.

Tôi đã thực hiện chức năng Gower, theo bài báo gốc và các tham số tương ứng cần thiết trong mô-đun pdist (tôi không thể chỉ đơn giản là ghi đè các hàm, vì các lỗi trong mô-đun pdist là riêng tư).

Kết quả tôi nhận được với điều này cho đến nay là giống với chức năng daisy của R.

Mã nguồn là avilable tại jupyter máy tính xách tay này: https://sourceforge.net/projects/gower-distance-4python/files/

Các vấn đề liên quan