【模式识别】实验二:K近邻算法(KNN)
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)相关推荐
- 基于KD树的K近邻算法(KNN)算法
文章目录 KNN 简介 KNN 三要素 距离度量 k值的选择 分类决策规则 KNN 实现 1,构造kd树 2,搜索最近邻 3,预测 用kd树完成最近邻搜索 K近邻算法(KNN)算法,是一种基本的分类与 ...
- k近邻算法(KNN)-分类算法
k近邻算法(KNN)-分类算法 1 概念 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. k-近邻算法采用测量不同特征值之间的 ...
- 01 K近邻算法 KNN
01 K近邻算法 KNN k近邻算法基础 等价于 scikit-learn中的机器学习算法封装 训练数据集,测试数据集 分类准确度 超参数 考虑距离权重 更多关于距离的定义 搜索明可夫斯基距离相应的p ...
- k近邻算法 (KNN)
k近邻算法 k近邻算法(KNN,K-NearestNeighbor)是一种基本分类和回归方法,监督学习算法,本质上是基于一种数据统计的方法: 核心思想:给定一个训练数据集,对新的输入实例,在训练数据集 ...
- 一文搞懂K近邻算法(KNN),附带多个实现案例
简介:本文作者为 CSDN 博客作者董安勇,江苏泰州人,现就读于昆明理工大学电子与通信工程专业硕士,目前主要学习机器学习,深度学习以及大数据,主要使用python.Java编程语言.平时喜欢看书,打篮 ...
- K近邻算法(KNN)原理小结
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目录 1. KNN算法原理 2. KNN算法三要素 3. KNN算 ...
- 机器学习-分类之K近邻算法(KNN)原理及实战
k近邻算法(KNN) 简介 KNN算法是数据挖掘分类技术中最简单的方法之一.它通过测量不同特征值之间的距离进行分类的.其基本思路为:如果一个样本在特征空间中的k个最近邻样本中的大多数属于某一个类别,则 ...
- 基于kd树的k近邻算法——KNN
1.简介 k近邻算法是机器学习中一种基本的分类与回归算法,对你没听错k近邻算法不仅可以用来做分类,还可以用于回归,英文全称为k-Nearest Neighbor简称k-NN.k近邻算法属于一种有监督学 ...
- K近邻算法KNN的简述
什么是KNN K近邻算法又称KNN,全称是K-Nearest Neighbors算法,它是数据挖掘和机器学习中常用的学习算法,也是机器学习中最简单的分类算法之一.KNN的使用范围很广泛,在样本量足够大 ...
最新文章
- zimbra邮件系统详细配置教程
- Vue nextTick 机制
- Java生鲜电商平台-电商支付流程架构实战
- activiti web流程设计器 整合视频 教程 SSM和独立部署的方式
- 七大因素阻碍非标自动化行业发展,那么应对的策略是什么呢?
- Python语言编程规范与优化建议
- Leetcode每日一题:141.linked-list-cycle(环形链表)
- python实现拼多多自动回复_拼多多客服多开工具怎么配置多店铺客服?
- KMP算法—终于全部弄懂了
- Qt实现串口调试工具
- “女人~,你在玩火”一个有磁性的声音说道——常用自动化测试工具
- 【WZOI】2019愚人节比赛题目分析
- 揪出键盘上的“老鼠”
- 软件测试 之Web项目实战
- python输入生日输出星座_python输入日期输出星座?
- 电视盒子和机顶盒有什么区别?哪个更值得买?
- ROS SMACH个人学习记录
- css3总结之: text-align: justify (两端对齐)
- 32导联 博睿康_赛题详情(Competition Details)-运动想象无训练数据集
- NodeJs实战-待办列表(5)-使用MySQL存储待办事项