用Tensorflow实现简单的KNN
来源:互联网 发布:安智市场软件 编辑:程序博客网 时间:2024/06/05 07:45
一、KNN算法的概念
邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。
简单来说,K-NN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据
里的每个点求距离,然后挑离这个训练数据最近的K个点看看这几个点属于什么类型,然后用少数服从多数的原则,
给新数据归类。
二、K近邻分类模型的三要素:
a:距离度量 b:K值的选择 c:分类决策的规则
距离度量:
1.欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。公式如下:
2.曼哈顿距离(Manhattan Distance),公式如下:
K值选择:下面有一幅图片来理解K的取值
如果K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
如果K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。
K越大,模型越简单,近似误差也越大。反之,K越小,模型越复杂,越容易发生过拟合。
分类决策规则:
1.多数表决规则
2.距离加权规则
三、计算步骤
1.算距离
2.找临近
3.做分类
四、用python实现分类
import numpy as np
import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("MNIST_data/", one_hot=True)X_train, Y_train = mnist.train.next_batch(5000)X_test, Y_test = mnist.test.next_batch(200)x_train = tf.placeholder(tf.float32, [None, 784])x_test = tf.placeholder(tf.float32, [784])distance = tf.reduce_sum(tf.abs(tf.add(x_train, tf.negative(x_test))), axis=1)pred = tf.argmin(distance, 0)accuracy = 0init = tf.initialize_all_variables()with tf.Session() as sess: sess.run(init) m = len(x_test) for i in range(m): index = sess.run([pred, distance], feed_dict={x_train: X_train, x_test: X_test[i:]}) pred_label = np.argmax(Y_train[index]) true_label = np.argmax(Y_train[i]) if pred_label == true_label: accuracy += 1 print("test", i, "predict label:", pred_label, "true label:", true_label) print("done") print("accuracy:", accuracy / m)
阅读全文
1 0
- 用Tensorflow实现简单的KNN
- KNN的简单实现
- TensorFlow实现KNN
- tensorflow实现knn算法
- Tensorflow--实现KNN
- tensorflow实现KNN识别MNIST
- 简单的KNN的python实现
- KNN的简单实现(python)
- KNN的matlab简单实现代码
- Knn实现简单的物品推荐
- 利用sklearn实现简单的KNN
- python之KNN算法的简单实现
- python KNN算法的简单实现
- numpy KNN简单实现
- KNN简单实现
- KNN简单实现
- 简单的Tensorflow实现NN
- Tensorflow CNN 的简单实现
- DjangoURL name详解
- Linux下安装网卡驱动程序详解
- Hadoop大数据处理技术综合实验
- 纯html跨域访问java接口
- IDEA建空的项目(已有的项目架构)
- 用Tensorflow实现简单的KNN
- 输入三个数按从大到小排列
- 关于vue-cli + webpack打包给后台,部署上线
- 二叉树(Binary tree)--算法学习之路(一)
- 整理的优秀博客链接
- UE4 动画重定向之不同的骨骼共用同一套动画
- centos6.5网卡绑定,shell脚本
- vue项目中对axios的封装
- 移动端+微信小程序实现,手机端滑动分页代码思路