iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0

Mean Shift 聚類演算法

**Mean Shift(均值偏移)**是一種非參數化的聚類演算法,與 K-Means 不同的是,Mean Shift 不需要預先指定聚類的數量。Mean Shift 的核心思想是通過迭代地將每個數據點向其周圍密度最大的區域移動,從而找到數據點的密度峰值(即模式)。

主要概念:

  1. 核密度估計(KDE): Mean Shift 使用核密度估計來估算數據點的密度。常見的選擇是高斯核(Gaussian Kernel),但也可以根據應用場景選擇其他核函數。

  2. 帶寬(Bandwidth): 帶寬參數決定了每次移動時考慮的區域半徑。帶寬的選擇非常關鍵,會影響聚類的顆粒度。如果帶寬太大,可能會識別出較少的聚類;而如果帶寬太小,可能會產生過多的小聚類。

  3. 移動過程:

    • 對於每個數據點,考慮其周圍的區域(由帶寬定義)。
    • 計算該區域內所有點的均值。
    • 將原始數據點向這個均值方向移動(因此稱為“均值偏移”)。
    • 重複這一過程,直到收斂,即每個點不再顯著移動為止。
  4. 收斂與聚類: 在收斂之後,相近的點會被認為屬於同一個聚類。那些收斂到相同模式(密度峰值)的點會被分配到同一個聚類。

from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

iris = load_iris()
X = iris.data
df = pd.DataFrame(X, columns=iris.feature_names)

from sklearn.cluster import MeanShift


mean_shift = MeanShift()
mean_shift.fit(X)

labels = mean_shift.labels_
df['Cluster'] = labels


plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.title('鳶尾花數據集的 Mean Shift 聚類')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
plt.show()

上一篇
DAY17 DBSCAN 17/30
下一篇
DAY19 OPTICS 19/30
系列文
機器學習與深度學習背後框架與過程論文與實作28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言