Thuật toán phân đoạn dữ liệu chuỗi


8

Tôi có một chuỗi lớn các vectơ có độ dài N. Tôi cần một số thuật toán học tập không giám sát để chia các vectơ này thành các đoạn M.

Ví dụ:

nhập mô tả hình ảnh ở đây

K-mean không phù hợp, vì nó đặt các yếu tố tương tự từ các vị trí khác nhau vào một cụm.

Cập nhật:

Dữ liệu thực trông như thế này:

nhập mô tả hình ảnh ở đây

Ở đây, tôi thấy 3 cụm: [0..50], [50..200], [200..250]

Cập nhật 2:

Tôi đã sử dụng phương tiện k sửa đổi và nhận được kết quả chấp nhận được này:

nhập mô tả hình ảnh ở đây

Biên giới của cụm: [0, 38, 195, 246]


2
Chất lượng câu hỏi nên được cải thiện để có câu trả lời thích hợp, ví dụ như tất cả các chuỗi luôn thay đổi tại cùng một điểm (như cách bạn minh họa trong ví dụ)?
Kasra Manshaei

Dữ liệu thực của tôi phức tạp hơn. Đây là danh sách các vectơ 9 chiều. Tôi sẽ thêm hình ảnh vào phần chính.
generall

Câu trả lời:


8

Xin vui lòng xem nhận xét của tôi ở trên và đây là câu trả lời của tôi theo những gì tôi hiểu từ câu hỏi của bạn:

Như bạn đã nói chính xác, bạn không cần Phân cụm nhưng Phân đoạn . Quả thực bạn đang tìm kiếm Điểm thay đổi trong chuỗi thời gian của bạn. Câu trả lời thực sự phụ thuộc vào độ phức tạp của dữ liệu của bạn. Nếu dữ liệu đơn giản như ví dụ trên, bạn có thể sử dụng sự khác biệt của các vectơ vượt quá các điểm thay đổi và đặt ngưỡng phát hiện các điểm đó như dưới đây: nhập mô tả hình ảnh ở đâydx<-20dx>20

Sơ chế

Xin lưu ý rằng có sự đánh đổi giữa vị trí chính xác của điểm thay đổi và số phân đoạn chính xác, tức là nếu bạn sử dụng dữ liệu gốc, bạn sẽ tìm thấy các điểm thay đổi chính xác nhưng toàn bộ phương pháp là nhạy cảm với tiếng ồn nhưng nếu bạn làm mịn tín hiệu của bạn trước tiên bạn có thể không tìm thấy những thay đổi chính xác nhưng hiệu ứng nhiễu sẽ ít hơn nhiều như thể hiện trong hình dưới đây:

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Phần kết luận

Đề nghị của tôi là làm mịn tín hiệu của bạn trước và đi đến một mthod phân cụm đơn giản (ví dụ: sử dụng GMM ) để tìm ước tính chính xác về số lượng phân đoạn trong tín hiệu. Đưa ra thông tin này, bạn có thể bắt đầu tìm các điểm thay đổi bị ràng buộc bởi số lượng phân khúc bạn tìm thấy từ phần trước.

Tôi hy vọng tất cả đã giúp :)

Chúc may mắn!

CẬP NHẬT

May mắn là dữ liệu của bạn khá đơn giản và sạch sẽ. Tôi thực sự khuyên bạn nên sử dụng thuật toán giảm kích thước (ví dụ PCA đơn giản ). Tôi đoán nó tiết lộ cấu trúc bên trong của cụm của bạn. Khi bạn áp dụng PCA cho dữ liệu, bạn có thể sử dụng k-nghĩa dễ dàng hơn và chính xác hơn nhiều.

Một giải pháp nghiêm túc (!)

Theo dữ liệu của bạn, tôi thấy sự phân phối rộng rãi của các phân khúc khác nhau là cơ hội tuyệt vời để bạn phân đoạn chuỗi thời gian của mình. Xem điều này (bản gốc , lưu trữ , nguồn khác ) có lẽ là giải pháp tốt nhất và hiện đại nhất cho vấn đề của bạn. Ý tưởng chính đằng sau bài báo này là nếu các phân đoạn khác nhau của chuỗi thời gian được tạo bởi các phân phối cơ bản khác nhau, bạn có thể tìm thấy các phân phối đó, đặt tham chiếu là sự thật nền tảng cho phương pháp phân cụm của bạn và tìm các cụm.

Ví dụ: giả sử một video dài trong đó 10 phút đầu tiên có người đi xe đạp, trong 10 phút thứ hai anh ta đang chạy và trong lần thứ ba anh ta đang ngồi. bạn có thể phân cụm ba phân đoạn (hoạt động) khác nhau này bằng cách sử dụng phương pháp này.


Cảm ơn đã trả lời chi tiết. Như bạn có thể thấy ở trên, tôi không thể sử dụng ngưỡng cho chuỗi dữ liệu thực của mình, tôi nghĩ, nó quá phức tạp đối với nó. Tôi đang cố gắng sửa đổi thuật toán k-mean, nó sẽ xem xét điều kiện của chuỗi (phần tử chỉ có thể thuộc về một trong hai cụm lân cận). Tôi hy vọng rằng tôi không phát minh lại bánh xe. :)
chung

1
Tôi nghĩ rằng dữ liệu của bạn không quá ồn ào (nghĩa là phức tạp) và bạn có thể sử dụng công cụ ngưỡng. điểm quan trọng là bạn có ấn tượng về dữ liệu để bạn có thể sử dụng thuật toán được giám sát, tức là cố gắng học các ngưỡng (và hy vọng nó sẽ khái quát tốt!). Tôi cũng cập nhật câu trả lời của mình cho một giải pháp tốt đẹp :)
Kasra Manshaei

Cảm ơn bạn vì các liên kết thú vị, tôi nghĩ, nó có thể được sử dụng cho mục đích của tôi, nhưng hiện tại, tôi sử dụng phương tiện k với các sửa đổi của mình, điều này mang lại cho tôi kết quả chấp nhận được (ảnh. Trong câu hỏi).
generall

1
kết quả rất tốt đẹp di chuyển thông minh. Tôi tự hào về bạn: D Chúc may mắn!
Kasra Manshaei

1

K-nghĩa là phân cụm được biết là cung cấp cực tiểu cục bộ, tùy thuộc vào khởi tạo ban đầu của bạn về các trung tâm cụm.

Tuy nhiên, tôi nghĩ rằng phân khúc k-mean có thể được giải quyết trên toàn cầu, vì chúng tôi không cho phép bất cứ điều gì trong việc tìm kiếm giải pháp.

Tôi có thể thấy từ ý kiến ​​của bạn rằng cuối cùng bạn đã quản lý để đạt được một phân khúc. Bạn có thể cho một số thông tin phản hồi, xin vui lòng? Là giải pháp của bạn là giải pháp tốt nhất? Hay bạn đã giải quyết cho một giải pháp đủ tốt?


Phân đoạn K-mean cũng có thể đưa ra cực tiểu cục bộ, bởi vì bạn vẫn cần chọn medoidids ban đầu \ centroid. Giải pháp hiện tại của tôi là đủ tốt cho tôi, nhưng tôi không thể khẳng định đó là giải pháp tốt nhất. Tôi có thể chia sẻ chi tiết về giải pháp của tôi nếu bạn quan tâm đến nó.
generall

Nó phụ thuộc vào cách bạn thực hiện nó. Trong khi đó, tôi đã tìm thấy trong một số tài liệu rằng để phân khúc, việc tìm ra mức tối thiểu toàn cầu, trong thời gian đa thức là khả thi.
Nolatar

0

Đúng như một gợi ý: bạn có thể thử sử dụng thuật toán DBSCAN, vì nó thường hoạt động tốt hơn nhiều so với phương tiện K để phân cụm

Mặt khác, nếu bạn muốn thử một cái gì đó mới để phân cụm và tìm hiểu một số nội dung thú vị, tôi khuyên bạn nên thử một số Phân tích dữ liệu tô pô thông qua các sơ đồ liên tục. Tôi sẽ để lại cho bạn một phần giới thiệu dễ dàng :)

https://towardsdatascience.com/persistent-homology-with-examples-1974d4b9c3d0

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.