聚类算法的最终目的是: result = MAX{集合内的相似度}/{集合间的相似度}
需要帮忙写任何算法、课程设计、论文算法实现、都可以找我企鹅:1028434547
1、K均值聚类算法,也叫KMeans聚类算法。
该算法的基本思想是和我们人进行物品分类的思想是相同的,就是通过距离来进行衡量。那么我们首先就需要知道我们要分成几个类,然后就找到几个类的相应的中心点,然后就把其他点按照离这几个中心点的距离作为划分类簇的依据。
算法具体实现:必须知道需要划分成几个类簇,假定划分为K个类簇,那么首先随机选取K个中心点,(其实该算法的核心就是通过不停的迭代查找到合适的中心点,然后只剩下类簇的划分),然后遍历数据,按照到这K个中心点到其他数据点的距离进行每个点的类簇划分。随后在每个类簇中计算各个特征量的均值作为新的类聚中心,如果计算后的新中心和上次的中心相同,说明迭代稳定,找到了比较优秀的类簇划分,结束程序,否则重复上面的步骤。
伪代码:
cluster_core = random(K);
while(TRUE)
{
//在类簇的划分的时候可以采用欧式或者曼哈顿距离计算
clusterResult = getCluster(cluster_core,data);
for(I = 0;i < k;i++)
计算每个类簇的新中心点,通过均值计算
if(新的中心点 = 上一次的中心点)
break;
}
python代码:
def KMeans(dataSet, k, distMeas=distEclud):
m = shape(dataSet)[0] #数据集的行
print("data rows is %d" % m)
#用于聚类的数据,将数据取成矩阵形式,m*2形式矩阵
clusterAssment = mat(zeros((m, 2)))
#选前K个数据作为聚类中心
centroids = initCent(dataSet, k)
clusterChanged = True
#用于记录迭代的次数
iter_count = 0
#遍历直到中心变化
while clusterChanged:
clusterChanged = False
for i in range(m): #遍历数据集中的每一行数据
minDist = inf
minIndex = -1
for j in range(k): #寻找最近质心
iter_count += 1
distJI = distMeas(centroids[j, :], dataSet[i, :])
if distJI < minDist: #更新最小距离和质心下标
minDist = distJI
minIndex = j
if clusterAssment[i, 0] != minIndex:
clusterChanged = True
clusterAssment[i, :] = minIndex, minDist**2 #记录最小距离质心下标,最小距离的平方
for cent in ra