均值偏移算法
它是另一种在无监督学习中使用的流行和强大的聚类算法。 它不做任何假设,因此它是非参数算法。 它也被称为分层聚类或均值聚类分析。 以下将是该算法的基本步骤 -
首先,需要从分配给它们自己的集群的数据点开始。
现在,它计算质心并更新新质心的位置。
通过重复这个过程,向簇的顶点靠近,即朝向更高密度的区域移动。
该算法停止在质心不再移动的阶段。
在下面的代码的帮助下,在Python中实现了Mean Shift聚类算法。使用Scikit-learn模块。
导入必要的软件包 -
import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
以下代码将通过使用sklearn.dataset包中的make_blob来生成包含四个blob的二维数据集。
from sklearn.datasets.samples_generator import make_blobs
可以用下面的代码可视化数据集 -
centers = [[2,2],[4,5],[3,10]]
X, _ = make_blobs(n_samples = 500, centers = centers, cluster_std = 1)
plt.scatter(X[:,0],X[:,1])
plt.show()
执行上面示例代码,得到以下结果 -
现在,我们需要用输入数据来训练Mean Shift聚类模型。
ms = MeanShift()
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
以下代码将按照输入数据打印聚类中心和预期的聚类数量 -
print(cluster_centers)
n_clusters_ = len(np.unique(labels))
print("Estimated clusters:", n_clusters_)
[[ 3.23005036 3.84771893]
[ 3.02057451 9.88928991]]
Estimated clusters: 2
下面给出的代码将有助于根据数据绘制和可视化机器的发现,并根据要找到的聚类数量进行装配。
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
plt.plot(X[0], X[1], colors[labels], markersize = 10)
plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
marker = "x",color = 'k', s = 150, linewidths = 5, zorder = 10)
plt.show()
执行上面示例代码,得到以下结果 -
//更多请阅读:https://www.yiibai.com/ai_with_python/ai_with_python_unsupervised_learning_clustering.html
|