DBSCAN là một thuật toán phân cụm rất nổi tiếng bởi vì, không giống như các thuật toán phân cụm khác như Kmeans, nó có thể phân cụm chính xác các hình dạng dữ liệu phức tạp. Vì vậy, trong bài đăng này, bạn sẽ học cách sử dụng thuật toán DBSCAN trong Python. Cụ thể hơn trong bài chúng ta sẽ thấy Show
Âm thanh thú vị? Cách thức hoạt động của thuật toán DBSCANGiới thiệu về mật độChính cái tên DBSCAN cho chúng ta biết thuật toán hoạt động như thế nào. DBSCAN xuất phát từ các từ Cụm ứng dụng không gian dựa trên mật độ, nghĩa là, nó là một thuật toán phân cụm dựa trên mật độ Theo nghĩa này, mật độ đề cập đến số lượng quan sát mà chúng ta có trong cùng một khu vực. Để cung cấp cho bạn một ý tưởng, trong hình ảnh sau đây, tôi bao gồm hai vùng, một vùng có mật độ điểm và vùng khác không có điểm Tuy nhiên, nếu bạn dừng lại để suy nghĩ về nó, khái niệm về mật độ có một chút chủ quan. Bởi vì, cần bao nhiêu điểm để coi một khu vực là “đậm đặc”? Chính xác là cả số điểm để coi một khu vực là dày đặc, cũng như khoảng cách mà các điểm này được tìm thấy là hai siêu tham số của mô hình Hiểu được điều này, hãy xem thuật toán DBSCAN hoạt động như thế nào DBSCAN hoạt động như thế nàoHoạt động của thuật toán DBSCAN dựa trên việc phân loại các quan sát thành ba loại
Vì vậy, DBSCAN dựa trên những điều sau đây
Trong hình ảnh sau đây, bạn có thể thấy dễ dàng hơn cách thức hoạt động của thuật toán Ưu điểm và nhược điểm của DBSCANNhư bạn có thể thấy, hoạt động của thuật toán DBSCAN khá đơn giản. Mặc dù vậy, nó là một thuật toán rất tốt vì nó có những ưu điểm sau
Tuy nhiên, nó cũng có một số nhược điểm như
Bây giờ bạn đã biết DBSCAN là gì, cũng như những ưu điểm và nhược điểm của nó, hãy xem cách chúng ta có thể sử dụng nó với thư viện Sklearn
Cách sử dụng DBSCAN trong Python với SklearnChức năng chínhThuật toán DBSCAN có thể được tìm thấy trong mô-đun Sklearn 2, với chức năng 3Giống như các mô hình cụm còn lại của Sklearn, việc sử dụng nó bao gồm hai bước. đầu tiên, 4 được thực hiện và sau đó dự đoán được áp dụng với 5. Một tùy chọn khác là thực hiện hai bước đó chỉ trong một với phương thức 6. Ví dụ
So Sánh Kmeans vs. DBSCANVì vậy, tôi sẽ tạo một số dữ liệu thử nghiệm để xem DBSCAN hoạt động như thế nào so với một phương pháp phân cụm điển hình khác, chẳng hạn như KMeans Để làm điều này, trước hết hãy tải các thư viện
Khi các thư viện đã được tải, tôi sẽ tạo hàm make_circle, hàm này cho phép tôi tạo các điểm trên một đường tròn bán kính r. Ngoài ra, những điểm này không hoàn hảo mà có một số nhiễu nên chúng không phải là những đường hoàn hảo
Chúng tôi trực quan hóa các điểm để xem dữ liệu chúng tôi đã tạo ra như thế nào ________số 8Như bạn có thể thấy, đó là về việc phân cụm dữ liệu theo các dạng phức tạp, ngoài ra, có các ngoại lệ. Vì vậy, hãy xem loại thuật toán phân cụm như KMeans sẽ trả về
Như chúng ta có thể thấy, Kmeans đã thực hiện phân cụm rất tệ, vì
Tóm lại, như bạn thấy, thuật toán kmeans không phải là mô hình tốt cho những trường hợp này. Bây giờ hãy xem mô hình DBSCAN hoạt động như thế nào 0Như chúng ta có thể thấy, thuật toán DBSCAN đã có thể phân cụm dữ liệu đầy đủ, vì
Tuy nhiên, có một vấn đề mấu chốt ở đây, đó là trong trường hợp này tôi đã chuyển một số tham số cho mô hình, nhưng tôi chưa giải thích cách tôi chọn chúng. Hãy xem cách thực hiện Cách chọn tham số trong DBSCANĐể chọn tham số epsilon, tức là khoảng cách tối đa mà tại đó một quan sát khác phải được xem xét để đáp ứng tiêu chí “gần”, chúng ta phải biết các biến cách nhau gần hay xa Thông thường sẽ có một vài biến sẽ ở rất gần nhau, và khi khoảng cách tăng lên thì số lượng biến gần nhau sẽ tăng lên. Biểu đồ đó là biểu đồ sẽ giúp chúng tôi chọn giá trị tối ưu của epsilon Để có được biểu đồ khoảng cách, chúng tôi sẽ sử dụng mô hình Hàng xóm gần nhất của Sklearn, vì chức năng này trả về thông tin về khoảng cách đến hàng xóm gần nhất của chúng tôi
Vì vậy, hãy xem cách sử dụng kNN để tìm giá trị tối ưu của epsilon 1Với điều này, bạn biết cách tìm giá trị tối ưu của epsilon. Thật không may, không có cách nào dễ dàng để tìm ra giá trị tối ưu cho số lượng quan sát phải ở gần đó để được coi là điểm cốt lõi, vì nó sẽ phụ thuộc vào mật độ của dữ liệu Cuối cùng, hãy xem mô hình này hoạt động chính xác như thế nào. Để làm điều này, hãy lập trình thuật toán DBSCAN từ đầu bằng Python. Chúng ta hãy đi đến đó Cách lập trình DBSCAN từ đầu bằng Python0. Cách tiếp cận lý thuyếtVới những gì chúng ta đã thấy cho đến nay, việc lập trình DBSCAN từ đầu bằng Python tương đối dễ dàng, vì chúng ta chỉ cần
Vì vậy, khi đã thấy cách tiếp cận lý thuyết, chúng tôi đang lập trình thuật toán theo từng phần 1. Tạo ma trận khoảng cáchChúng ta phải tạo một ma trận khoảng cách dễ thực hiện và cũng cho phép chúng ta sử dụng các loại khoảng cách khác nhau
Để làm điều này, chúng tôi sẽ sử dụng mô-đun 7 của thư viện 8, vì theo cách này, chúng tôi có thể tạo ma trận vuông khoảng cách một cách dễ dàng, nhanh chóng và ngoài ra, chấp nhận nhiều loại khoảng cách khác nhau. Bạn có thể tìm hiểu thêm về 9 tại đâyMặt khác, điều quan trọng cần lưu ý là các loại khoảng cách khác nhau yêu cầu dữ liệu phải được chuẩn hóa (tìm hiểu thêm về nó tại đây). Vì vậy, tôi đã tạo một chức năng để người dùng quyết định xem anh ta có muốn chuẩn hóa dữ liệu hay không 5Hoàn hảo, chúng ta đã có một hàm cho phép chúng ta tìm ma trận khoảng cách. Bây giờ chúng ta chuyển sang điểm tiếp theo. cách tìm hàng xóm gần nhất 2. Cách tìm hàng xóm gần nhấtBây giờ chúng ta có ma trận khoảng cách và tham số epsilon, đối với một quan sát i, những người hàng xóm gần nhất sẽ là những người có khoảng cách đến quan sát i bằng hoặc nhỏ hơn epsilon Vì chúng ta đang làm việc với mảng Numpy, nên chúng ta có thể tạo một hàm nhận vectơ khoảng cách từ điểm đó đến các điểm còn lại và sử dụng hàm 0, trả về những khoảng cách đáp ứng điều kiện đã nói trước đóTheo nghĩa này, một điều quan trọng cần lưu ý là ma trận khoảng cách bao gồm khoảng cách của một điểm với chính nó, luôn luôn bằng 0. Do đó, chúng ta sẽ phải tính đến điều này sau, khi chúng ta kiểm tra xem một quan sát có đáp ứng điều kiện có nhiều hơn x hàng xóm hay không 7Bây giờ chúng ta đã có cách tìm hàng xóm gần nhất, hãy chuyển sang phần khó nhất có lẽ là lập trình thuật toán DBSCAN. Hãy xem cách tạo chức năng mở rộng 3. Cách tạo hàm mở rộngHàm mở rộng dựa trên ý tưởng rằng, nếu một quan sát thuộc về một cụm, thì các quan sát duy nhất có thể thuộc về cùng một cụm là những quan sát gần với quan sát này. Đổi lại, nếu những người hàng xóm của quan sát đầu tiên thuộc về cụm, thì những người hàng xóm của những người hàng xóm cũng có thể thuộc về cụm Như bạn có thể thấy, đây là một hàm đệ quy vì, với một số hàng xóm, tôi kiểm tra xem từng hàng xóm, tôi kiểm tra xem nó có được gán cho một cụm không. Nếu chưa thì kiểm tra xem láng giềng đó có đủ điều kiện để được gán vào cụm không
Nếu nó thỏa mãn họ, đối với mỗi người hàng xóm, tôi sẽ áp dụng chính xác cùng một quy trình (nghĩa là cùng một chức năng) Vì vậy, tôi đưa phần này vào lớp 8Một khi điều này được thực hiện, chúng tôi chuyển sang điểm cuối cùng. phân tích từng quan sát 4. Đánh giá tất cả các quan sátĐánh giá tất cả các quan sát là đơn giản. bạn chỉ cần tạo một vòng lặp lặp lại cho mỗi quan sát và nếu quan sát chưa được chỉ định, hãy phân tích các lân cận và nếu các điều kiện được đáp ứng, hãy tiến hành mở rộng Theo nghĩa này, cần phải kiểm tra xem mỗi quan sát chưa được dán nhãn chưa bởi vì có thể trường hợp quan sát đó đã được phân loại thành một cụm trong một “phần mở rộng” của cụm của một quan sát trước đó Cuối cùng, khi chúng tôi đã duyệt qua tất cả các quan sát, chúng tôi trả về vectơ nhãn phân loại từng quan sát 0Bây giờ chúng ta đã lập trình chức năng DBSCAN từ đầu, hãy xem nó hoạt động như thế nào. Để làm điều này, chúng tôi sẽ kiểm tra chức năng với chính xác dữ liệu mà chúng tôi đã xác minh trước đó 1Như chúng ta có thể thấy, thuật toán DBSCAN của chúng ta đã hoạt động chính xác và hơn nữa, thời gian thực hiện của nó rất thấp (1 giây). Nếu bạn đã theo dõi phần xây dựng đến đây, bạn sẽ thấy thuật toán DBSCAN dễ hiểu, sử dụng và thậm chí lập trình từ đầu trong Python dễ dàng như thế nào DBSCAN bằng Python. phần kết luậnTôi hy vọng bài đăng này đã giúp bạn tìm hiểu thêm về DBSCAN như một phương pháp phân cụm dữ liệu Ngoài ra, nếu bạn muốn tìm hiểu về các loại phương pháp phân cụm khác, tôi khuyên bạn nên đọc bài đăng này, nơi tôi nói về Kmeans và cách lập trình nó từ đầu Cuối cùng, nếu có một phương pháp phân cụm cụ thể mà bạn muốn tìm hiểu, vui lòng liên hệ với tôi và nếu tôi biết về nó, tôi sẽ viết một bài về nó Tôi hy vọng rằng bài viết hữu ích cho bạn và bạn thích nó. Nếu vậy, tôi khuyến khích bạn đăng ký để cập nhật những bài viết mà tôi tải lên blog. Hẹn gặp lại bạn trong lần tiếp theo Làm cách nào để phân cụm bằng DBSCAN trong Python?Các bước liên quan đến thuật toán phân cụm DBSCAN . Chọn bất kỳ điểm p ngẫu nhiên Xác định tất cả các điểm có thể truy cập mật độ từ p với tham số ε và minPts Nếu p là điểm cốt lõi, hãy tạo một cụm (với ε và minPts ) Nếu p là điểm biên, hãy truy cập điểm tiếp theo trong tập dữ liệu Tiếp tục thuật toán cho đến khi tất cả các điểm được truy cập DBSCAN hay K cái nào tốt hơnK-means Phân cụm hiệu quả hơn đối với các tập dữ liệu lớn . DBSCan Clustering không thể xử lý hiệu quả các bộ dữ liệu chiều cao.
Giải thích phân cụm DBSCAN bằng ví dụ là gì?Cụm là các vùng dày đặc trong không gian dữ liệu, được phân tách bằng các vùng có mật độ điểm thấp hơn . Thuật toán DBSCAN dựa trên khái niệm trực quan về “cụm” và “nhiễu”. Ý tưởng chính là đối với mỗi điểm của một cụm, vùng lân cận của một bán kính nhất định phải chứa ít nhất một số điểm tối thiểu.
Hdbscan có tốt hơn DBSCAN không?Các nghiên cứu về khả năng mở rộng cũng chứng minh rằng HDBSCAN vượt trội so với DBSCAN về hiệu suất tính toán khi dữ liệu tăng kích thước . Hình bên dưới cho thấy ở 200.000 điểm dữ liệu, HDBSCAN nhanh gấp đôi DBSCAN (Hình. 5). |