首页 > 编程语言 >深度学习与图像分类day3(KNN算法)

深度学习与图像分类day3(KNN算法)

时间:2024-07-27 12:30:06浏览次数:16  
标签:KNN group labels day3 距离 test 算法 np

KNN——最近邻算法(即选择最近的占比最高的类别作为预测类别)

KNN算法的计算逻辑

1)给定测试对象,计算它与训练集中每个对象的距离。

2)圈定距离最近的k个训练对象,作为测试对象的邻居。

3)根据这k个近邻对象所属的类别,找到占比最高的那个类别作为测试对象的预测类别。

在 KNN算法中,有两个方面的因素会影响KNN算法的准确度:一个是计算测试对象与训练集中各个对象的距离,另一个因素就是k的选择。

距离度量:曼哈顿距离和欧式距离。

(1)曼哈顿距离 假设先只考虑两个点,第一个点的坐标为(x1,y1),第二个点的坐标为(x2,y2),那么,它们之间的曼哈顿距离就是|x1-x2|+|y1-y2|

(2)欧式距离 以空间为基准的两点之间的最短距离。第一个点的坐标为(x1,y1),第二个点的坐标为(x2,y2),那么它们之间的欧式距离就是√(x1-x2)2  +(y1-y2)2

import numpy as np
import matplotlib.pyplot as pl
##给出训练数据以及对应的类别 
def createDataSet(): 
      group = np.array([[1.0,2.0],[1.2,0.11,[0.1,1.4),[0.3,3.5],[1.1,1.0],[0.5,1.5]]) 
      labels = np,array(['A','A','B','B','A','B']) 
return group,labels 
if_ name___=='__main___': 
group,labels = createDataSet() plt,scatter(group!labels=='A',0],group[labels=='A',1),color='',marker='*')
#对于类别为A的数据集我们使用红色六角形表示 
plt,scatter(group[labels=='B',0],group[labels=='B',1],color = 'g', markere'+') scatter方法是用来绘制散点图 # 对于类别为B的数据集我们使用绿色十字形表示 plt,show ( )
def kN_classify(k,dis,x_train,x_train,Y_test):
assert dis =='E'or dis =≡ 'M', 'dis must E or  kM,E代表欧式距离,M代表曼哈顿距离。
num_test = Y_test.shape[0]    #测试样本的数量    
labellist=[]
"'
使用欧式距离公式作为距离度量
"'
if (dis =='E'):k
for i in range(num_test):
#实现欧式距离公式
distances = np.sqrt(np.sum(((x_train - np.tile(Y_test[i],(X_train.
shape[0],1))) ** 2),axis=1))
nearest_k = np.argsort(distances))#距离由小到大进行排序,并返回index 值
topK = nearest_k[:k]    #选取前k个距离    
classCount ={}
for i in topk:    # 统计每个类别的个数    
classCount [x_train[i]] =classCount.get (x_train[i],0) +1 
sortedclassCount = sorted(classCount .items() ,key=operator.
itemgetter(1),reverse=True)
labellist.append(sortedclassCount[0][0]) 
return np.array(labellist)
#使用曼哈顿公式作为距离度量

 

测试下KNN算法的效果

if ___name__=='__main__':
group, labels = createDataset()
y_test_pred = kNN_classify(1,'E',group, labels, np.array([[1.0,2.1],[0.4,2.0]]))
print(y_test_pred)    #打印输出['A' 'B']需要注意的是,在输入测试集的时候,需要将其转换为Numpy的矩阵,否则系统会提示传人的参数是list类型,没有shape的方法。


 图像分类
图像分类问题就是将已有的固定的分类标签集合中最合适的标签分配给输入的图像。

标签:KNN,group,labels,day3,距离,test,算法,np
From: https://www.cnblogs.com/candice1/p/18326805

相关文章

  • 从图解看算法:如何在生活中发现它们的踪迹【文末送书】
    文章目录一、算法的基本概念二、算法在日常生活中的应用三、常见算法图解四、算法的未来发展人人都离不开的算法——图解算法应用【文末送书】在现代社会中,算法无处不在。无论是你用来搜索信息的引擎,还是你用来推荐电影的应用,算法都在背后发挥着重要作用。虽然算法听......
  • 「代码随想录算法训练营」第二十二天 | 回溯算法 part4
    491.非递减子序列题目链接:https://leetcode.cn/problems/non-decreasing-subsequences/题目难度:中等文章讲解:https://programmercarl.com/0491.递增子序列.html视频讲解:https://www.bilibili.com/video/BV1EG4y1h78v/题目状态:有思路,借助ChatGPT通过思路:在之前代码的基......
  • 双目相机立体匹配算法概述
    这里写目录标题双目相机立体匹配算法概述1.算法分类2.传统算法2.1局部算法2.2全局算法2.3半全局算法3.深度学习算法3.1基于CNN的方法3.2基于GAN的方法3.3基于transformer的方法4.总结5.参考文献双目相机立体匹配算法概述双目立体匹配是计算机视觉中的一个重......
  • 【独家首发】Matlab实现凌日优化算法TSOA优化Transformer-BiLSTM实现负荷数据回归预测
    %假设您有负荷数据load_data和相应的回归标签regression_labels%1.数据预处理%在这一步中,您需要对负荷数据进行适当的预处理,例如归一化、序列化等操作%2.划分数据集为训练集和测试集%这里假设您将数据划分为train_data,train_labels,test_data,test_label......
  • 【独家首发】Matlab实现粒子群优化算法PSO优化Transformer-BiLSTM实现负荷数据回归预
    %假设您有负荷数据load_data和相应的回归标签regression_labels%1.数据预处理%在这一步中,您需要对负荷数据进行适当的预处理,例如归一化、序列化等操作%2.划分数据集为训练集和测试集%这里假设您将数据划分为train_data,train_labels,test_data,test_label......
  • 直播系统,利用关联规则实现推荐算法
    直播系统,利用关联规则实现推荐算法关联规则是以规则的方式呈现直播系统之间的相关性:关联规则(AssociationRules)是反映一个事物与其他事物之间的相互依存性和关联性,是数据挖掘的一个重要技术,用于从大量数据中挖掘出有价值的数据项之间的相关关系。关联规则的经典例子是通......
  • 基于kalman滤波的UAV三维轨迹跟踪算法matlab仿真
    1.程序功能描述      使用卡尔曼滤波对UAV在三维空间场景中的运动轨迹进行预测和估计,最后输出预测轨迹,估计轨迹以及三维空间轨迹估计结果。 2.测试软件版本以及运行结果展示MATLAB2022a版本运行  3.核心程序  fork=1:length(X_direct)-1%第一个......
  • 【LeetCode】141.环形链表、142. 环形链表 II(算法 + 图解)
    Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎~~......
  • 轻量级图像识别算法笔记(一)
    轻量级图像识别算法一、什么是轻量级图像识别算法?为什么要用轻量级图像识别算法?什么是轻量级图像识别算法?​轻量级识别算法是指那些设计和优化以在资源受限环境中高效运行的机器学习和深度学习算法。为什么要使用轻量级图像识别算法?设备限制:很多实际应用场景中,嵌入式......
  • 算法笔记|Day8字符串II
    算法笔记|Day8字符串II☆☆☆☆☆leetcode151.翻转字符串里的单词题目分析代码☆☆☆☆kamacoder55.右旋字符串(待补充)题目分析代码☆☆☆☆☆leetcode28.实现strStr()题目分析代码☆☆☆☆☆leetcode459.重复的子字符串题目分析代码☆☆☆☆☆leetcode151......