Zzyh12

2020-08-05   阅读量: 782

数据分析师

机器学习之聚类K-means

扫码加入数据分析学习群

K-均值(K-Means):K均值法是麦奎因(MacQueen,1967)提出的,这种算法的基本思想是将每一个样本分配给最近中心(均值)的类中 .

计算步骤:

先从没有标签的元素集合A中随机取k个元素作为k个子集各自的中心

分别计算剩下的元素到k个子集中心的距离,根据将这些元素分别划归到最

近的子集 ✓ 根据聚类结果,重新计算中心(子集中所有元素各个维度的算数平均数)

将集合A中全部元素按照新的中心然后再重新聚类

重复以上步骤,直到聚类的结果不再发生变化

#计算两个向量的距离,用的是欧几里得距离

def euclDistance(vector1, vector2):

return np.sqrt(sum((vector1-vector2)**2))#

举例:

#随机生成初始的质心

def initCentroids(data, k):

numSamples, dim = data.shape# 80,2

# k个质心,列数跟样本的列数一样

centroids = np.zeros((k, dim))

# 随机选出k个质心

for i in range(k):

# 随机选取一个样本的索引

index = np.random.randint(0, numSamples)

# 作为初始化的质心

centroids[i,:] = data[index,:]

return centroids


#可视化函数

def showCluster(dataSet, k, centroids, clusterAssment):

numSamples, dim = dataSet.shape #80,2

mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '<r', 'pr']

for i in range(numSamples): #画样本点

markIndex = int(clusterAssment[i, 0]) #簇头

plt.plot(dataSet[i, 0], dataSet[i, 1], mark[markIndex])

mark = ['Dr', 'Db', 'Dg', 'Dk', '^b', '+b', 'sb', 'db', '<b', 'pb']

for i in range(k): #画质心

plt.plot(centroids[i, 0], centroids[i, 1], mark[i], markersize = 12)

plt.show()


22.5341 3 4 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子