tensorflow学习笔记(十三):K近邻(KNN)手写体数字(MNIST)识别

这篇博客介绍了K最近邻(KNN)分类算法,包括算法简介、核心函数`tf.reduce_sum()`和`tf.arg_min()`的解释,以及利用TensorFlow进行MNIST手写数字识别的实战示例。
摘要由CSDN通过智能技术生成


一、KNN简介

K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。其思想是:如果一个样本在特征空间中的k个最邻近的样本中的大多数属于某一个类别,则该样本也划分为这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

如下图:我们要确定绿点属于哪个颜色(红色或者蓝色),要做的就是选出距离目标点距离最近的k个点,看这k个点的大多数颜色是什么颜色。当k取3的时候,我们可以看出距离最近的三个,分别是红色、红色、蓝色,因此得到目标点为红色。

在这里插入图片描述

k值的选择、距离度量及分类决策规则是k近邻法的三个基本要素。这三个要素对KNN的算法至关重要。

更多理论知识请参考:K近邻(KNN)算法总结

二、主要函数

1、tf.reduce_sum()

此函数是计算一个张量的各个维度上元素的总和.,定义如下:

tf.reduce_sum ( 
    input_tensor , 
    axis = None , 
    keep_dims = False , 
    name = None , 
    reduction_indices = None
 )

参数

  • input_tensor:要减少的张量.应该有数字类型.
  • axis:要减小的尺寸.如果为None(默认),则缩小所有尺寸.必须在范围[-rank(input_tensor), rank(input_tensor))内.
  • keep_dims:如果为true,则保留长度为1的缩小尺寸.
  • name:操作的名称(可选).
  • reduction_indices:axis的废弃的名称.

返回值:该函数返回减少的张量.

函数中的input_tensor是按照axis中已经给定的维度来减少的;除非 keep_dims 是true,否则张量的秩将在axis的每个条目中减少1;如果keep_dims为true,则减小的维度将保留为长度1.。

如果axis没有条目,则缩小所有维度,并返回具有单个元素的张量。

程序示例:

x = tf.constant([[1, 1, 1], [1, 1, 1]])
tf.reduce_sum(x)                     # 6
tf.reduce_sum(x, 0)                  # [2, 2, 2]
tf.reduce_sum(x, 1)                  # [3, 3]
tf.reduce_sum(x, 1, keep_dims=True)  # [[3], [3]]
tf.reduce_sum(x, [0, 1])             # 6

2、tf.arg_min()

用于返回张量维度上具有最小值的索引,定义如下:

tf.arg_min (
     input ,
     dimension ,
     name = None
 )

参数

  • input:张量。必须是下列类型之一:float32,float64,int64,int32,uint8,uint16,int16,int8,complex64,complex128,qint8,quint8,qint32,half。
  • dimension:张量。必须是以下类型之一:int32,int64。当类型为 int32 时,应满足
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值