基本思想
Meanshift是一个简单的概念,但不太好解释,用类比的方法解释或许比较容易理解。想象有一个雾气弥漫的足球场(即一个二维的特征空间),上面站着100个人(即我们的观察值)。因为雾很大,人只能看到很近的地方。每分钟每个人向四周看一看,然后朝着可以看到最多人的方向移动一步。随着时间流逝,因为人们一次次地朝着越来越大的人群移动,球场上的人开始聚集成一个小组,最终这些人就在球场上形成了聚类(cluster)。每个人的分类被指定为他们最终所在的分类。Meanshift算法步骤如下:
- 首先以随机选取的点为圆心、r为半径做一个圆形的滑窗,目标是找出数据点中密度最高处,然后作为中心
- 在每次迭代后滑动窗口的中心将向着较高密度的方向移动
- 连续移动,直到任何方向的移动都不增加滑窗中点的数量,此时滑窗收敛
- 在多个滑窗上进行上述步骤以覆盖所有的点,当多个滑窗收敛重叠时,其经过的点会通过其滑窗聚类为一个类
API学习
class sklearn.cluster.MeanShift(
*,
bandwidth=None,
seeds=None,
bin_seeding=False,
min_bin_freq=1,
cluster_all=True,
n_jobs=None,
max_iter=300
)
参数 | 类型 | 功能 |
---|---|---|
bandwidth | float, default=None | 带宽,可以理解为设定的质心圆的半径 |
seeds | array-like of shape(n_samples, n_features),default = None | 用于初始化核的种子,形状是(n_samples, n_features),如果未设置,则通过簇来计算 |
bin_seeding | bool, default=False | 设定初始核的位置参数的生产方式 |
min_bin_freq | int, default=1 | 为了加快算法,只接受滑窗内至少有min_bin_freq个点的滑窗作为种子 |
cluster_all | bool, default=True | 为True时表示即使孤立不在核内的点,也要进行聚类,它们会被分配到临近的核中;否则它们的簇标签会被赋值为1 |
n_jobs | int, default=None | 指定计算所用的进程数 |
max_iter | int, default | 执行一次算法所进行的最大迭代数 |
属性 | 类型 | 功能 |
---|---|---|
cluster_centers_ | ndarray of shape(n_clusters, n_features) | 聚类中心的坐标 |
labels_ | ndarray of shape(n_samples,) | 分类结果 |
n_iter_ | int | 运行的迭代次数 |
n_features_in_ | int | 拟合期间的特征个数 |
feature_names_in_ | ndarray of shape(n_features_in_,) | 拟合期间的特征名称 |
方法 | 说明 |
---|---|
fit(X[, y]) | Perform clustering. |
fit_predict(X[, y]) | Perform clustering on X and returns cluster labels. |
get_params([deep]) | Get parameters for this estimator. |
predict(X) | Predict the closest cluster each sample in X belongs to. |
set_params(**params) | Set the parameters of this estimator. |
代码示例
>>> from sklearn.cluster import MeanShift
>>> import numpy as np
>>> X = np.array([[1, 1], [2, 1], [1, 0],
... [4, 7], [3, 5], [3, 6]])
>>> clustering = MeanShift(bandwidth=2).fit(X)
>>> clustering.labels_
array([1, 1, 1, 0, 0, 0])
>>> clustering.predict([[0, 0], [5, 5]])
array([1, 0])
>>> clustering
MeanShift(bandwidth=2)
参考文献
[1] Dorin Comaniciu and Peter Meer, “Mean Shift: A robust approach toward feature space analysis”. IEEE Transactions on Pattern Analysis and Machine Intelligence. 2002. pp. 603-619.