使用mean shift

from sklearn.cluster import MeanShift, estimate_bandwidth
from sklearn.datasets.samples_generator import make_blobs

#生成100个样本,默认是二维的
#cluster_std是离散程度

X, _ = make_blobs(n_samples=100, cluster_std=0.6)

#默认是使用所有的样本

bandwidth = estimate_bandwidth(X, quantile=0.2)
ms = MeanShift(bandwidth=bandwidth, bin_seeding=True)
ms.fit(X)
print(X)
print(ms.labels_)
#自己设定,使用多维数组

from sklearn.cluster import MeanShift, estimate_bandwidth
from sklearn.datasets.samples_generator import make_blobs

#生成100个样本,默认是二维的
#cluster_std是离散程度
#使用4维数组

X, _ = make_blobs(n_samples=100,  cluster_std=0.6,n_features=4)

#默认是使用所有的样本

bandwidth = estimate_bandwidth(X, quantile=0.2)
ms = MeanShift(bandwidth=bandwidth, bin_seeding=True)
ms.fit(X)
print(X)
print(ms.labels_)

以上程序考虑到在终端下逐行输入指令的问题,考虑到在终端下注释不干扰程序的问题。
以上程序可以直接复制到print之前,粘贴运行,然后print看效果。


meansshift有一些问题,当数据维度高了,容易分的类别全为0,
我用make_blobs生成的数组测试,50维时报错,20维时全为0
又测试了一遍:50维,被分为了3类

>>> print(ms.labels_)
[2 1 2 0 1 1 0 0 2 1 1 2 1 1 1 1 1 0 1 0 1 0 2 1 0 2 1 1 0 2 2 1 2 1 2 2 0
 2 0 1 1 1 0 2 2 0 0 2 1 2 2 0 1 0 1 2 0 0 1 2 1 2 0 0 2 0 0 1 0 0 1 1 0 1
 2 0 2 2 2 1 0 2 2 0 2 2 0 1 0 1 2 0 2 0 0 2 0 1 0 2]

你可能感兴趣的:(使用mean shift)