KNN是模式识别中的经典算法,本次实验就MNIST数据集来做KNN算法的实验,并结合前一次的LDA降维对数据进行进一步处理。

实验报告图片版

pdf版本可以戳这:模式识别实验报告:KNN K近邻算法

关键代码

KNN原理报告里有写,不作重复赘述。
本实验使用的编程环境是Jupyter,完整的程序代码可以戳这下载。
【模式识别】实验二:KNN,python程序代码与实验过程
这里仅贴上核心代码

MNIST数据集的导入

在本专栏之前一篇博文专门分析过,这里只上代码:

mnist = fetch_openml("mnist_784")
X, y = mnist['data'], mnist['target'] # X:data,y:label

特征标准化

特征标准化的好处:1、提高精度。2、提高计算速度

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_splitscaler = StandardScaler()
X_standardized = scaler.fit_transform(X1)

数据筛选

shuffle_index = np.random.permutation(60000)  # 随机排列一个序列,返回一个排列的序列。
X1, y1 = X[shuffle_index[:10000]], y[shuffle_index[:10000]]

对KNN来说,数据筛选是很有必要的。MNIST总共7w条数据,全部都跑会跑到天荒地老~
因此本实验随机筛选了10000条数据。

KNN实现方式一:调用sklearn的KNeighborsClassifier

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import learning_curve
from sklearn import metricsdef knn(k):# 测试用,记录算法的时间# begin_t = t.time()#创建一个有5个邻居的KNN分类器对象knn = KNeighborsClassifier(n_neighbors=k, n_jobs=-1)#训练模型model = knn.fit(X_train, y_train)#预测数据predictions = model.predict(X_test)#测试准确率accuracy = metrics.accuracy_score(y_test, predictions)
#     print ("k=",k)
#     print ('accuracy:%.2f%%'%(100*accuracy))return 100*accuracy# print("Total time: {:.2f}s".format(t.time()-begin_t))

KNN实现方式二:手动实现

def knn(k):accuracy = 0m = X_train.shape[0] # m 标记预测值数量8000 ; n 标记测试集数量 2000n = X_test.shape[0]for i in range(n):count = np.zeros(10)prediction = 0distance = np.zeros((m,2))for t in range(m):distance[t,0] = y_train[t]              # 储存标签和欧式距离distance[t,1] = np.sqrt(sum(np.power(X_train[t] - X_test[i], 2)))  # 求欧式距离order = distance[np.lexsort(distance.T)]    # 按第二列(距离)排序for j in range(k):a = order[j,0]a = a.astype(int)count[a] += 1   prediction = count.argmax()                           # 取出现次数最多的为预测值if prediction == y_test[i]:accuracy += 1Accuracy = accuracy/nreturn 100*Accuracy  # 化成百分数形式

简要描述下算法思路:
1、逐次遍历测试集,对每个样本计算其和训练集的欧式距离。
2、将每个训练样本到该样本欧式距离排序,选取前K个训练样本。
3、统计这K个样本的标签,测试样本的标签即为这K个样本的最多的标签。

LDA降维

# 使用Fisher进行降维
# 注:LDA最大降维数<分类数-1
# minsit为10分类,因此维度数可以取1-8
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
def mylda(X, y, demension):lda = LDA(n_components=demension)lda.fit(X, y)result_x = lda.transform(X)return result_x

总结

KNN需要计算每一个样本到训练样本的距离,因此训练样本越多,程序运行越慢;
优势在于程序无需经过训练,可以直接将样本进行判别分类。

【模式识别】实验二:K近邻算法(KNN)相关推荐

  1. 基于KD树的K近邻算法(KNN)算法

    文章目录 KNN 简介 KNN 三要素 距离度量 k值的选择 分类决策规则 KNN 实现 1,构造kd树 2,搜索最近邻 3,预测 用kd树完成最近邻搜索 K近邻算法(KNN)算法,是一种基本的分类与 ...

  2. k近邻算法(KNN)-分类算法

    k近邻算法(KNN)-分类算法 1 概念 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. k-近邻算法采用测量不同特征值之间的 ...

  3. 01 K近邻算法 KNN

    01 K近邻算法 KNN k近邻算法基础 等价于 scikit-learn中的机器学习算法封装 训练数据集,测试数据集 分类准确度 超参数 考虑距离权重 更多关于距离的定义 搜索明可夫斯基距离相应的p ...

  4. k近邻算法 (KNN)

    k近邻算法 k近邻算法(KNN,K-NearestNeighbor)是一种基本分类和回归方法,监督学习算法,本质上是基于一种数据统计的方法: 核心思想:给定一个训练数据集,对新的输入实例,在训练数据集 ...

  5. 一文搞懂K近邻算法(KNN),附带多个实现案例

    简介:本文作者为 CSDN 博客作者董安勇,江苏泰州人,现就读于昆明理工大学电子与通信工程专业硕士,目前主要学习机器学习,深度学习以及大数据,主要使用python.Java编程语言.平时喜欢看书,打篮 ...

  6. K近邻算法(KNN)原理小结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目录 1. KNN算法原理 2. KNN算法三要素 3. KNN算 ...

  7. 机器学习-分类之K近邻算法(KNN)原理及实战

    k近邻算法(KNN) 简介 KNN算法是数据挖掘分类技术中最简单的方法之一.它通过测量不同特征值之间的距离进行分类的.其基本思路为:如果一个样本在特征空间中的k个最近邻样本中的大多数属于某一个类别,则 ...

  8. 基于kd树的k近邻算法——KNN

    1.简介 k近邻算法是机器学习中一种基本的分类与回归算法,对你没听错k近邻算法不仅可以用来做分类,还可以用于回归,英文全称为k-Nearest Neighbor简称k-NN.k近邻算法属于一种有监督学 ...

  9. K近邻算法KNN的简述

    什么是KNN K近邻算法又称KNN,全称是K-Nearest Neighbors算法,它是数据挖掘和机器学习中常用的学习算法,也是机器学习中最简单的分类算法之一.KNN的使用范围很广泛,在样本量足够大 ...

最新文章

  1. zimbra邮件系统详细配置教程
  2. Vue nextTick 机制
  3. Java生鲜电商平台-电商支付流程架构实战
  4. activiti web流程设计器 整合视频 教程 SSM和独立部署的方式
  5. 七大因素阻碍非标自动化行业发展,那么应对的策略是什么呢?
  6. Python语言编程规范与优化建议
  7. Leetcode每日一题:141.linked-list-cycle(环形链表)
  8. python实现拼多多自动回复_拼多多客服多开工具怎么配置多店铺客服?
  9. KMP算法—终于全部弄懂了
  10. Qt实现串口调试工具
  11. “女人~,你在玩火”一个有磁性的声音说道——常用自动化测试工具
  12. 【WZOI】2019愚人节比赛题目分析
  13. 揪出键盘上的“老鼠”
  14. 软件测试 之Web项目实战
  15. python输入生日输出星座_python输入日期输出星座?
  16. 电视盒子和机顶盒有什么区别?哪个更值得买?
  17. ROS SMACH个人学习记录
  18. css3总结之: text-align: justify (两端对齐)
  19. 32导联 博睿康_赛题详情(Competition Details)-运动想象无训练数据集
  20. NodeJs实战-待办列表(5)-使用MySQL存储待办事项

热门文章

  1. 强大的ANTLR4(1)
  2. 17 CSR/SSR双模式渲染支持以及其他细节梳理
  3. HSM硬件加密机国密标准解读
  4. (附源码)springboot服装购物网站 毕业设计 010234
  5. Java 实现 FFT,拿来吧你!
  6. 一文入门64位x86汇编
  7. lvs+keepalived+nginx主备模式
  8. 桥梁风工程与人工智能(综述)
  9. java radiogroup_android RadioGroup实现单选以及默认选中 | 学步园
  10. JAVA图灵 自动回复_图灵机器人实现微信自动回复