【機器學習】DBSCAN聚類算法—優于Kmean—(理論+圖解+python代碼)

一、前言

二、DBSCAN聚類算法

三、參數選擇

四、DBSCAN算法迭代可視化展示

五、常用的評估方法:輪廓系數

六、用Python實現DBSCAN聚類算法

一、前言

去年學聚類算法的R語言的時候,有層次聚類、系統聚類、K-means聚類、K中心聚類,最后呢,被DBSCAN聚類算法迷上了,為什么呢,首先它可以發現任何形狀的簇,其次我認為它的理論也是比較簡單易懂的。今年在python這門語言上我打算好好弄弄DBSCAN。下面貼上它的官方解釋:

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪聲的基于密度的聚類方法)是一種基于密度的空間聚類算法。 該算法將具有足夠密度的區域劃分為簇,并在具有噪聲的空間數據庫中發現任意形狀的簇,它將簇定義為密度相連的點的最大集合。

二、DBSCAN聚類算法

文字看不懂看下面這個圖。下面這些點是分布在樣本空間的眾多樣本,現在我們的目標是把這些在樣本空間中距離相近的聚成一類。我們發現A點附近的點密度較大,紅色的圓圈根據一定的規則在這里滾啊滾,最終收納了A附近的5個點,標記為紅色也就是定為同一個簇。其它沒有被收納的根據一樣的規則成簇。(形象來說,我們可以認為這是系統在眾多樣本點中隨機選中一個,圍繞這個被選中的樣本點畫一個圓,規定這個圓的半徑以及圓內最少包含的樣本點,如果在指定半徑內有足夠多的樣本點在內,那么這個圓圈的圓心就轉移到這個內部樣本點,繼續去圈附近其它的樣本點,類似傳銷一樣,繼續去發展下線。等到這個滾來滾去的圈發現所圈住的樣本點數量少于預先指定的值,就停止了。那么我們稱最開始那個點為核心點,如A,停下來的那個點為邊界點,如B、C,沒得滾的那個點為離群點,如N)。

基于密度這點有什么好處呢,我們知道kmeans聚類算法只能處理球形的簇,也就是一個聚成實心的團(這是因為算法本身計算平均距離的局限)。但往往現實中還會有各種形狀,比如下面兩張圖,環形和不規則形,這個時候,那些傳統的聚類算法顯然就悲劇了。于是就思考,樣本密度大的成一類唄。吶這就是DBSCAN聚類算法。

三、參數選擇

上面提到了紅色圓圈滾啊滾的過程,這個過程就包括了DBSCAN算法的兩個參數,這兩個參數比較難指定,公認的指定方法簡單說一下:

  • 半徑:半徑是最難指定的 ,大了,圈住的就多了,簇的個數就少了;反之,簇的個數就多了,這對我們最后的結果是有影響的。我們這個時候K距離可以幫助我們來設定半徑r,也就是要找到突變點,比如:

以上雖然是一個可取的方式,但是有時候比較麻煩 ,大部分還是都試一試進行觀察,用k距離需要做大量實驗來觀察,很難一次性把這些值都選準。?

  • MinPts:這個參數就是圈住的點的個數,也相當于是一個密度,一般這個值都是偏小一些,然后進行多次嘗試

?

四、DBSCAN算法迭代可視化展示

國外有一個特別有意思的網站:https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

它可以把我們DBSCAN的迭代過程動態圖畫出來

設置好參數,點擊GO! 就開始聚類了!

直接跳到最后看一下DBSCAN的聚類結果,如下:

如果minPoints參數設置再大一點,那么這個笑臉可能會更好看。沒有顏色標注的就是圈不到的樣本點,也就是離群點,DBSCAN聚類算法在檢測離群點的任務上也有較好的效果。

如果是傳統的Kmeans聚類,我們也來看一下效果:

是不是好丑,這完美的體現出來DBSCAN算法基于密度聚類的優勢了啊.

?

五、常用的評估方法:輪廓系數

這里提一下聚類算法中最常用的評估方法——輪廓系數(Silhouette Coefficient):

ji

  1. 計算樣本i到同簇其它樣本到平均距離ai。ai越小,說明樣本i越應該被聚類到該簇(將ai稱為樣本i到簇內不相似度)。
  2. 計算樣本i到其它某簇Cj的所有樣本的平均距離bij,稱為樣本i與簇Cj的不相似度。定義為樣本i的簇間不相似度:bi=min(bi1,bi2,...,bik2)
  • si接近1,則說明樣本i聚類合理
  • si接近-1,則說明樣本i更應該分類到另外的簇
  • 若si近似為0,則說明樣本i在兩個簇的邊界上

?

六、用Python實現DBSCAN聚類算法

?
import pandas as pd# 導入數據beer = pd.read_csv('data.txt', sep=' ')print(beer)

輸出結果:

?
from sklearn.cluster import DBSCANX = beer[["calories","sodium","alcohol","cost"]]# 設置半徑為10,最小樣本量為2,建模db = DBSCAN(eps=10, min_samples=2).fit(X)labels = db.labels_beer['cluster_db'] = labels # 在數據集最后一列加上經過DBSCAN聚類后的結果beer.sort_values('cluster_db')# 注:cluster列是kmeans聚成3類的結果;cluster2列是kmeans聚類成2類的結果;scaled_cluster列是kmeans聚類成3類的結果(經過了數據標準化)

# 查看根據DBSCAN聚類后的分組統計結果(均值)print(beer.groupby('cluster_db').mean())

# 畫出在不同兩個指標下樣本的分布情況print(pd.scatter_matrix(X, c=colors[beer.cluster_db], figsize=(10,10), s=100))

# 我們可以從上面這個圖里觀察聚類效果的好壞,但是當數據量很大,或者指標很多的時候,觀察起來就會非常麻煩。from sklearn import metrics# 就是下面這個函數可以計算輪廓系數(sklearn真是一個強大的包)score = metrics.silhouette_score(X,beer.cluster_db)print(score)

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456068.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456068.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456068.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H264白皮書

理論上我是知道一點點的mpeg4的,但是貌似忘記了,本來要重新看mpeg4,結果有人告訴我h264肯定比mpeg4要好,結果就被派去看h264了,看完了一個什么白皮書以后,只好替h264吹噓一下了: 1。Intra pred…

python中的內建函數

內建函數 以下是目前我們已經滲透過的內建函數: 類型相關 int() 創建或者將其他數據轉化為整型float() 創建或者將其他數據轉化為浮點型bool() 創建或者將其他數據轉化為布爾型complex() 創建或者將其他數據轉化為復數str() 創建或者將其他數據轉化為字符串list() 創建或…

卡巴斯基:風險無國界 網絡安全從業者要與小網民保持一致

“互聯網沒有國界,每個國家碰到的問題基本上是類似的。對于網絡犯罪這件事,并不針對哪個國家,任何有弱點、有機會的地方,黑客都會去。”卡巴斯基公司CEO尤金卡巴斯基在接受未來網(微信公眾號lovek618)記者采…

js/jquery循環提取table單元格值

<table id"tbitem"><tr><td>測試數據1</td></tr><tr><td>測試數據2</td></tr><tr><td>測試數據3</td></tr><tr><td>測試數據4</td></tr><tr><td&g…

windows無法訪問指定設備路徑或文件_完全免費的文件數據恢復工具:Microsoft Windows File Recovery...

意外刪除文件的經歷是大多數人都遇到過&#xff0c;但是幸運的是有一種“后悔藥”可以吃&#xff0c;因為我們可以使用一些【數據恢復軟件】以找回一些已刪除的文件。市面上有很多這類型的軟件&#xff0c;例如EasyRecovery、DiskGenius、Recuva 等軟件。但是&#xff0c;功能強…

【機器學習】XGBoost集成算法——(理論+圖解+python代碼比較其他算法使用天池蒸汽數據)

一、集成算法思想 二、XGBoost基本思想 三、用python實現XGBoost算法 在競賽題中經常會用到XGBoost算法&#xff0c;用這個算法通常會使我們模型的準確率有一個較大的提升。既然它效果這么好&#xff0c;那么它從頭到尾做了一件什么事呢&#xff1f;以及它是怎么樣去做的呢&a…

H.264的技術優勢及其在H.323系統中的應用

一、引言 近年來&#xff0c;隨著我國通信網絡基礎設施的快速建設&#xff0c;視訊業務由于可以為處于多點的與會者提供音視頻等多種信息&#xff0c;節省大量費用&#xff0c;提高工作效率&#xff0c;因而發展迅速&#xff0c;并有望成為NGN的主要業務。視訊會議系統從產生至…

python中的列表

列表操作 一組有序數據的組合就是列表 創建列表 空列表 方式1&#xff1a;變量 []方式2&#xff1a; 變量 list() 具有一個數據的列表 變量 [值] 備注&#xff1a;列表中保存的每個都稱之為元素具有多個數據的列表 變量 [值,值,值....]普通操作 訪問列表中的元素 …

高通被歐盟指控壟斷 或將面臨高達25億美元罰款

在被韓國指控違反反壟斷規定后&#xff0c;高通近期又被歐盟指控以壟斷方式排擠競爭對手。在11月10日的聽證會上高通將回應有關指控。高通有可能因此遭受25億美元的巨額罰款。 歐盟之前就曾經指出&#xff0c;高通在2009至2011年以低于成本價售賣部分基帶芯片&#xff0c;將英國…

wireshark

wireshark使用&#xff1a; http://wenku.baidu.com/link?urljIT43RWZbHissG70TK_hqVKRO6KWNZ4nK9RfncaFA5p-mrmjxsNd2aIapcKTtDDAjG0mddEKiLtwbqpu3Z12bXStDiDevZUGWTPxop4mKhG wireshark開源代碼相關&#xff1a; http://blog.csdn.net/zx824/article/details/7207713 轉載于…

1萬條數據大概占多大空間_國漫丨2019年上半年漫畫數據報告

文 │ 骨朵國漫一、各漫畫平臺總體趨勢1、快看漫畫快看漫畫平臺2019年Q2各月評論數較Q1有較明顯的下滑&#xff0c;月評論數都在400萬條左右&#xff1b;收藏數方面&#xff0c;2019年2月達到了半年內最高值&#xff0c;為2660.1萬條。2、看漫畫、知音漫客等平臺(小明太極旗下)…

【機器學習】 LightGBM——優于XGBoost提升的集成算法(安裝+對比XGBoost改進+參數說明+python代碼實例)

中文官方文檔&#xff1a;http://lightgbm.apachecn.org/cn/latest/Installation-Guide.html 英文官方文檔&#xff1a;https://lightgbm.readthedocs.io/en/latest/ 一、lightGBM安裝 在anaconda中輸入&#xff1a;pip install lightGBM即可 輸入import lightgbm as lgb做測…

H.264簡單總結

&#xff08;quan整理&#xff09;一、視頻信息和信號的特點 < type"text/javascript">< type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> 1&#xff0e;1直觀性 利用人的視覺系統&am…

輕量級代碼生成器-OnlyCoder 第一篇

程序猿利器&#xff1a;代碼生成器&#xff0c;使用代碼生成器已經好幾年了&#xff0c;增刪改查各種生成&#xff0c;從UI到DATA層均生成過。之前有使用過動軟的&#xff0c;T4模板等.... T4生成實體還是沒有問題的&#xff0c;但是生成MVC視圖就有點煩雜了&#xff0c;動軟給…

python中的元組操作

元組操作 元組也是一組有序數據的組合&#xff0c;和列表唯一的不同是&#xff0c;元組不可修改 列表 用鉛筆寫的清單(能擦能改) 元組 用鋼筆寫的清單(不能擦改) 創建元組 創建空元組 方式1&#xff1a;變量 ()方式2&#xff1a; 變量 tuple() 創建單個元素的元組 方式1…

從Java到Go面向對象--繼承思想.md

2019獨角獸企業重金招聘Python工程師標準>>> Go語言實現繼承 我們都知道Java中通過extends來實現對象的繼承&#xff0c;那么Go中怎么實現繼承呢&#xff1f;Go語言沒有繼承&#xff0c;只有組合。我們知道&#xff0c;繼承的目的是什么&#xff0c;是類的重用&…

電腦鍵盤練習_電腦新手最關心的:零基礎如何快速掌握電腦打字的技巧?

隨著計算機的普及&#xff0c;越來越多的人在工作和生活中需要使用計算機。有的朋友通過參與培訓學會了鍵盤打字&#xff0c;有的朋友自學成才學會了鍵盤打字。這里筆者給大家分享在0基礎的情況下&#xff0c;通過自學快速掌握鍵盤打字的一種方法。需要說明的是&#xff0c;鍵盤…

【解決】jupyter在deepin安裝上的坑

報錯&#xff1a;env: "wine": 沒有那個文件或目錄 jupyter打開之后無法直接跳轉瀏覽器 解決方法&#xff1a; 1、 生成配置文件jupyter notebook --generate-config 2、打開jupyter_notebook_config.py&#xff0c;在文件最后添加以下代碼 選擇你的瀏覽器位置 …

鹽城出臺推進大數據產業發展實施意見

日前&#xff0c;鹽城市政府印發了《關于推進大數據產業發展的實施意見》&#xff08;下稱《實施意見》&#xff09;&#xff0c;從指導思想、推進原則、發展目標、發展方向、重點工程和保障措施六個方面明確了鹽城市加快培育和發展大數據產業的具體實施意見&#xff0c;這是該…

json字符串轉換成json對象

Json字符與Json對象的相互轉換方式有很多&#xff0c;接下來將為大家一一介紹下&#xff0c;感興趣的朋友可以參考下哈&#xff0c;希望可以幫助到你1>jQuery插件支持的轉換方式&#xff1a; 代碼如下:$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以將json字符串…