目录

1.基本原理

2. 算法原理

2.1 算法优缺点

3.总结

4.K近邻实现和探究

思想:

4.1收集数据集

4.2统一数据集大小

4.3导入数据集

4.4分割数据集

4.5K邻近算法

4.6 测试

五.实验结果及总结


1.基本原理

k最近邻(k-Nearest Ne ighbor)算法是比较简单的机器学习算法。它采用测量不同特征值之间的距离方法进行分类。它的思想很简单:如果一个样本在特征空间中的多个最近邻(最相似〉的样本中的大多数都属于某一个类别,则该样本也属于这个类别。第一个字母k可以小写,表示外部定义的近邻数量。

简而言之,就是让机器自己按照每一个点的距离,距离近的为一类。

2. 算法原理

knn算法的核心思想是未标记样本的类别,由距离其最近的k个邻居投票来决定。
        具体的,假设我们有一个已标记好的数据集。此时有一个未标记的数据样本,我们的任务是预测出这个数据样本所属的类别。knn的原理是,计算待标记样本和数据集中每个样本的距离,取距离最近的k个样本。待标记的样本所属类别就由这k个距离最近的样本投票产生。
假设X_test为待标记的样本,X_train为已标记的数据集,算法原理的伪代码如下:

遍历X_train中的所有样本,计算每个样本与X_test的距离,并把距离保存在Distance数组中。
对Distance数组进行排序,取距离最近的k个点,记为X_knn。
在X_knn中统计每个类别的个数,即class0在X_knn中有几个样本,class1在X_knn中有几个样本等。
待标记样本的类别,就是在X_knn中样本个数最多的那个类别。

2.1 算法优缺点

优点:准确性高,对异常值和噪声有较高的容忍度。
缺点:计算量较大,对内存的需求也较大。

3.总结

其算法参数是k,参数选择需要根据数据来决定。

k值越大,模型的偏差越大,对噪声数据越不敏感,当k值很大时,可能造成欠拟合;
k值越小,模型的方差就会越大,当k值太小,就会造成过拟合。

4.K近邻实现和探究

思想:

将数据集导入后,把图片展平成一维向量,然后再根据不同图片的向量计算距离,测试时循环变化K值,嵌套循环测试集,定义一个count计数预测正确的个数,最后算出预测角度。

4.1收集数据集

羽毛球数据集图片:

篮球数据集图片:

4.2统一数据集大小

import os
import re
import sys# 统一图片格式fileList = os.listdir(r"D:\desttop\羽毛球")
# 输出此文件夹中包含的文件名称
print("修改前:" + str(fileList)[1])
# 得到进程当前工作目录
currentpath = os.getcwd()
# 将当前工作目录修改为待修改文件夹的位置
os.chdir(r"D:\desttop\羽毛球")
# 名称变量
num = 1
# 遍历文件夹中所有文件
for fileName in fileList:# 匹配文件名正则表达式pat = ".+\.(jpg|jpeg|JPG)"# 进行匹配pattern = re.findall(pat, fileName)# 文件重新命名os.rename(fileName, "badmianton_" + str(num) + ".jpg")# fileName.resize(256, 256)# 改变编号,继续下一项num = num + 1
print("***************************************")
# 改回程序运行前的工作目录
os.chdir(currentpath)

4.3导入数据集

import numpy as np
import cv2
from sklearn.model_selection import train_test_split
import operator
import os#导入数据集
def loding_data():X=[]Y=[]for filename in os.listdir(r"D:/desttop/bascketball"):  #数据集文件夹的绝对地址         filenames = 'D:/desttop/bascketball/'+filenameimg = cv2.imread(filenames,1)#进行归一化处理img = (img - np.min(img)) / (np.max(img) - np.min(img))X.append(img.flatten())Y.append('basketball')    for filename in os.listdir(r"D:/desttop/badmainton"):             filenames = 'D:/desttop/badmainton/'+filenameimg = cv2.imread(filenames,1)#归一化img = (img - np.min(img)) / (np.max(img) - np.min(img))X.append(img.flatten())Y.append('badmainton')data = np.array(X)labels = np.array(Y)# print(labels)return X, Y

4.4分割数据集

X,Y=loding_data()
# 分离训练数据集和评估数据集
# 设置评估集占比
test_size=1/3
# 设置随机种子,保证训练集和评估集的不变性
seed=4
# 训练特征,评估特征,训练标签,评估标签
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=test_size,random_state=seed)
#因为下面用到列,转换成数组
X_train = np.array(X_train)
X_test = np.array(X_test)
Y_train = np.array(Y_train)
Y_test = np.array(Y_test)

4.5K邻近算法

#K邻近算法
def classify0(inX,dataSet,labels,k):dataSetsize = dataSet.shape[0]diffMat = np.tile(inX,(dataSetsize,1))-dataSetsqiDiffMat = diffMat**2sqiDistances = sqiDiffMat.sum(axis=1)distances = sqiDistances**0.5sortedDistIndicies = distances.argsort()classCount = {}for i in range(k):voteIlabel = labels[sortedDistIndicies[i]]classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1sortedClassCount = sorted(classCount.items(),key = operator.itemgetter(1),reverse=True)return sortedClassCount[0][0]

4.6 测试

for k in range(len(X_train)):count = 0for i in range(len(X_test)):a=classify0(X_test[i],X_train,Y_train,k+1)if a == Y_test[i]:count += 1ac = count / len(Y_test)print(f'K的值{k+1},预测精度{ac}')

五.实验结果及总结

1.K小的时候,预测精度很高,说明两个类别差距大。

2.K大的时候,预测精度慢慢减小,是因为数据集选择不好,图片背景影响了判断。

K近邻算法的基本原理和代码相关推荐

  1. 机器学习第七章之K近邻算法

    K近邻算法(了解) 7.1 K近邻算法 7.1.1 K近邻算法的原理介绍 7.1.2 K近邻算法的计算步骤及代码实现 7.2 数据预处理之数据归一化 7.2.1 min-max标准化 7.2.2 Z- ...

  2. 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...

  3. 送你一份使用k近邻算法实现回归的实用指南(附代码、链接)

    作者:AISHWARYA SINGH, AUGUST 22, 2018 翻译:赵雪尧 校对:张玲 本文约4200字,建议阅读10分钟. 本文解释了在k近邻算法工作原理的基础上,简单介绍三种计算点距离方 ...

  4. K近邻算法学习(KNN)

    K近邻算法--KNN 机器学习--K近邻算法(KNN) 基本知识点 基本原理 示例 关于KNN的基本问题 距离如何计算? k如何定义大小? k为为什么不定义一个偶数? KNN的优缺点 代码实现 第一次 ...

  5. 机器学习:K近邻算法

    一.K-近邻算法简介 1 什么是K-近邻算法 根据你的"邻居"来推断出你的类别 1.1 K-近邻算法(KNN)概念 K Nearest Neighbor算法又叫KNN算法,这个算法 ...

  6. 机器学习算法——系统性的学会使用 K近邻算法(KNN)

    目录 1.K-近邻算法简介 1.1 什么是K-近邻算法 1.2 K-近邻算法(KNN)概念 (1)定义: (2)距离公式: 1.3 电影类型分析 1.4 KNN算法流程总结 2.k近邻算法api初步使 ...

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

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

  8. K近邻算法:以同类相吸解决分类问题!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:游璐颖,福州大学,Datawhale成员 前言 KNN(k-nea ...

  9. k近邻算法api初步使用

    k近邻算法api初步使用 机器学习流程复习: 1.获取数据集 2.数据基本处理 3.特征工程 4.机器学习 5.模型评估 1 Scikit-learn工具介绍 Python语言的机器学习工具 Scik ...

最新文章

  1. Spring MVC 中 HandlerInterceptorAdapter的使用--转载
  2. 安装一个插件、回馈给你一款属于猿的绚丽浏览器
  3. CSS3那些不为人知的高级属性
  4. 网页动态加载图片 通过JS和jquery实现。
  5. HttpServlet
  6. 进军SharePoint,资料先行....
  7. linux mysql远程连接
  8. 干货:react新手入门之react小书
  9. 【SCM】基于报童模型的MAPE与Profit仿真
  10. linux系统下安装搜狗输入法,搜狗拼音输入法 For Linux安装方法全程图解
  11. PDF解密怎么弄?分享这3个解密软件
  12. 教师资格证综合素质作文素材
  13. Win7蓝屏代码 0x0000007B
  14. S5P4418裸机开发(五):时钟
  15. 怎样启动模拟器模拟鸿蒙系统,鸿蒙OS 模拟器运行
  16. [体感游戏]关于体感游戏的一些思考(六)--- 飞行
  17. 自动化测试到底怎么做(单元测试自动化,接口自动化,UI自动化)
  18. C++转换函数 (conversion function)
  19. 百度站长工具之 流量与关键词
  20. 一个JAVA渣渣的校招成长记,附BAT美团网易等20家面经总结

热门文章

  1. Java的向上转型和向下转型利弊
  2. appium安装步骤
  3. Asp.Net Core 入门(四)—— Model、View、Controller
  4. 优化器(Optimizer)(SGD、Momentum、AdaGrad、RMSProp、Adam)
  5. 阿里云maven私有仓库,让你拥有自己的私有仓库
  6. 5、(五)外汇学习基础篇之银行间外汇掉期交易
  7. 2015062510 - 每一条河流都有它的去处
  8. 经历一周的远程办公,你还期待天天在家上班吗?
  9. 深入理解无服务器架构(Faas/Serverless)
  10. 面试时,发现公司有这8个现象,建议你慎重考虑!