美文网首页
Tensorflow基本模型之K-means

Tensorflow基本模型之K-means

作者: AI异构 | 来源:发表于2019-02-25 13:47 被阅读0次

K-Means算法简介

K-MEANS算法是输入聚类个数k,以及包含 n个数据对象的数据库,输出满足方差最小标准k个聚类的一种算法。属于一种经典的无监督学习算法。
示意图如下所示:

K-Means算法示意图
k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。

基本步骤:

(1) 从 n个数据对象任意选择 k 个对象作为初始聚类中心;

(2) 根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;

(3) 重新计算每个(有变化)聚类的均值(中心对象);

(4) 计算标准测度函数,当满足一定条件,如函数收敛时,则算法终止;如果条件不满足则回到步骤(2)。

TensorFlow的K-Means实现

from __future__ import print_function

import numpy as np
import tensorflow as tf
from tensorflow.contrib.factorization import KMeans#导入KMeans函数

# Ignore all GPUs, tf random forest does not benefit from it.
import os
os.environ["CUDA_VISIBLE_DEVICES"] = ""

导入数据集

# Import MNIST data
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("./data/", one_hot=True)
full_data_x = mnist.train.images

Extracting ./data/train-images-idx3-ubyte.gz
Extracting ./data/train-labels-idx1-ubyte.gz
Extracting ./data/t10k-images-idx3-ubyte.gz
Extracting ./data/t10k-labels-idx1-ubyte.gz

设置参数

# Parameters
num_steps = 50 # Total steps to train
batch_size = 1024 # The number of samples per batch
k = 25 # The number of clusters
num_classes = 10 # The 10 digits
num_features = 784 # Each image is 28x28 pixels

# Input images
X = tf.placeholder(tf.float32, shape=[None, num_features])
# Labels (for assigning a label to a centroid and testing)
Y = tf.placeholder(tf.float32, shape=[None, num_classes])

# K-Means Parameters
# 距离度量的方式采用余弦距离(余弦相似度)
kmeans = KMeans(inputs=X, num_clusters=k, distance_metric='cosine',
                use_mini_batch=True)

构建K-means图模型

# Build KMeans graph
(all_scores, cluster_idx, scores, cluster_centers_initialized,init_op,train_op) = kmeans.training_graph()
cluster_idx = cluster_idx[0] # fix for cluster_idx being a tuple
avg_distance = tf.reduce_mean(scores)

# Initialize the variables (i.e. assign their default value)
init_vars = tf.global_variables_initializer()

训练模型

# Start TensorFlow session
sess = tf.Session()

# Run the initializer
sess.run(init_vars, feed_dict={X: full_data_x})
sess.run(init_op, feed_dict={X: full_data_x})

# Training
for i in range(1, num_steps + 1):
    _, d, idx = sess.run([train_op, avg_distance, cluster_idx],
                         feed_dict={X: full_data_x})
    if i % 10 == 0 or i == 1:
        print("Step %i, Avg Distance: %f" % (i, d))

Step 1, Avg Distance: 0.341471
Step 10, Avg Distance: 0.221609
Step 20, Avg Distance: 0.220328
Step 30, Avg Distance: 0.219776
Step 40, Avg Distance: 0.219419
Step 50, Avg Distance: 0.219154

测试

# Assign a label to each centroid
# Count total number of labels per centroid, using the label of each training
# sample to their closest centroid (given by 'idx')
counts = np.zeros(shape=(k, num_classes))
for i in range(len(idx)):
    counts[idx[i]] += mnist.train.labels[i]
# Assign the most frequent label to the centroid
labels_map = [np.argmax(c) for c in counts]
labels_map = tf.convert_to_tensor(labels_map)

# Evaluation ops
# Lookup: centroid_id -> label
cluster_label = tf.nn.embedding_lookup(labels_map, cluster_idx)
# Compute accuracy
correct_prediction = tf.equal(cluster_label, tf.cast(tf.argmax(Y, 1), tf.int32))
accuracy_op = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

# Test Model
test_x, test_y = mnist.test.images, mnist.test.labels
print("Test Accuracy:", sess.run(accuracy_op, feed_dict={X: test_x, Y: test_y}))

Test Accuracy: 0.7127

参考

百度百科——K-MEANS算法

TensorFlow-Examples

相关文章

  • Tensorflow基本模型之K-means

    K-Means算法简介 K-MEANS算法是输入聚类个数k,以及包含 n个数据对象的数据库,输出满足方差最小标准k...

  • Tensorflow入门

    基本概念 一、计算模型——计算图 1.1基本概念 计算图是Tensorflow最基本的概念,Tensorflow中...

  • TensorFlow入门(笔记)

    本篇介绍TensorFlow基本概念。前三节分别介绍TensorFlow的计算模型、数据模型和运行模型。最后一节,...

  • 学习笔记(1)

    TensorFlow计算模型:计算图计算图是TensorFlow中最基本的一个概念。TensorFlow中所有的计...

  • Tensorflow基本模型之线性回归

    线性回归简述 在这里,我们仅仅讨论单变量的线型回归模型。不对回归算法进行过多的展开。重点放在Tensorflow的...

  • Tensorflow基本模型之随机森林

    随机森林简介 随机森林是一种集成学习方法。训练时每个树分类器从样本集里面随机有放回的抽取一部分进行训练。预测时将要...

  • 深度学习之TensorFlow入门

    今天主要研究tensorflow的基本模型.它的模型分为计算模型\数据模型\运行模型.首先,我们看一下他的计算模型...

  • tensorflow搭建简单回归模型

    前言 这是使用tensorflow 搭建一个简单的回归模型,用于熟悉tensorflow的基本操作和使用方法。 模...

  • 关于Python调用Tensorflow模型

    1.了解模型基本的加载和保存方式: tensorflow 模型封装使用 2.简洁的模型加载教程,实例清楚,可以运行...

  • TF各类资源

    模型部署 TF Serving部署TensorFlow模型how-to-deploy-tensorflow-mod...

网友评论

      本文标题:Tensorflow基本模型之K-means

      本文链接:https://www.haomeiwen.com/subject/lvzwyqtx.html