Hướng dẫn dbscan text clustering python - python phân cụm văn bản dbscan
Hướng dẫn phân cụm DBSCAN: Ví dụ với scikit-learn 2020-12-09
khung SVM
phân nhóm DBSCAN machine-learning Python scikit-learn unsupervised-learning Có nhiều thuật toán để phân cụm có sẵn ngày hôm nay. DBSCAN, hoặc phân cụm không gian dựa trên mật độ của các ứng dụng có nhiễu, là một trong những thuật toán phân cụm này. Nó có thể được sử dụng cho các điểm dữ liệu phân cụm dựa trên mật độ, tức là, bằng cách nhóm các khu vực với nhiều mẫu. Điều này làm cho nó đặc biệt hữu ích để thực hiện phân cụm trong điều kiện ồn ào: Như chúng ta sẽ thấy, bên cạnh việc phân cụm, DBSCAN cũng có khả năng phát hiện các điểm ồn ào, có thể - nếu muốn - bị loại bỏ khỏi bộ dữ liệu.density-based spatial clustering of applications with noise, is one of these clustering algorithms. It can be used for clustering data points based on density, i.e., by grouping together areas with many samples. This makes it especially useful for performing clustering under noisy conditions: as we shall see, besides clustering, DBSCAN is also capable of
detecting noisy points, which can - if desired - be discarded from the dataset. Trong bài viết này, chúng tôi sẽ xem xét DBSCAN chi tiết hơn. Đầu tiên, chúng ta sẽ xem xét một trường hợp sử dụng ví dụ để phân cụm, bằng cách tạo hai đốm dữ liệu nơi có một số mẫu nosiy. Sau đó, chúng tôi sẽ giới thiệu phân cụm dựa trên DBSCAN, cả các khái niệm của nó (điểm cốt lõi, điểm có thể tiếp cận trực tiếp, điểm có thể tiếp cận và ngoại lệ/nhiễu) và thuật toán của nó (bằng cách giải thích từng bước). Sau đó, chúng tôi sẽ thực hiện một thuật toán phân cụm dựa trên DBSCAN với Python và Scikit-learn. Điều này cho phép chúng tôi vừa hiểu thuật toán vừa áp dụng nó. Trong hướng dẫn này, bạn sẽ học ... Đặt một câu hỏi Hãy xem! 😎 Cập nhật 11/Jan/2021: Đã thêm ví dụ mã bắt đầu nhanh. added quick-start code example. [toc] Với ví dụ nhanh này, bạn có thể bắt đầu với DBSCAN trong Python ngay lập tức. Nếu bạn muốn hiểu cách thuật toán hoạt động chi tiết hơn hoặc xem các ví dụ từng bước để mã hóa phương thức phân cụm, hãy đảm bảo đọc toàn bộ bài viết dưới đây! Phân cụm là gì?DBSCAN là một thuật toán phân cụm và là một phần của lớp thuật toán học không giám sát. Nhưng phân cụm là gì? Trước tiên chúng ta hãy xem một định nghĩa:
Aha! Nó cho phép chúng tôi chọn các nhóm từ các bộ dữ liệu dựa trên các đặc điểm được chia sẻ cho các mẫu trong một nhóm cụ thể. Điều đó thật thú vị, bởi vì - chỉ đưa ra một ví dụ - chúng ta có thể sử dụng phân cụm để tạo bộ dữ liệu được dán nhãn (ví dụ: để chọn các lớp nếu chúng ta không có chúng) để tạo mô hình dự đoán. Hơn nữa, như chúng ta sẽ thấy trong bài viết này, phân cụm cũng có thể được sử dụng để phát hiện các mẫu ồn ào, có thể được loại bỏ trước khi đào tạo mô hình học tập có giám sát. Một loạt các ví dụ rộng lớn có sẵn ở đây. Giới thiệu phân cụm DBSCANDBSCAN là một thuật toán để thực hiện phân tích cụm trên bộ dữ liệu của bạn. Trước khi chúng tôi bắt đầu bất kỳ công việc nào trong việc thực hiện DBSCAN với Scikit-Learn, trước tiên hãy phóng to thuật toán. Như chúng ta đã đọc ở trên, nó là viết tắt của phân cụm không gian dựa trên mật độ của các ứng dụng có tiếng ồn, đây là một tên khá phức tạp cho một thuật toán tương đối đơn giản. Nhưng chúng ta có thể phá vỡ nó để chúng ta có thể nắm bắt trực giác những gì nó làm. Dựa trên mật độ có nghĩa là nó sẽ phóng to vào các khu vực có mật độ lớn, hay nói cách khác là một lượng lớn các mẫu gần nhau. Vì các cụm dày đặc, nên sự tập trung vào mật độ là tốt.density-based spatial clustering of applications with noise, which is quite a complex name for a relatively simple algorithm. But we can break it apart so that we can intuitively grasp what it does. Density-based means that it will zoom into areas that have great density, or in other words a large amount of samples closely together. Since clusters are dense, this focus on density is good. Phân cụm không gian có nghĩa là nó thực hiện phân cụm bằng cách thực hiện các hành động trong không gian tính năng. Nói cách khác, trong khi một số kỹ thuật phân cụm hoạt động bằng cách gửi tin nhắn giữa các điểm, DBSCAN thực hiện các biện pháp khoảng cách trong không gian để xác định mẫu nào thuộc về nhau. Phân cụm nói cho chính nó và các ứng dụng có tiếng ồn có nghĩa là kỹ thuật có thể được sử dụng với các bộ dữ liệu ồn ào. Chúng ta sẽ thấy lý do tại sao đây là trường hợp tiếp theo, bởi vì bây giờ chúng ta sẽ xem xét các khái niệm cơ bản của DBSCAN: điểm cốt lõi, điểm trực tiếp có thể tiếp cận, điểm có thể tiếp cận và ngoại lệ. Các khái niệm về dbscanTrước khi chúng ta bắt đầu nhìn vào các khái niệm này, trước tiên chúng ta phải tạo ra một bộ dữ liệu tưởng tượng. Đây là. Giả sử rằng chúng ta đang xử lý một không gian tính năng hai chiều trong đó các mẫu của chúng ta có thể được biểu thị dưới dạng điểm (nghĩa là [latex] (x_1, x_2) [/latex] tọa độ). Sau đó, nó có thể trông như thế này: Khi thực hiện DBSCAN, hai tham số phải được cung cấp trước khi thuật toán được chạy. Đầu tiên là giá trị epsilon hoặc [latex] \ epsilon [/latex]. Giá trị này chỉ ra một số khoảng cách xung quanh một điểm, có thể được hiển thị dưới dạng một vòng tròn với một diamater của [latex] \ epsilon [/latex] xung quanh một điểm. Lưu ý rằng mỗi điểm có cùng một epsilon, nhưng chúng tôi vẽ vòng tròn chỉ một điểm bên dưới.epsilon value, or [latex]\epsilon[/latex]. This value indicates some distance around a point, which can be visualized as a circle with a diamater of [latex]\epsilon[/latex] around a point. Note that each point has the same epsilon, but that we draw the circle for just one point below. Thứ hai là số lượng mẫu tối thiểu. Số này cho biết số lượng mẫu tối thiểu (bao gồm cả điểm chính) phải nằm trong phạm vi Epsilon (tức là, vòng tròn) để một điểm được coi là điểm cốt lõi. Bây giờ chúng ta sẽ xem xét những gì là những gì.minimum number of samples. This number indicates the minimum number of samples (including the point itself) that should be within the epsilon range (i.e., the circle) for a point to be considered a core point. We will now look at what these are. Điểm cốt lõiGiả sử rằng chúng ta có một số epsilon [latex] \ epsilon [/latex] và đặt số điểm tối thiểu thành 3. Bây giờ chúng ta sẽ xem xét hai điểm của bộ dữ liệu. Ở bên trái, chúng tôi nhìn vào điểm trên, trong khi ở bên phải, chúng tôi nhìn vào một trong những điểm giữa.
Nói cách khác, trong ví dụ của chúng tôi, một điểm là một điểm cốt lõi nếu ít nhất 3 điểm, bao gồm cả chính nó, nằm trong vòng tròn. Như đã trở nên rõ ràng, cả hai điểm mà chúng ta đang xem xét là những điểm được gọi là điểm cốt lõi. Điều tuyệt vời của các điểm cốt lõi là chúng có khả năng là một phần của một cụm, bởi vì chúng ở trong vùng lân cận của các điểm khác. Đó là lý do tại sao chúng rất quan trọng trong thuật toán DBSCAN. Nếu bộ dữ liệu lớn hơn (ví dụ: vì chúng tôi phóng to vào một khu vực cụ thể) và một điểm khác sẽ được kiểm tra, chúng tôi có thể đi đến kết luận rằng nó không phải là điểm cốt lõi. Ví dụ dưới đây minh họa lý do tại sao: chỉ có hai điểm, bao gồm cả chính nó, trong vùng lân cận [latex] \ epsilon [/latex] của điểm. Vì [latex] \ text {minpts} = 3 [/latex] và [latex] 2 <3 [/latex], đây không phải là một điểm cốt lõi. Điểm trực tiếp tiếp cậnNếu một điểm không phải là một điểm cốt lõi, chúng ta phải xem liệu nó có thể truy cập trực tiếp hay không.directly reachable.
Nói cách khác, trong ví dụ của chúng tôi, một điểm là một điểm cốt lõi nếu ít nhất 3 điểm, bao gồm cả chính nó, nằm trong vòng tròn. Như đã trở nên rõ ràng, cả hai điểm mà chúng ta đang xem xét là những điểm được gọi là điểm cốt lõi. Điều tuyệt vời của các điểm cốt lõi là chúng có khả năng là một phần của một cụm, bởi vì chúng ở trong vùng lân cận của các điểm khác. Đó là lý do tại sao chúng rất quan trọng trong thuật toán DBSCAN.
Nếu một điểm không phải là một điểm cốt lõi, chúng ta phải xem liệu nó có thể truy cập trực tiếp hay không. Một điểm & nbsp; q & nbsp; is & nbsp; có thể truy cập trực tiếp & nbsp; từ & nbsp; p & nbsp; if point & nbsp; q & nbsp; nằm trong khoảng cách & nbsp; ε & nbsp; từ lõi điểm & nbsp; p. Điểm chỉ được cho là có thể tiếp cận trực tiếp từ các điểm cốt lõi.Trong ví dụ trên, chúng tôi thấy rằng điểm phụ mà chúng tôi đang xem không phải là một điểm cốt lõi. Nhưng nó có thể tiếp cận trực tiếp không?reachable points:
Nói cách khác, trong ví dụ của chúng tôi, một điểm là một điểm cốt lõi nếu ít nhất 3 điểm, bao gồm cả chính nó, nằm trong vòng tròn. Như đã trở nên rõ ràng, cả hai điểm mà chúng ta đang xem xét là những điểm được gọi là điểm cốt lõi. Điều tuyệt vời của các điểm cốt lõi là chúng có khả năng là một phần của một cụm, bởi vì chúng ở trong vùng lân cận của các điểm khác. Đó là lý do tại sao chúng rất quan trọng trong thuật toán DBSCAN.Nếu bộ dữ liệu lớn hơn (ví dụ: vì chúng tôi phóng to vào một khu vực cụ thể) và một điểm khác sẽ được kiểm tra, chúng tôi có thể đi đến kết luận rằng nó không phải là điểm cốt lõi. Ví dụ dưới đây minh họa lý do tại sao: chỉ có hai điểm, bao gồm cả chính nó, trong vùng lân cận [latex] \ epsilon [/latex] của điểm. Vì [latex] \ text {minpts} = 3 [/latex] và [latex] 2 <3 [/latex], đây không phải là một điểm cốt lõi.
Nói cách khác, trong ví dụ của chúng tôi, một điểm là một điểm cốt lõi nếu ít nhất 3 điểm, bao gồm cả chính nó, nằm trong vòng tròn. Như đã trở nên rõ ràng, cả hai điểm mà chúng ta đang xem xét là những điểm được gọi là điểm cốt lõi. Điều tuyệt vời của các điểm cốt lõi là chúng có khả năng là một phần của một cụm, bởi vì chúng ở trong vùng lân cận của các điểm khác. Đó là lý do tại sao chúng rất quan trọng trong thuật toán DBSCAN.Nếu bộ dữ liệu lớn hơn (ví dụ: vì chúng tôi phóng to vào một khu vực cụ thể) và một điểm khác sẽ được kiểm tra, chúng tôi có thể đi đến kết luận rằng nó không phải là điểm cốt lõi. Ví dụ dưới đây minh họa lý do tại sao: chỉ có hai điểm, bao gồm cả chính nó, trong vùng lân cận [latex] \ epsilon [/latex] của điểm. Vì [latex] \ text {minpts} = 3 [/latex] và [latex] 2 <3 [/latex], đây không phải là một điểm cốt lõi.
Bằng cách tìm kiếm các cụm từng cụm, chúng ta có thể chậm nhưng chắc chắn xây dựng một cụm và không nhất thiết phải kết thúc với quá nhiều chỉ dẫn cụm thực sự là một phần của cùng một cụm. Tất nhiên, đây là thứ mà chúng ta có thể kiểm soát bằng cách đặt [latex] \ epsilon [/latex] và [latex] \ text {minpts} [/latex] và tùy thuộc vào bộ dữ liệu (yêu cầu phân tích dữ liệu khám phá của riêng bạn trước tiên). Ngoài ra, các điểm ghi nhãn là tiếng ồn có nghĩa là sau khi phân cụm kết thúc, chúng tôi có thể chỉ cần hiển thị và đếm các điểm còn lại được dán nhãn là tiếng ồn và có thể xóa chúng khỏi bộ dữ liệu của chúng tôi. Nếu đối với một số [latex] \ epsilon [/latex] giá trị cho [latex] \ text {minpts} = 4 [/latex], đây sẽ là kết quả: nhiều điểm cốt lõi, một số điểm không phải là điểm cốt lõi nhưng có thể truy cập trực tiếp Từ các điểm cốt lõi và do đó là một phần của cụm, và một số điểm không thể truy cập được và do đó các ngoại lệ. Nói cách khác, chúng ta có một cụm ở đây, bao gồm các điểm màu xanh lá cây và đỏ, trong đó hai điểm màu xanh là ngoại lệ. Thực hiện phân cụm dựa trên DBSCAN với Scikit-learnĐược rồi, bây giờ bạn nên có một sự hiểu biết công bằng về cách thuật toán DBSCAN hoạt động và do đó làm thế nào nó có thể được sử dụng để phân cụm. Hãy chuyển đổi kiến thức của chúng tôi thành mã bằng cách viết một tập lệnh có khả năng thực hiện phân cụm trên một số dữ liệu. Chúng tôi sẽ sử dụng Scikit-Learn cho mục đích này, vì nó có sẵn 1 trong API 2 của nó và vì Python là ngôn ngữ tiêu chuẩn thực tế cho kỹ thuật ML ngày nay.Hãy mở trình chỉnh sửa mã và tạo tệp có tên, ví dụ: 3.Thêm nhập khẩuĐiều đầu tiên chúng tôi làm là thêm nhập khẩu:
Tạo một bộ dữ liệuĐể tạo dữ liệu, chúng tôi sẽ thực hiện hai điều: chỉ định một số tùy chọn cấu hình và sử dụng chúng khi gọi 4. Lưu ý rằng chúng tôi cũng chỉ định 1 và 2, sau này sẽ được sử dụng cho hoạt động phân cụm.
Các cụm trông như sau (trong trường hợp của bạn, chúng sẽ trông hơi khác nhau vì chúng được tạo ngẫu nhiên). Đối với khả năng sao chép, có thể là khôn ngoan khi lưu dữ liệu chỉ một lần sau khi chạy tập lệnh - bằng cách không đưa ra dòng 3 sau đó, bạn sẽ luôn tải cùng một dữ liệu từ tệp 4. Điều này là không cần thiết.
Khởi tạo DBSCAN và tính toán các cụmBây giờ chúng ta có thể khởi tạo DBSCAN và tính toán các cụm.
Trong trường hợp của chúng tôi, in số lượng cụm và số lượng mẫu ồn ào mang lại 2 cụm với 0 mẫu ồn do lựa chọn [latex] \ epsilon = 1.0 của chúng tôi; \ text {minpts} = 13 [/latex]. Trong trường hợp của bạn, kết quả có thể sẽ khác nhau. Xáo trộn xung quanh với các giá trị epsilon (nghĩa là làm cho vòng tròn lớn hơn) hoặc số lượng mẫu tối thiểu (tùy thuộc vào mật độ của các cụm của bạn) sẽ mang lại kết quả khác sau đó!
(Outcome:)
Vẽ đồ thị dữ liệu phân cụmCuối cùng, chúng tôi có thể tạo ra một sơ đồ phân tán cho dữ liệu đào tạo của chúng tôi. Vì chúng tôi có hai cụm, chúng tôi sử dụng hàm Lambda đơn giản chọn một màu này hay màu khác. Nếu bạn có nhiều cụm, bạn có thể dễ dàng khái quát chức năng Lambda này với cách tiếp cận từ điển.
Kết quả cuối cùng thực sự là hai cụm, như dự định: Mã mô hình đầy đủĐây là mã đầy đủ cho những người nhằm mục đích sử dụng nó ngay lập tức:
Xóa nhiễu khỏi bộ dữ liệu sau khi phân cụmNếu chúng ta điều chỉnh giá trị cho [latex] \ epsilon [/latex] và đặt nó thành 0,3, chúng ta sẽ nhận được kết quả khác nhau:
Cụ thể, thuật toán hiện có khả năng phát hiện các mẫu ồn ào, như chúng ta có thể thấy trong hình ảnh dưới đây. Tuy nhiên, việc loại bỏ các mẫu ồn ào sau khi thực hiện DBSCAN rất dễ dàng - và chỉ cần bốn dòng mã bổ sung. Đây là bởi vì DBSCAN đặt nhãn cho các mẫu ồn ào thành 9; Đây là cách "báo hiệu một nhãn là ồn ào".Thêm các dòng trước khi tạo biểu đồ phân tán cho thấy các mẫu được dán nhãn là nhiễu được xóa khỏi bộ dữ liệu. Vì lý do này, chúng tôi cũng có thể sử dụng DBSCAN làm thuật toán loại bỏ tiếng ồn, ví dụ: Trước khi áp dụng phân loại dựa trên SVM, để tìm ranh giới quyết định tốt hơn. 0Bản tóm tắtTrong bài viết này, chúng tôi đã xem xét phân cụm dựa trên DBSCAN theo nhiều cách. Đầu tiên, chúng tôi đã xem xét phân tích cụm hoặc phân cụm nói chung - nó là gì? Cái này được dùng để làm gì? Như chúng ta có thể thấy trong bài viết này, có một số lĩnh vực thú vị nơi các kỹ thuật như vậy có thể được sử dụng. Sau đó, chúng tôi đã giới thiệu DBSCAN, viết tắt của phân cụm không gian dựa trên mật độ của các ứng dụng có nhiễu và là một thuật toán phân cụm được sử dụng rộng rãi. Chúng tôi đã xem xét thuật toán và các khối xây dựng khái niệm trước. Chúng tôi đã thấy rằng các điểm cốt lõi được đặt tên nên nếu ít nhất [latex] \ text {minpts} [/latex] điểm được đặt ở mức nhỏ hơn [latex] \ epsilon [/latex] khoảng cách từ điểm. Tất cả các điểm trong vòng tròn này có thể truy cập trực tiếp. Nếu chúng ta có thể xây dựng một đường dẫn từ điểm này sang điểm khác, không có khả năng tiếp cận trực tiếp, thông qua các điểm cốt lõi khác, điểm cuối cùng được cho là có thể truy cập được. Tất cả các điểm không thể truy cập được được coi là ngoại lệ, hoặc tiếng ồn. Các thuật toán sau đó thực sự đơn giản. Bắt đầu từ một điểm, nó cố gắng xây dựng một cụm bằng cách nhóm [latex] \ epsilon- \ text {lân cận} [/latex], tức là các điểm có thể tiếp cận trực tiếp cho điểm. Nếu không có điểm như vậy, nó được dán nhãn là tiếng ồn. Nếu một số có sẵn, đối với các điểm này, các điểm có thể tiếp cận trực tiếp của chúng được thêm vào, v.v., cho đến khi cụm không thể được mở rộng thêm nữa. Sau đó, nó chọn một điểm không visit khác và thực hiện các bước tương tự, cho đến khi tất cả các điểm đã được truy cập. Sau đó chúng ta biết các cụm và các điểm ồn ào. Biết về các khối xây dựng và cách thuật toán hoạt động về mặt khái niệm, sau đó chúng tôi đã chuyển tiếp và cung cấp một triển khai Python cho DBSCAN bằng cách sử dụng Scikit-learn. Chúng tôi đã thấy rằng chỉ với một vài dòng mã Python, chúng tôi có thể tạo một bộ dữ liệu, áp dụng phân cụm DBSCAN cho nó, trực quan hóa các cụm và thậm chí xóa các điểm ồn ào. Cái sau làm cho bộ dữ liệu của chúng tôi sạch hơn mà không mất nhiều thông tin cốt lõi có sẵn trong các cụm. Đặt một câu hỏi Tôi hy vọng rằng bạn đã học được điều gì đó từ bài báo hôm nay. Nếu bạn có bất kỳ câu hỏi nào, bạn có thể để lại một bình luận trong phần bình luận bên dưới. Bạn cũng có thể nhấp vào nút màu xanh lá cây bên phải, nơi bạn có thể đặt câu hỏi của bạn trong diễn đàn câu hỏi của chúng tôi. Xin vui lòng để lại một bình luận nếu bạn có những nhận xét hoặc đề xuất khác để cải thiện. Tôi rất muốn nghe từ bạn.Ask Questions forum. Please feel free to leave a comment as well if you have other remarks or suggestions for improvement. I'd love to hear from you. Cảm ơn bạn đã đọc MachineCurve hôm nay và Kỹ thuật hạnh phúc! 😎 Người giới thiệuWikipedia. (2007, ngày 16 tháng 10). & NBSP; DBSCAN. Wikipedia, bách khoa toàn thư miễn phí. Truy cập & nbsp; tháng 12 & nbsp; 8, 2020, từ & nbsp; https: //en.wikipedia.org/wiki/dbscan SCIKIT-LEARN. . Scikit-learn: Học máy trong Python-Scikit-LEARN 0.16.1 Tài liệu. Truy cập & nbsp; tháng 12 & nbsp; 9, 2020, từ & nbsp; https: //scikit-learn.org/stable/modules/generated/sklearn.cluster.dbscan.html#sklearn.cluster.dbscan Wikipedia. (2004, ngày 21 tháng 5). & NBSP; Phân tích cụm. Wikipedia, bách khoa toàn thư miễn phí. Truy cập & nbsp; tháng 12 & nbsp; 9, 2020, từ & nbsp; https: //en.wikipedia.org/wiki/cluster_analysis |