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()
三个资料Q群下载不了也转发不了,先放这里Fine_tuning.zipLangChain.zipdata_clear.rar