一,鸢尾花Iris数据集解析参考博文:https://blog.csdn.net/u010916338/article/details/86487890
二,Python使用meanshift聚类,并绘制聚类散点图。
from sklearn.cluster import MeanShift
from sklearn import datasets
import matplotlib.pyplot as plt
#加载数据集,是一个字典类似Java中的map
lris_df = datasets.load_iris()
#挑选出前两个维度作为x轴和y轴,你也可以选择其他维度
x_axis = lris_df.data[:,0]
y_axis = lris_df.data[:,2]
#构建模型
model = MeanShift()
#训练模型
model.fit(lris_df.data)
#预测全部150条数据
predicted = model.fit_predict(lris_df.data)
#打印出来对150条数据的聚类散点图
plt.scatter(x_axis,y_axis,c=predicted)
meanshift聚类的效果和kmeans聚成两类的效果相当
三,meanshift算法流程
(1)确定滑动窗口半径r,以随机选取的中心点C半径为r的圆形滑动窗口开始滑动。均值漂移类似一种爬山算法,在每一次迭代中向密度更高的区域移动,直到收敛。
(2)每一次滑动到新的区域,计算滑动窗口内的均值来作为中心点,滑动窗口内的点的数量为窗口内的密度。在每一次移动中,窗口向密度更高的区域移动。
(3)移动窗口,计算窗口内的中心点以及窗口内的密度,知道没有方向在窗口内可以容纳更多的点,即一直移动到圆内密度不再增加为止。
(4)步骤一到三会产生很多个滑动窗口,当多个滑动窗口重叠时,保留包含最多点的窗口,然后根据数据点所在的滑动窗口进行聚类。
单个滑动窗口演示:
多个滑动窗口(其中起始点的个数可以为所有样本或者随机抽样,初始值覆盖面广可以解决kmeans局部最优问题)
四,meanshift的优缺点
优点:
(1)不同于K-Means算法,均值漂移聚类算法不需要我们知道有多少类/组。
(2)基于密度的算法相比于K-Means受均值影响较小。
缺点:
窗口大小/半径「r」的选择很重要。