目前在做聚類方面的科研工作, 看了很多相關的論文, 也做了一些工作, 于是想出個聚類系列記錄一下, 主要包括聚類的概念和相關定義、現有常用聚類算法、聚類相似性度量指標、聚類評價指標、 聚類的應用場景以及共享一些聚類的開源代碼
下面正式進入該系列的第一個部分,什么是聚類?
文章目錄
- 前言
- 什么是聚類
- 示例問題1:
- 示例問題2:
- 聚類的研究內容和問題
前言
目前, 機器學習/深度學習研究的熱火朝天,歸根到底可以將其分為兩大類: 有監督學習和無監督學習(當然也有半監督學習,弱監督學習等等)。
有監督學習和無監督學習的區別就是是否樣本可以去訓練和學習。當有足夠的訓練樣本,有大量強大模型可以用于服務于不同的任務,比如用于手寫數字識別的CNN及其變體、用于空氣質量預測的LSTM及其變體。
但如果沒有樣本標簽呢?對于分類任務來說, 如何對樣本進行分類? 如何將樣本劃分為不同相似的子集?這就是聚類問題!
什么是聚類
聚類就是研究如何根據樣本相似性和優化準則,將樣本劃分為不同的子集/類/簇等,使得簇內的樣本的相似性最大,簇間的樣本相似性最小。
這里的樣本可以是不同領域的不同類型的數據,可以是真實物理世界中的點、線、面數據,也可以是進行抽象、虛擬的點、線面數據。舉例來說: 包含經緯度的PM2.5站點,居民移動的軌跡點,車輛軌跡線數據,建筑物面數據,以及用戶、西瓜等抽象點數據
。
聚類在多個領域都有著廣泛應用,比如數據挖掘(聚類是數據挖掘的經典研究之一)、人類行為模式探測、圖像處理與分析、生物科學等。
同樣以經典數據集為例:鳶尾花(iris)分類問題
示例問題1:
iris數據集包含了不同類型的花的樣本數據,但是不知道具體每個樣本花所屬的類型,每個樣本數據有花萼長度、花萼寬度、花瓣長度和花瓣寬度等四個特征。現在需要根據樣本特征將iris數據劃分為不同的相似樣本簇。
思路: 在利用聚類問題解決此問題的方法為: 根據花的特征計算不同花之間的相似性,然后利用聚類算法根據相似性計算結果將不同的樣本點劃分為不同的組(亦可成為簇, 子集等), 位于相同簇內的樣本即被認為是具有相似屬性的花。
示例問題2:
空間上存在不同的空間點數據, 如圖1所示, 在位置點數據其他屬性, 只知道其空間坐標的前提夏, 如果將圖上的點劃分為不同的組?
思路: 該問題是典型的空間聚類問題, 根據點數據的空間坐標計算不同點之間的距離作為度量點數據之間相似性的標準,然后根據相似性度量結果對不同的空間點數據劃分為不同的簇, 其中簇內的樣本點之間的距離最小(相似性最小), 簇間的樣本距離最大(相似性最大)
聚類的研究內容和問題
通過上述介紹可知, 在聚類研究中, 不管研究的樣本數據的類型是空間數據還是非空間(屬性)數據, 聚類的核心內容是相同的, 包括兩個部分:
- 度量樣本數據之間的相似性(距離)。
- 基于相似性度量結果, 采用某種準則將樣本劃分為不同的簇。
而根據聚類的核心研究內容, 又具體需要研究以下內容:
- 如何度量樣本之間的相似性? 如何度量不同類型的樣本之間的相似性?
- 如何確定樣本簇的個數?
- 如何區別簇內數據和噪聲數據?
- 如何識別不同密度的簇?
- 如何識別不同任意形狀的簇?
- 如何確定識別的簇結果的質量? 即如何度量聚類結果的有效性?
- 如何識別具有弱連接的簇(頸問題和鏈問題)?
- 如何減少參數設置對聚類結果的影響?
- 如何減少人為的干預?
- …
后續會針對上述問題, 以及目前典型的聚類算法進行詳細介紹, 并給出部分實現代碼