文件名称:基于西瓜书的聚类代码和介绍
文件大小:183KB
文件格式:ZIP
更新时间:2021-12-10 03:29:59
python聚类
def GMM_algorithm(iterMax,gmm,dataset):
'''
高斯混合聚类算法
:param iterMax: 最大迭代次数
:param gmm: 保存gmm模型的数据
:return: 簇划分结果
'''
step = 0
m = len(dataset)
flagMat = np.mat(np.zeros((m, 1))) # 保存每个样本的簇标记
lateProbMat = np.mat(np.zeros((m,3))) #保存后验概率
while step < iterMax: #迭代更新模型参数
for j in range(m): #计算后验概率
vectX = dataset[j]
prob1 = 0.0
for i in range(3):
prob1 += (gmm.aplhaList[i] * densityFunc(gmm.meanList[i], gmm.matList[i], vectX))
for i in range(3):
prob2 = gmm.aplhaList[i] * densityFunc(gmm.meanList[i], gmm.matList[i], vectX)
lateProbMat[j,i] = float(prob2/prob1)
for i in range(3): #更新高斯混合模型参数
mean = calMean(dataset,lateProbMat,i) #更新均值向量
gmm.meanList[i] = mean
X = np.array(dataSet) # 列表类型转换成array数组类型
numSamples = len(dataSet)
bandwidth = estimate_bandwidth(X, quantile=0.2, n_samples=500)#estimate_bandwidth函数用作于mean-shift算法估计带宽
clf = MeanShift(bandwidth=bandwidth, bin_seeding=True, cluster_all=True).fit(X)
centroids = clf.labels_
print( centroids, type(centroids)) # 显示每一个点的聚类归属
# 计算其自动生成的k,并将聚类数量小于3的排除
arr_flag = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
for i in clf.labels_:
arr_flag[i] += 1
k = 0
for i in arr_flag:
if (i > 3):
k += 1
print( k)
mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '
【文件预览】:
新建文件夹
----层次聚类.txt(1KB)
----密度聚类2代码.txt(1KB)
----密度.pdf(182KB)
----密度聚类.txt(2KB)
----高斯聚类.txt(5KB)