聚類算法按照算法原理,可以大致劃分為以下幾類,

  1. 基于距離的聚類算法
  2. K-Means:將數(shù)據(jù)點(diǎn)劃分為 K 個簇,使得每個點(diǎn)到其對應(yīng)簇中心的距離最小。
  1. 層次聚類算法
  2. Hierarchical Clustering:根據(jù)數(shù)據(jù)點(diǎn)之間的距離構(gòu)建一個層次結(jié)構(gòu),可以是樹形結(jié)構(gòu)。
  1. 基于密度的聚類算法
  2. DBSCAN (Density-Based Spatial Clustering of Applications with Noise):基于密度的聚類算法,可以檢測到任意形狀的簇。
  1. 基于模型的聚類算法
  2. Gaussian Mixture Models (GMM):假設(shè)數(shù)據(jù)由多個高斯分布組成,每個分布對應(yīng)一個簇。
  1. 基于模型的聚類算法(文本聚類)
  2. Latent Dirichlet Allocation (LDA):用于文檔聚類,將文檔表示為單詞的主題分布。
  3. 其他聚類算法
  4. Mean-Shift Clustering:基于密度的聚類算法,尋找局部密度峰值作為簇中心。

聚類算法 K-Means

背景介紹

K-Means 是一種無監(jiān)督學(xué)習(xí)算法,主要用于將相似的數(shù)據(jù)點(diǎn)分到同一個組或簇中。它廣泛應(yīng)用于數(shù)據(jù)挖掘、模式識別和機(jī)器學(xué)習(xí)等領(lǐng)域。K-Means 算法假設(shè)數(shù)據(jù)空間是凸的,并且簇是球形的。

一句話通俗概括原理

K-Means 算法通過迭代計算來將數(shù)據(jù)點(diǎn)分配到 K 個簇中,使得每個簇內(nèi)的數(shù)據(jù)點(diǎn)距離簇中心最近。

算法原理及核心公式

  1. 將每個數(shù)據(jù)點(diǎn)分配到最近的聚類中心,形成 K 個簇。
  2. 計算每個簇的中心點(diǎn),即該簇所有數(shù)據(jù)點(diǎn)的均值。
  3. 重復(fù)步驟 2 和 3,直到聚類中心不再改變。

模型訓(xùn)練過程

  1. 初始化:隨機(jī)選擇 K 個數(shù)據(jù)點(diǎn)作為初始聚類中心。
  2. 分配:將所有數(shù)據(jù)點(diǎn)分配到最近的聚類中心。
  3. 更新:計算每個簇的中心點(diǎn)。
  4. 重復(fù):重復(fù)步驟 2 和 3,直到聚類中心變化很小或達(dá)到最大迭代次數(shù)。

模型調(diào)優(yōu)經(jīng)驗(yàn)

優(yōu)缺點(diǎn)

應(yīng)用場景

Python 示例代碼

from sklearn.cluster import KMeans
import numpy as np

# 示例數(shù)據(jù)
data = np.array([[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0]])

# 創(chuàng)建KMeans對象
kmeans = KMeans(n_clusters=2, random_state=0)

# 擬合模型
kmeans.fit(data)

# 輸出聚類中心
print(kmeans.cluster_centers_)

# 對數(shù)據(jù)進(jìn)行聚類
labels = kmeans.predict(data)

# 輸出每個數(shù)據(jù)點(diǎn)的簇標(biāo)簽
print(labels)

這段代碼使用sklearn庫中的KMeans類來對示例數(shù)據(jù)進(jìn)行聚類,并輸出聚類中心和每個數(shù)據(jù)點(diǎn)的簇標(biāo)簽。

Hierarchical Clustering

背景介紹

Hierarchical Clustering(層次聚類)是一種非監(jiān)督機(jī)器學(xué)習(xí)算法,它通過將數(shù)據(jù)點(diǎn)逐步合并成簇,或者將簇逐步分裂成更小的簇,來發(fā)現(xiàn)數(shù)據(jù)中的層次結(jié)構(gòu)。這種方法不依賴于預(yù)先指定的簇數(shù),而是根據(jù)數(shù)據(jù)本身的結(jié)構(gòu)來形成簇。

一句話通俗概括原理

“就像拼圖一樣,層次聚類將相似的數(shù)據(jù)點(diǎn)像拼圖一樣拼接在一起,形成不同的層級。”

算法原理及核心公式

層次聚類主要有兩種類型:自下而上的凝聚式(Agglomerative)和自上而下的分裂式(Divisive)。這里以凝聚式為例進(jìn)行說明:

  1. 初始化:將每個數(shù)據(jù)點(diǎn)視為一個簇。
  2. 合并:計算最近距離的簇,并將它們合并成一個簇。
  3. 重復(fù):繼續(xù)上述過程,直到滿足停止條件(如達(dá)到指定層數(shù)或簇數(shù))。

核心公式:

模型訓(xùn)練過程

  1. 選擇距離度量方法。
  2. 選擇簇合并方法。
  3. 初始化每個數(shù)據(jù)點(diǎn)為單獨(dú)的簇。
  4. 計算簇間的距離。
  5. 根據(jù)選擇的合并方法合并最近的簇。
  6. 重復(fù)步驟 4 和 5,直到達(dá)到停止條件。

模型調(diào)優(yōu)經(jīng)驗(yàn)

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

應(yīng)用場景

Python 示例代碼

from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt

# 示例數(shù)據(jù)
data = [[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0]]

# 使用凝聚式層次聚類
linked = linkage(data, method='ward', metric='euclidean')

# 繪制樹狀圖
dendrogram(linked)
plt.show()

這段代碼使用了scipy庫中的linkagedendrogram函數(shù)來執(zhí)行層次聚類并繪制樹狀圖。data是示例數(shù)據(jù),method='ward'指定了簇合并方法為 Ward 方法,metric='euclidean'指定了距離度量方法為歐氏距離。

DBSCAN

背景介紹

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一種基于密度的聚類算法。它通過分析數(shù)據(jù)點(diǎn)之間的密度分布來進(jìn)行聚類,能夠發(fā)現(xiàn)任意形狀的簇,并且可以處理噪聲和異常值。

一句話通俗概括原理

DBSCAN 通過尋找高密度區(qū)域來定義簇,并以此將數(shù)據(jù)點(diǎn)劃分到簇中。

算法原理及核心公式

核心概念:

  1. 核心點(diǎn):一個點(diǎn)如果至少有 MinPts 個鄰居,那么它就是一個核心點(diǎn)。
  2. 邊界點(diǎn):如果一個點(diǎn)不是核心點(diǎn),但至少有 MinPts 個鄰居中的部分是核心點(diǎn),那么它是一個邊界點(diǎn)。
  3. 噪聲點(diǎn):如果一個點(diǎn)不是核心點(diǎn),且其鄰居數(shù)量小于 MinPts,那么它是一個噪聲點(diǎn)。

核心公式:

DBSCAN 不需要預(yù)先指定簇的數(shù)量,它通過以下公式來計算:

模型訓(xùn)練過程

  1. 初始化:設(shè)置鄰域半徑 Eps 和最小點(diǎn)數(shù) MinPts。
  2. 核心點(diǎn)檢測:對于數(shù)據(jù)集中的每個點(diǎn),檢查其 Eps 鄰域內(nèi)是否有 MinPts 個點(diǎn)。如果是,則該點(diǎn)為核心點(diǎn)。
  3. 簇擴(kuò)展:從核心點(diǎn)開始,遞歸地將其鄰居加入簇中。
  4. 重復(fù):重復(fù)步驟 2 和 3,直到所有點(diǎn)都被處理。

模型調(diào)優(yōu)經(jīng)驗(yàn)

  1. MinPts:通常需要根據(jù)數(shù)據(jù)的分布來設(shè)定。如果簇的大小變化較大,可以嘗試多個 MinPts 值。
  2. Eps:可以手動設(shè)定,或者使用 KNN 算法來估計。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

缺點(diǎn):

應(yīng)用場景

Python 示例代碼

from sklearn.cluster import DBSCAN
import numpy as np

# 生成一些示例數(shù)據(jù)
X = np.array([[1, 2], [2, 2], [2, 3], [8, 7], [8, 8], [25, 80]])

# 創(chuàng)建DBSCAN對象
db = DBSCAN(eps=0.3, min_samples=2)

# 擬合模型
db.fit(X)

# 獲取簇標(biāo)簽
labels = db.labels_

# 打印簇標(biāo)簽
print(labels)

在這個示例中,我們使用sklearn庫中的DBSCAN類來聚類數(shù)據(jù)。eps參數(shù)設(shè)置為 0.3,min_samples參數(shù)設(shè)置為 2。運(yùn)行代碼后,我們可以看到每個點(diǎn)的簇標(biāo)簽。

Gaussian Mixture Models (GMM)

背景介紹

Gaussian Mixture Models(GMM)是一種概率模型,它將數(shù)據(jù)集視為由多個高斯分布組成的混合體。這種模型在機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘中廣泛應(yīng)用于無監(jiān)督學(xué)習(xí),特別是在聚類分析中。它通過將數(shù)據(jù)集劃分為不同的簇,幫助用戶發(fā)現(xiàn)數(shù)據(jù)中的潛在結(jié)構(gòu)。

一句話通俗概括原理

GMM 是一種假設(shè)數(shù)據(jù)由多個高斯分布混合而成的模型,通過最大化似然函數(shù)來估計這些高斯分布的參數(shù),從而對數(shù)據(jù)進(jìn)行聚類。

算法原理及核心公式

核心公式

GMM 的核心公式是高斯分布的概率密度函數(shù)(PDF)和最大化似然函數(shù)。

  1. 高斯分布 PDF

其中:

  1. 似然函數(shù)

其中:

算法流程

  1. 初始化:隨機(jī)選擇 K 個均值向量作為初始均值。
  2. 計算權(quán)重:對于每個數(shù)據(jù)點(diǎn),計算其屬于每個高斯分布的概率,并歸一化。
  3. 更新均值和協(xié)方差:使用最大似然估計法更新每個高斯分布的均值和協(xié)方差。
  4. 迭代:重復(fù)步驟 2 和 3,直到收斂。

模型訓(xùn)練過程

  1. 選擇合適的 K 值(簇的數(shù)量)。
  2. 使用 EM 算法進(jìn)行訓(xùn)練,包括以下步驟:
  3. – E 步:計算每個數(shù)據(jù)點(diǎn)屬于每個簇的概率。

模型調(diào)優(yōu)經(jīng)驗(yàn)

  1. 選擇合適的 K 值:可以使用肘部法則或輪廓系數(shù)等方法確定最佳的 K 值。
  2. 初始化:嘗試不同的初始化方法,如 K-means 初始化。
  3. 選擇合適的算法:使用快速 GMM 或 Gaussian Processes 等算法。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  1. 可以處理非球形簇。
  2. 可以處理混合分布的數(shù)據(jù)。
  3. 易于解釋。

缺點(diǎn)

  1. 需要選擇 K 值。
  2. 對于小樣本數(shù)據(jù),性能可能較差。
  3. 需要計算協(xié)方差矩陣。

應(yīng)用場景

  1. 聚類分析。
  2. 數(shù)據(jù)降維。
  3. 異常檢測。

Python 示例代碼

from sklearn.mixture import GaussianMixture
import numpy as np

# 生成樣本數(shù)據(jù)
data = np.random.randn(100, 2)

# 創(chuàng)建GMM模型,設(shè)置簇的數(shù)量為2
gmm = GaussianMixture(n_components=2)

# 訓(xùn)練模型
gmm.fit(data)

# 預(yù)測簇標(biāo)簽
labels = gmm.predict(data)

請注意,在實(shí)際應(yīng)用中,您可能需要調(diào)整 GMM 模型的參數(shù),如權(quán)重、協(xié)方差矩陣等。

Fuzzy C-Means

背景介紹

Fuzzy C-Means (FCM) 是一種用于數(shù)據(jù)聚類的算法,由 Bezdek 在 1981 年提出。與傳統(tǒng)的硬聚類算法(如 K-means)不同,F(xiàn)CM 允許一個樣本可以同時屬于多個類別,即所謂的模糊聚類。這種模糊性使得 FCM 在處理邊界模糊的數(shù)據(jù)時更加有效。

一句話通俗概括原理

FCM 通過調(diào)整樣本到各個類別的隸屬度,尋找一個能夠使樣本之間的差異最小化、類別內(nèi)距離最小化的聚類中心。

算法原理及核心公式

FCM 的核心思想是通過優(yōu)化隸屬度矩陣和聚類中心,使得樣本之間的差異最小化。以下是核心公式:

  1. 隸屬度矩陣 (U \in R^{n \times c}),其中 (n) 是樣本數(shù)量,(c) 是聚類數(shù)。(U_{ij}) 表示第 (i) 個樣本屬于第 (j) 個聚類的隸屬度。
  2. 聚類中心 (V \in R^{c \times m}),其中 (m) 是特征維度。(V_{jk}) 表示第 (j) 個聚類在第 (k) 個特征上的值。
  3. 參數(shù) (m):稱為模糊指數(shù),控制聚類的緊密度。

核心公式如下:

模型訓(xùn)練過程

  1. 初始化隸屬度矩陣 (U) 和聚類中心 (V)。
  2. 使用上述公式更新 (U) 和 (V)。
  3. 重復(fù)步驟 2,直到滿足停止條件(如迭代次數(shù)或目標(biāo)函數(shù)變化小于閾值)。

模型調(diào)優(yōu)經(jīng)驗(yàn)

  1. 選擇合適的聚類數(shù) (c)。
  2. 選擇合適的模糊指數(shù) (m),通常在 1.5 到 2.5 之間。
  3. 迭代次數(shù)或目標(biāo)函數(shù)變化閾值。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

應(yīng)用場景

Python 示例代碼

import numpy as np
from sklearn.cluster import FuzzyCMeans

# 假設(shè)X是數(shù)據(jù)集,c是聚類數(shù),m是模糊指數(shù)
X = np.array([[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0]])
c = 2
m = 2.5

fcm = FuzzyCMeans(n_clusters=c, init='cmeans++', max_iter=100, m=m)
fcm.fit(X)

# 輸出聚類結(jié)果
labels = fcm.labels_
centers = fcm.cluster_centers_

以上是對 Fuzzy C-Means 算法的詳細(xì)介紹,希望對初學(xué)者有所幫助。

Mean-Shift Clustering

背景介紹

Mean-Shift Clustering 是一種基于密度度的聚類算法,主要用于數(shù)據(jù)挖掘和圖像分析領(lǐng)域。它通過迭代移動聚類中心到高密度區(qū)域,從而將相似的數(shù)據(jù)點(diǎn)聚在一起。

一句話通俗概括原理

Mean-Shift Clustering 算法就像一個移動的“平均器”,它會不斷移動到數(shù)據(jù)集中密度最高的地方,直到?jīng)]有更多的移動空間。

算法原理及核心公式

  1. 核心思想:將聚類中心移動到鄰域內(nèi)具有最高密度的位置。
  2. 核心公式:[ \text{new_center} = \frac{\sum{i \in \text{neighborhood}} \text{data}[i]}{\sum{i \in \text{neighborhood}} w(i)} ]其中,neighborhood 是聚類中心當(dāng)前鄰域,w(i) 是基于高斯核的權(quán)重函數(shù)。

模型訓(xùn)練過程

  1. 初始化聚類中心。
  2. 對每個聚類中心,計算其鄰域內(nèi)所有點(diǎn)的加權(quán)平均。
  3. 將聚類中心移動到新的位置。
  4. 重復(fù)步驟 2 和 3,直到聚類中心不再移動或達(dá)到預(yù)設(shè)的迭代次數(shù)。

模型調(diào)優(yōu)經(jīng)驗(yàn)

  1. 鄰域大小:鄰域大小對聚類結(jié)果影響很大。通常,鄰域大小需要根據(jù)數(shù)據(jù)集的特性進(jìn)行調(diào)整。
  2. 帶寬:帶寬決定了高斯核的形狀。較小的帶寬會導(dǎo)致更緊密的聚類,而較大的帶寬會導(dǎo)致更松散的聚類。
  3. 初始化聚類中心:聚類中心的初始化方法對聚類結(jié)果有較大影響。可以采用隨機(jī)初始化或基于某種分布的初始化。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  1. 對噪聲數(shù)據(jù)魯棒性強(qiáng)。
  2. 對數(shù)據(jù)分布沒有嚴(yán)格的假設(shè)。
  3. 可以處理高維數(shù)據(jù)。

缺點(diǎn)

  1. 計算量大,特別是對于大數(shù)據(jù)集。
  2. 鄰域大小和帶寬的選擇對聚類結(jié)果有較大影響。

應(yīng)用場景

  1. 圖像分割。
  2. 時間序列分析。
  3. 文本聚類。

Python 示例代碼

import numpy as np
from sklearn.cluster import MeanShift, estimate_bandwidth

# 生成一些示例數(shù)據(jù)
data = np.random.rand(100, 2)

# 估計帶寬
bandwidth = estimate_bandwidth(data, quantile=0.3, n_samples=data.shape[0])

# 創(chuàng)建MeanShift聚類器
ms = MeanShift(bandwidth=bandwidth, bin_seeding=True)

# 擬合數(shù)據(jù)
ms.fit(data)

# 獲取聚類標(biāo)簽
labels = ms.labels_

# 獲取聚類中心
centers = ms.cluster_centers_

以上代碼演示了如何使用sklearn庫中的MeanShift函數(shù)對數(shù)據(jù)進(jìn)行聚類。注意,這里使用了estimate_bandwidth函數(shù)來自動估計帶寬,你也可以手動設(shè)置帶寬。

Spectral Clustering

背景介紹

Spectral Clustering 是一種基于圖論和譜分解的聚類算法。它起源于圖像處理領(lǐng)域,后來被廣泛應(yīng)用于數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)等多個領(lǐng)域。該算法的基本思想是通過將數(shù)據(jù)點(diǎn)視為圖上的節(jié)點(diǎn),通過構(gòu)建相似度矩陣,然后將相似度矩陣進(jìn)行譜分解,最后根據(jù)分解得到的特征向量進(jìn)行聚類。

一句話通俗概括原理

Spectral Clustering 通過將數(shù)據(jù)映射到一個低維空間,然后在這個空間中根據(jù)數(shù)據(jù)的相似性進(jìn)行聚類。

算法原理及核心公式

  1. 相似度矩陣構(gòu)建:首先,根據(jù)數(shù)據(jù)點(diǎn)之間的相似度構(gòu)建一個相似度矩陣 ( W )。如果 ( W{ij} ) 表示第 ( i ) 個點(diǎn)和第 ( j ) 個點(diǎn)的相似度,則 ( W{ij} ) 的取值范圍通常在 0 到 1 之間。
  2. 歸一化:對相似度矩陣進(jìn)行歸一化處理,得到歸一化矩陣 ( D ),其中 ( D{ii} = 0 ),( D{ij} = \frac{1}{\sqrt{D{ii} + D{jj}}} )。
  3. 拉普拉斯矩陣構(gòu)建:構(gòu)建拉普拉斯矩陣 ( L = D – W )。
  4. 譜分解:對拉普拉斯矩陣進(jìn)行譜分解,得到特征值和特征向量。( L = UDU^T ),其中 ( D ) 是對角矩陣,( U ) 是特征向量矩陣。
  5. 聚類:根據(jù)特征向量進(jìn)行聚類。通常取前 ( k ) 個最大的特征值對應(yīng)的特征向量,然后將這些向量進(jìn)行降維,最后根據(jù)這些降維后的向量進(jìn)行 K-means 聚類。

模型訓(xùn)練過程

  1. 構(gòu)建相似度矩陣。
  2. 歸一化相似度矩陣。
  3. 構(gòu)建拉普拉斯矩陣。
  4. 進(jìn)行譜分解。
  5. 根據(jù)特征向量進(jìn)行聚類。

模型調(diào)優(yōu)經(jīng)驗(yàn)

  1. 相似度度量:選擇合適的相似度度量方法,如余弦相似度、高斯核等。
  2. 鄰域大小:根據(jù)數(shù)據(jù)的分布調(diào)整鄰域大小。
  3. 特征選擇:根據(jù)領(lǐng)域知識或?qū)嶒?yàn)結(jié)果選擇合適的特征向量數(shù)量。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

應(yīng)用場景

Python 示例代碼

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import SpectralClustering
from sklearn.preprocessing import StandardScaler

# 生成示例數(shù)據(jù)
np.random.seed(42)
X = np.random.rand(100, 2)
X[0:10, 0] += 1
X[20:30, 1] += 1
X[40:50, 0] -= 2
X[60:70, 1] -= 1

# 歸一化數(shù)據(jù)
X = StandardScaler().fit_transform(X)

# 譜聚類
sc = SpectralClustering(n_clusters=4, affinity='nearest_neighbors', random_state=42)
sc.fit(X)

# 繪制聚類結(jié)果
plt.scatter(X[:, 0], X[:, 1], c=sc.labels_)
plt.title('Spectral Clustering')
plt.show()

這段代碼使用sklearn庫中的SpectralClustering類進(jìn)行譜聚類,并使用StandardScaler對數(shù)據(jù)進(jìn)行歸一化處理。最后,使用matplotlib繪制聚類結(jié)果。

Agglomerative Clustering

背景介紹

聚類算法是數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)領(lǐng)域的重要方法之一,旨在將相似的數(shù)據(jù)點(diǎn)歸為一組。Agglomerative Clustering(層次聚類)是一種自底向上的聚類算法,通過合并相似度高的數(shù)據(jù)點(diǎn),逐步形成樹狀結(jié)構(gòu)(稱為聚類樹或 Dendrogram)。

一句話通俗概括原理

層次聚類就像將相似的小球逐漸合并成更大的球,最終形成一個大球團(tuán)。

算法原理及核心公式

原理:從每個數(shù)據(jù)點(diǎn)開始,逐步合并距離最近的數(shù)據(jù)點(diǎn),直到達(dá)到設(shè)定的聚類數(shù)。

核心公式

  1. 初始時,每個數(shù)據(jù)點(diǎn)都是一個單獨(dú)的簇。
  2. 計算所有簇之間的距離,選擇最近的兩個簇合并成一個簇。
  3. 重復(fù)步驟 2,直到達(dá)到設(shè)定的聚類數(shù)。

模型訓(xùn)練過程

  1. 初始化:每個數(shù)據(jù)點(diǎn)為一個簇。
  2. 計算距離:計算當(dāng)前簇之間的距離。
  3. 合并簇:選擇距離最近的兩個簇合并成一個簇。
  4. 重復(fù)步驟 2 和 3,直到達(dá)到設(shè)定的聚類數(shù)。

模型調(diào)優(yōu)經(jīng)驗(yàn)

  1. 聚類數(shù)的選擇:可以通過觀察 Dendrogram 來確定合適的聚類數(shù)。
  2. 距離度量:可以選擇不同的距離度量方法,如歐氏距離、曼哈頓距離等。
  3. 聚類方法:可以選擇不同的聚類方法,如單鏈接、完全鏈接、平均鏈接等。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  1. 不需要預(yù)先指定聚類數(shù)。
  2. 可以直觀地通過 Dendrogram 觀察聚類過程。

缺點(diǎn)

  1. 計算復(fù)雜度較高。
  2. 對噪聲數(shù)據(jù)敏感。

應(yīng)用場景

  1. 市場細(xì)分。
  2. 社交網(wǎng)絡(luò)分析。
  3. 文本聚類。

Python 示例代碼

import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt

# 生成示例數(shù)據(jù)
data = np.array([[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0]])

# 計算距離
Z = linkage(data, 'ward')

# 繪制Dendrogram
dendrogram(Z)
plt.show()

在這個示例中,我們首先生成了一個包含三個簇的數(shù)據(jù)集,然后使用 Ward 方法進(jìn)行層次聚類,并繪制了 Dendrogram。

MiniBatch K-Means

背景介紹

K-Means 聚類算法是一種經(jīng)典的聚類算法,它通過將數(shù)據(jù)集劃分成 K 個簇來發(fā)現(xiàn)數(shù)據(jù)中的隱含結(jié)構(gòu)。MiniBatch K-Means 是 K-Means 的一個變種,它在每次迭代時只使用一小部分?jǐn)?shù)據(jù)(稱為 mini-batch)來更新簇中心,從而提高算法的效率。

一句話通俗概括原理

MiniBatch K-Means 算法通過不斷迭代優(yōu)化簇中心,將數(shù)據(jù)劃分成 K 個簇,使得每個簇內(nèi)的數(shù)據(jù)點(diǎn)彼此相似,而簇與簇之間的數(shù)據(jù)點(diǎn)彼此不同。

算法原理及核心公式

  1. 初始化:隨機(jī)選擇 K 個數(shù)據(jù)點(diǎn)作為初始簇中心。
  2. 分配簇:將每個數(shù)據(jù)點(diǎn)分配到最近的簇中心。
  3. 更新簇中心:計算每個簇內(nèi)所有數(shù)據(jù)點(diǎn)的均值,作為新的簇中心。
  4. 重復(fù)步驟 2 和 3,直到簇中心不再顯著變化。

核心公式:

其中,c_new 是新的簇中心,x_i 是簇內(nèi)的數(shù)據(jù)點(diǎn),n 是簇內(nèi)數(shù)據(jù)點(diǎn)的數(shù)量。

模型訓(xùn)練過程

  1. 初始化簇中心。
  2. 將數(shù)據(jù)點(diǎn)分配到最近的簇中心。
  3. 更新簇中心。
  4. 重復(fù)步驟 2 和 3,直到收斂。

模型調(diào)優(yōu)經(jīng)驗(yàn)

  1. 選擇合適的 K 值:可以使用肘部法則或輪廓系數(shù)來確定最佳 K 值。
  2. 使用較大的 mini-batch 大小:可以提高算法的穩(wěn)定性,但過大的 mini-batch 大小可能導(dǎo)致過擬合。
  3. 調(diào)整學(xué)習(xí)率:適當(dāng)?shù)恼{(diào)整學(xué)習(xí)率可以提高算法的收斂速度。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

應(yīng)用場景

Python 示例代碼

import numpy as np

def kmeans(data, k):
# 初始化簇中心
centroids = data[np.random.choice(data.shape[0], k, replace=False)]

# 訓(xùn)練模型
for _ in range(100):
# 分配簇
clusters = []
for i in range(k):
cluster = []
for j in range(data.shape[0]):
if np.linalg.norm(data[j] - centroids[i]) < np.linalg.norm(data[j] - centroids[(i+1)%k]):
cluster.append(j)
clusters.append(cluster)

# 更新簇中心
new_centroids = []
for i in range(k):
new_centroids.append(np.mean(data[clusters[i]], axis=0))
centroids = np.array(new_centroids)

return centroids

# 示例數(shù)據(jù)
data = np.array([[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0]])

# 訓(xùn)練模型
k = 2
centroids = kmeans(data, k)

# 打印結(jié)果
print("簇中心:", centroids)

這個示例代碼使用了簡單的 K-Means 算法,將數(shù)據(jù)劃分為 2 個簇。在實(shí)際應(yīng)用中,您可能需要根據(jù)具體問題調(diào)整算法參數(shù)和實(shí)現(xiàn)細(xì)節(jié)。

DBSCAN variants

背景介紹

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一種基于密度的聚類算法,它通過分析數(shù)據(jù)點(diǎn)之間的密度關(guān)系來進(jìn)行聚類。DBSCAN 變種是在 DBSCAN 基礎(chǔ)上進(jìn)行改進(jìn)的算法,以解決其在處理高維數(shù)據(jù)和噪聲數(shù)據(jù)時的局限性。

一句話通俗概括原理

DBSCAN 通過尋找密度較高的區(qū)域來識別聚類,將低密度區(qū)域視為噪聲。

算法原理及核心公式

原理

  1. 核心點(diǎn):如果一個點(diǎn)周圍存在足夠多的點(diǎn)(至少為 MinPts),則該點(diǎn)為核心點(diǎn)。
  2. 鄰域:以核心點(diǎn)為中心,以 ε 為半徑的球體內(nèi)包含的點(diǎn)集合為鄰域。
  3. 聚類:連接核心點(diǎn)形成聚類。

核心公式

模型訓(xùn)練過程

  1. 初始化:設(shè)置 MinPts 和 ε。
  2. 遍歷數(shù)據(jù)點(diǎn)
  3. – 如果是核心點(diǎn),則創(chuàng)建新的聚類。
  1. 處理噪聲點(diǎn):將沒有歸入任何聚類的點(diǎn)視為噪聲。

模型調(diào)優(yōu)經(jīng)驗(yàn)

  1. MinPts:根據(jù)數(shù)據(jù)集的特點(diǎn)進(jìn)行調(diào)整,通常從較小的數(shù)值開始,逐漸增加。
  2. ε:根據(jù)數(shù)據(jù)集的維度和分布進(jìn)行調(diào)整,可以使用肘部法則進(jìn)行選擇。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

缺點(diǎn)

應(yīng)用場景

Python 示例代碼

from sklearn.cluster import DBSCAN
import numpy as np

# 創(chuàng)建示例數(shù)據(jù)
data = np.array([[1, 2], [2, 2], [2, 3], [8, 7], [8, 8], [25, 80]])

# 創(chuàng)建DBSCAN對象
dbscan = DBSCAN(eps=0.3, min_samples=2)

# 模型訓(xùn)練
dbscan.fit(data)

# 輸出聚類結(jié)果
print("Cluster labels:", dbscan.labels_)

文章轉(zhuǎn)自微信公眾號@算法進(jìn)階

上一篇:

時間序列圖神經(jīng)網(wǎng)絡(luò)最新綜述(GNN4TS)

下一篇:

深度解析Transformer、RNN和Mamba的聯(lián)系!
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實(shí)測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費(fèi)

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費(fèi)