K近邻算法的基本原理和代码
目录
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近邻算法的基本原理和代码相关推荐
- 机器学习第七章之K近邻算法
K近邻算法(了解) 7.1 K近邻算法 7.1.1 K近邻算法的原理介绍 7.1.2 K近邻算法的计算步骤及代码实现 7.2 数据预处理之数据归一化 7.2.1 min-max标准化 7.2.2 Z- ...
- 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集
各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...
- 送你一份使用k近邻算法实现回归的实用指南(附代码、链接)
作者:AISHWARYA SINGH, AUGUST 22, 2018 翻译:赵雪尧 校对:张玲 本文约4200字,建议阅读10分钟. 本文解释了在k近邻算法工作原理的基础上,简单介绍三种计算点距离方 ...
- K近邻算法学习(KNN)
K近邻算法--KNN 机器学习--K近邻算法(KNN) 基本知识点 基本原理 示例 关于KNN的基本问题 距离如何计算? k如何定义大小? k为为什么不定义一个偶数? KNN的优缺点 代码实现 第一次 ...
- 机器学习:K近邻算法
一.K-近邻算法简介 1 什么是K-近邻算法 根据你的"邻居"来推断出你的类别 1.1 K-近邻算法(KNN)概念 K Nearest Neighbor算法又叫KNN算法,这个算法 ...
- 机器学习算法——系统性的学会使用 K近邻算法(KNN)
目录 1.K-近邻算法简介 1.1 什么是K-近邻算法 1.2 K-近邻算法(KNN)概念 (1)定义: (2)距离公式: 1.3 电影类型分析 1.4 KNN算法流程总结 2.k近邻算法api初步使 ...
- 一文搞懂K近邻算法(KNN),附带多个实现案例
简介:本文作者为 CSDN 博客作者董安勇,江苏泰州人,现就读于昆明理工大学电子与通信工程专业硕士,目前主要学习机器学习,深度学习以及大数据,主要使用python.Java编程语言.平时喜欢看书,打篮 ...
- K近邻算法:以同类相吸解决分类问题!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:游璐颖,福州大学,Datawhale成员 前言 KNN(k-nea ...
- k近邻算法api初步使用
k近邻算法api初步使用 机器学习流程复习: 1.获取数据集 2.数据基本处理 3.特征工程 4.机器学习 5.模型评估 1 Scikit-learn工具介绍 Python语言的机器学习工具 Scik ...
最新文章
- Spring MVC 中 HandlerInterceptorAdapter的使用--转载
- 安装一个插件、回馈给你一款属于猿的绚丽浏览器
- CSS3那些不为人知的高级属性
- 网页动态加载图片 通过JS和jquery实现。
- HttpServlet
- 进军SharePoint,资料先行....
- linux mysql远程连接
- 干货:react新手入门之react小书
- 【SCM】基于报童模型的MAPE与Profit仿真
- linux系统下安装搜狗输入法,搜狗拼音输入法 For Linux安装方法全程图解
- PDF解密怎么弄?分享这3个解密软件
- 教师资格证综合素质作文素材
- Win7蓝屏代码 0x0000007B
- S5P4418裸机开发(五):时钟
- 怎样启动模拟器模拟鸿蒙系统,鸿蒙OS 模拟器运行
- [体感游戏]关于体感游戏的一些思考(六)--- 飞行
- 自动化测试到底怎么做(单元测试自动化,接口自动化,UI自动化)
- C++转换函数 (conversion function)
- 百度站长工具之 流量与关键词
- 一个JAVA渣渣的校招成长记,附BAT美团网易等20家面经总结
热门文章
- Java的向上转型和向下转型利弊
- appium安装步骤
- Asp.Net Core 入门(四)—— Model、View、Controller
- 优化器(Optimizer)(SGD、Momentum、AdaGrad、RMSProp、Adam)
- 阿里云maven私有仓库,让你拥有自己的私有仓库
- 5、(五)外汇学习基础篇之银行间外汇掉期交易
- 2015062510 - 每一条河流都有它的去处
- 经历一周的远程办公,你还期待天天在家上班吗?
- 深入理解无服务器架构(Faas/Serverless)
- 面试时,发现公司有这8个现象,建议你慎重考虑!