Tensorflow-K-Means聚类算法
更新时间:2024-07-12 08:03:01 阅读量: 综合文库 文档下载
Tensorflow___K-Means聚类算法
importnumpyas np
fromnumpy.linalgimportcholesky importmatplotlib.pyplotasplt import seaborn assns import pandas aspd importtensorflowastf
from random import choice, shuffle fromnumpyimport array
############SachinJoglekar的基于tensorflow写的一个kmeans模板############### defKMeansCluster(vectors, noofclusters): \
K-Means Clustering using TensorFlow.
`vertors`应该是一个n*k的二维的NumPy的数组,其中n代表着K维向量的数目 'noofclusters' 代表了待分的集群的数目,是一个整型值 \
noofclusters = int(noofclusters) assertnoofclusters dim = len(vectors[0]) #辅助随机地从可得的向量中选取中心点 vector_indices = list(range(len(vectors))) shuffle(vector_indices) #计算图 #我们创建了一个默认的计算流的图用于整个算法中,这样就保证了当函数被多次调用 #时,默认的图并不会被从上一次调用时留下的未使用的OPS或者Variables挤满 graph = tf.Graph() withgraph.as_default(): #计算的会话 sess = tf.Session() ##构建基本的计算的元素 ##首先我们需要保证每个中心点都会存在一个Variable矩阵 ##从现有的点集合中抽取出一部分作为默认的中心点 centroids = [tf.Variable((vectors[vector_indices[i]])) foriin range(noofclusters)] ##创建一个placeholder用于存放各个中心点可能的分类的情况 centroid_value = tf.placeholder(\, [dim]) cent_assigns = [] for centroid in centroids: cent_assigns.append(tf.assign(centroid, centroid_value)) ##对于每个独立向量的分属的类别设置为默认值0 assignments = [tf.Variable(0) foriin range(len(vectors))] ##这些节点在后续的操作中会被分配到合适的值 assignment_value = tf.placeholder(\) 1 Tensorflow___K-Means聚类算法 cluster_assigns = [] for assignment in assignments: cluster_assigns.append(tf.assign(assignment, assignment_value)) ##下面创建用于计算平均值的操作节点 #输入的placeholder mean_input = tf.placeholder(\, [None, dim]) #节点/OP接受输入,并且计算0维度的平均值,譬如输入的向量列表 mean_op = tf.reduce_mean(mean_input, 0) ##用于计算欧几里得距离的节点 v1 = tf.placeholder(\, [dim]) v2 = tf.placeholder(\, [dim]) euclid_dist = tf.sqrt(tf.reduce_sum(tf.pow(tf.sub( v1, v2), 2))) ##这个OP会决定应该将向量归属到哪个节点 ##基于向量到中心点的欧几里得距离 #Placeholder for input centroid_distances = tf.placeholder(\, [noofclusters]) cluster_assignment = tf.argmin(centroid_distances, 0) ##初始化所有的状态值 ##这会帮助初始化图中定义的所有Variables。Variable-initializer应该定 ##义在所有的Variables被构造之后,这样所有的Variables才会被纳入初始化 init_op = tf.global_variables_initializer() #初始化所有的变量 sess.run(init_op) ##集群遍历 #接下来在K-Means聚类迭代中使用最大期望算法。为了简单起见,只让它执行固 #定的次数,而不设置一个终止条件 noofiterations = 20 foriteration_nin range(noofiterations): ##期望步骤 ##基于上次迭代后算出的中心点的未知 ##the _expected_ centroid assignments. #首先遍历所有的向量 forvector_nin range(len(vectors)): vect = vectors[vector_n] #计算给定向量与分配的中心节点之间的欧几里得距离 distances = [sess.run(euclid_dist, feed_dict={ v1: vect, v2: sess.run(centroid)}) for centroid in centroids] #下面可以使用集群分配操作,将上述的距离当做输入 assignment = sess.run(cluster_assignment, feed_dict = { centroid_distances: distances}) 2 Tensorflow___K-Means聚类算法 #接下来为每个向量分配合适的值 sess.run(cluster_assigns[vector_n], feed_dict={ assignment_value: assignment}) ##最大化的步骤 #基于上述的期望步骤,计算每个新的中心点的距离从而使集群内的平方和最小 forcluster_nin range(noofclusters): #收集所有分配给该集群的向量 assigned_vects = [vectors[i] foriin range(len(vectors)) ifsess.run(assignments[i]) == cluster_n] #计算新的集群中心点 new_location = sess.run(mean_op, feed_dict={ mean_input: array(assigned_vects)}) #为每个向量分配合适的中心点 sess.run(cent_assigns[cluster_n], feed_dict={ centroid_value: new_location}) #返回中心节点和分组 centroids = sess.run(centroids) assignments = sess.run(assignments) return centroids, assignments ############生成测试数据############### sampleNo = 10;#数据数量 mu =3 # 二维正态分布 mu = np.array([[1, 5]]) Sigma = np.array([[1, 0.5], [1.5, 3]]) R = cholesky(Sigma) srcdata= np.dot(np.random.randn(sampleNo, 2), R) + mu plt.plot(srcdata[:,0],srcdata[:,1],'bo') ############kmeans算法计算############### k=4 center,result=KMeansCluster(srcdata,k) print center ############利用seaborn画图############### res={\:[],\:[],\:[]} foriinxrange(len(result)): res[\].append(srcdata[i][0]) res[\].append(srcdata[i][1]) res[\].append(result[i]) pd_res=pd.DataFrame(res) sns.lmplot(\,\,data=pd_res,fit_reg=False,size=5,hue=\) plt.show() 3
正在阅读:
Train The Trainer Program09-04
支架的机械加工工艺规程编制和专用设计05-29
2020年温州大学硕士研究生招生简章11-21
政治生活复习提纲及答案04-30
电缆选配10-06
苗木农贸市场建设可行性研究报告07-09
最美的家乡作文500字07-04
三角形全等的判定教学反思02-21
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 算法
- Tensorflow
- Means
- 人生的可喜之处在于生命不可重来(一辩稿)
- 内控风险评估报告
- 长沙市中(小)学教师统一备课用纸 1
- 2018学年人教版小学四年级语文上册复习教学设计教案
- 《慢性阻塞性肺疾病诊疗规范(2011年版)》
- 990运输石门作业规程
- 幼儿园课程游戏化项目的基本要求
- 在政协委员培训班上的讲话
- 音乐美学基础复习资料
- 社区类APP竞品分析V1.1
- 北师大版二年级下册语文教案示例
- 云南玉溪沃尔沃汽车4S店项目可行性研究报告
- 2018最新新上任护士长述职报告-新护士长述职述廉报告-范文word版
- 三通管的注塑模具设计
- 基于Matlab的AM调制系统仿真
- 白酒餐饮促销方案
- 海德教育一级建造师工程经济模拟题三十一
- 辩论:社会秩序主要靠道德来维持
- 2015年山东省省属事业单位招考笔试试题
- 比较文学复习资料