【ML】Mean-Shift 原理 + 实践(基于sklearn)

16 篇文章 0 订阅
12 篇文章 0 订阅

【ML】Mean-Shift 原理 + 实践(基于sklearn)

原理

  1. 取数据集中的一个点为X,以此点为中心画一个半径为R的圆,圆内共有点数量假设为K。
  2. 以此点为起点,其他圆内点为终点计算出所有向量并相加除以K得到meanshift向量M(x)。
  3. 令X=X+M(x),然后从第一步继续开始,然后迭代此过程直到中心点(质心)不变。
  4. 再取剩下的其他点,进行此过程,直到所有点都计算完成。
  5. 每个点计算质心时,迭代一定次数,当质心变化小于某个阈值时停止迭代,并搜索当前质心附近质心进行归类(小于一定阈值内的质心)。

演示:
在这里插入图片描述

实践

生成数据

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

centers = [[1, 1], [-1, -1], [1, -1]]
X, _ = make_blobs(n_samples=10000, centers=centers, cluster_std=0.6)

训练

bandwidth = estimate_bandwidth(X, quantile=0.2, n_samples=500)

ms = MeanShift(bandwidth=bandwidth, bin_seeding=True)
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_

labels_unique = np.unique(labels)
n_clusters_ = len(labels_unique)

print(labels_unique)
print("number of estimated clusters : %d" % n_clusters_)

预测+评估

y_predict = ms.predict(X)
from matplotlib import pyplot as plt
plt.figure()
plt.scatter(X[:,0],X[:,1],c=y_predict)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值