分类算法KNN的python实现

knn(k近邻算法)——python 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 导入相关库 4.2 读取数据 4.3 读取变量名 4.4 定义X,Y数据 4.5 分离训练集和测试集 4.6 计算欧式距离 4.7可视化距离矩阵 4.8 预测样本 4.9 查看正确率 4.10 交叉验证 5.scikit-learn的算法实现 5.1 对上述的再次实现: 5.2 另一种实现方式 阅读详情

作者:刘凡

KNN算法介绍

KNN算法是有监督学习中的分类算法,它是一种非参的,惰性的算法模型。非参的意思并不是说这个算法不需要参数,而是意味着这个模型不会对数据做出任何的假设,与之相对的是线性回归(我们总会假设线性回归是一条直线)。也就是说KNN建立的模型结构是根据数据来决定的,这也比较符合现实的情况,毕竟在现实中的情况往往与理论上的假设是不相符的。惰性的意思是指模型在使用前不会被训练,只有当使用的时候才会被训练。

KNN算法优点: 简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理。可以处理多分类问题;还可以处理回归问题。

KNN算法缺点: 对内存要求较高,因为该算法存储了所有训练数据,预测阶段可能很慢;对训练数据依赖度特别大,虽然所有机器学习的算法对数据的依赖度很高,但是KNN尤其严重,因为如果我们的训练数据集中,有一两个数据是错误的,刚刚好又在我们需要分类的数值的旁边,这样就会直接导致预测的数据的不准确,对训练数据的容错性太差;维数灾难。

自编函数实现

#欧氏距离
def distance(a,b):
    return np.sqrt(np.sum((a-b)**2,axis=1))
# 分类器实现
class kNN(object):
    # 定义初始化方法,初始化kNN需要的参数
    def __init__(self,n_neighbors = 1,dist_func = distance):
        self.n_neighbors = n_neighbors
        self.dist_func = dist_func

    # 训练模型方法
    def fit(self,x,y):
        # 将x,y传进来即可
        self.x = x
        self.y = y
    
    # 模型预测方法
    def predict(self,x):
        # 初始化预测分类数组
        y_pred = np.zeros((x.shape[0],1),dtype = self.y.dtype)
        
        # 遍历输入的x数据点,取出每一个数据点的i和数据x_test
        for i,x_test in enumerate(x):
            # x_test跟所有的训练数据计算距离
            distances = self.dist_func(self.x,x_test)
            
            # 得到的距离按照由近到远排序
            nn_index = np.argsort(distances)
            
            # 选取最近的k个点,保存其类别
            nn_y = self.y[nn_index[:self.n_neighbors]].ravel()
            
            # 统计类别中频率最高的那个,赋给y_pred[i]
            y_pred[i] = np.argmax(np.bincount(nn_y))
        return y_pred   

测试

import numpy as np 
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

iris = load_iris()
# 划分训练集和测试集
x = iris.data
y = iris.target.reshape(-1,1)#将iris.target 行向量,转换成列
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3)

knn = kNN(n_neighbors = 3)
knn.fit(x_train,y_train)
# 传入测试数据,做预测
y_pred = knn.predict(x_test)

# 求准确率
accuracy = accuracy_score(y_test,y_pred)
print('预测准确率:',accuracy)
'''预测准确率: 0.9777777777777777'''

调参

knn = kNN()
# 训练模型
knn.fit(x_train,y_train)

# 创建一个列表保存不同的准确率
result_list = []
knn.dist_func = distance
   # 考虑不同的k值
for k in range(1,10,1):
    knn.n_neighbors = k
    # 传入测试数据,做预测
    y_pred = knn.predict(x_test)
    # 求出预测准确率
    accuracy = accuracy_score(y_test,y_pred)
    result_list.append([k,accuracy])

df  = pd.DataFrame(result_list,columns = ['k','预测准确率'])
df 

在这里插入图片描述

sklearn模块的实现

参数介绍

sklearn.neighbors 模块中的KNeighborsClassifier类可以实现KNN算法。

KNeighborsClassifier(n_neighbors=5, *, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)
  • n_neighbors: int, 可选参数(默认为 5)用于kneighbors查询的默认邻居的数量

  • weights(权重): str or callable(自定义类型), 可选参数(默认为 ‘uniform’)用于预测的权重函数。可选参数如下:

    • ‘uniform’ : 统一的权重. 在每一个邻居区域里的点的权重都是一样的。
    • ‘distance’ : 权重点等于他们距离的倒数。使用此函数,更近的邻居对于所预测的点的影响更大。
    • ‘callable’ : 一个用户自定义的方法,此方法接收一个距离的数组,然后返回一个相同形状并且包含权重的数组。
  • algorithm(算法): {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, 可选参数(默认为 ‘auto’)
    计算最近邻居用的算法:

    • ‘ball_tree’是为了克服kd树高纬失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。 ball-tree按超球面进行划分。球树:找到一个中心点,使所有样本点到这个中心点的距离最短。对于每一个节点的子节点的选择,方式如下:选择当前超球体区域离中心最远的点作为左子节点选择距离左子节点距离最远的点作为右子节点对于其他的样本点,计算到左子节点和右子节点对应样本点的欧式距离,并分配到距离较近的那一个对所有子节点做相同的操作
    • ‘kd_tree’ 构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。
    • Kd-tree按维度逐次划分kd 树是一个二叉树,每一个内部的节点都代表了一个超矩形空间,并且它的子树包含在这个超矩形空间内部的所有样本点。但是 kd 树对于一些样本分布情况而言效率并不高,比如当大量样本落在一个超矩形的角落的情况,此时使用球树的效率会更高
    • ‘brute’ 使用暴力搜索.也就是线性扫描,当训练集很大时,计算非常耗时
    • ‘auto’ 会基于传入fit方法的内容,选择最合适的算法。
  • leaf_size(叶子数量): int, 可选参数(默认为 30)。传入BallTree或者KDTree算法的叶子数量。此参数会影响构建、查询BallTree或者KDTree的速度,以及存储BallTree或者KDTree所需要的内存大小。 此可选参数根据是否是问题所需选择性使用

  • p: integer, 可选参数(默认为 2)。 用于Minkowski metric(闵可夫斯基空间)的超参数。p = 1, 相当于使用曼哈顿距离 (l1),p = 2, 相当于使用欧几里得距离(l2) 对于任何 p ,使用的是闵可夫斯基空间(l_p)

  • metric(矩阵): string or callable, 默认为 ‘minkowski’用于树的距离矩阵。默认为闵可夫斯基空间,如果和p=2一块使用相当于使用标准欧几里得矩阵. 所有可用的矩阵列表请查询 DistanceMetric 的文档。

  • metric_params(矩阵参数): dict, 可选参数(默认为 None)给矩阵方法使用的其他的关键词参数。

  • n_jobs: int, 可选参数(默认为 1), 用于搜索邻居的,可并行运行的任务数量。设定工作的core数量,如果为-1, 任务数量设置为CPU核的数量。不会影响fit方法。

测试

#测试
import numpy as np 
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.neighbors import KNeighborsClassifier

iris = load_iris()
# 划分训练集和测试集
x = iris.data
y = iris.target.reshape(-1,1)#将iris.target 行向量,转换成列
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3)


knn = KNeighborsClassifier(n_neighbors=3,weights='uniform',algorithm='auto')

knn.fit(x_train,y_train)
# 传入测试数据,做预测
y_pred = knn.predict(x_test)

# 求准确率
accuracy = accuracy_score(y_test,y_pred)
print('预测准确率:',accuracy)
'''预测准确率: 0.9555555555555556'''

计算混淆矩阵

sklearn.metrics模块中的confusion_matrix和classification_report 函数可以计算出混淆矩阵和预测正确率等指标。

from sklearn.metrics import confusion_matrix,classification_report 
print(confusion_matrix(y_test, y_pre))
print(classification_report(y_test, y_pre))

在这里插入图片描述

KNN算法原理及python实现 1 KNN算法原理 2 python手工实现KNN算法 3 sklearn实现KNN算法 1 KNN算法原理 1.1 基本概念 KNN(K-NearestNeighbor)即K近邻算法,是数据挖掘分类技术中最简单的方法之一。所谓K近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。 1.2 KNN算法原理 假设特征空间有8个样本点,其中红色点为良性肿瘤,蓝色点为恶性肿瘤,现在要预测绿色点是良性肿瘤还是恶性肿瘤,我们需要计算出绿色点到所有其他样本点的距离,选择出距离最小的K. 阅读详情

相关推荐

机器学习——最基础的分类算法-k近邻算法 kNN简介及Jupyter基础实现及Python实现

最基础的分类算法-k近邻算法 kNN简介及Jupyter基础实现及Python实现 k-Nearest Neighbors简介 对于该图来说,x轴对应的是肿瘤的大小,y轴对应的是时间,蓝色样本表示恶性肿瘤,红色样本表示良性肿瘤,我们先假设k=3,这个k先不考虑怎么得到,先假设这个k是通过程序员经验得到。 假设此时来了一个新的样本绿色,我们需要预测该样本的数据是良性还是恶性肿瘤。我们从训练样本中...

Liuyt_61的博客 1380

python实现KNN算法

使用numpy复现KNN算法。(1)更加了解算法以及熟练复现能力。(2)为后续优化改进KNN算法做铺垫。(3)涉及到的运算使用numpy,加快运算。后续,将会如kmeans算法一样,将三支决策思想融入进去,优化算法。使得knn算法的效果提升的更好。

aouiylfjh的博客 5516

用python实现kNN分类算法

k-近邻算法是基本的机器学习算法,算法的原理非常简单: 输入样本数据后,计算输入样本和参考样本之间的距离,找出离输入样本距离最近的k个样本,找出这k个样本中出现频率最高的类标签作为输入样本的类标签,很直观也很简单,就是和参考样本集中的样本做对比。下面讲一讲用python实现kNN算法的方法,这里主要用了python中常用的numpy模块,采用的数据集是来自UCI的一个数据集(https://ar

♂♂♂stridehuan♂♂♂ 2278

用python实现KNN算法

KNN简介 KNN(K-nearest neighbor),即K近邻算法。当需要表示一个样本(值)的时候,就使用于该样本最接近的K个邻居来决定。KNN即可以用于分类,也可以用于回归。 数据集地址 https://vincentarelbundock.github.io/Rdatasets/csv/datasets/iris.csv RNN算法 # -*- coding:utf-8 -*- import numpy as np class KNN: def __init__(self,k):

技术宅--火狼的专栏 6090

K-近邻算法: k-nearest neighbor classification (kNN) 详细介绍

@创建于:2020.04.09 @修改于:2020.04.09,2024.06.22 文章目录1、kNN介绍2、k近邻法的三要素详解2.1 距离度量2.2 k值的选择2.3 分类决策规则3、k近邻法的实现:kd树4、Python实现过程5、优缺点6、常见问题 1、kNN介绍 kNN是一个基本而简单的分类算法,作为监督学习,那么KNN模型需要的是有标签的训练数据,对于新样本的类别由与新样本距离最近的k个训练样本点按照分类...

chenhepg的博客 9万+

kNN分类算法python实现

安装pythonMatplotlib依赖于Python和NumPy,所以在unbuntu上安装python的快捷方法就是直接安装Matplotlib>sudo apt-get install python-matplotlibkNN算法伪代码1.计算已知类别数据集中的点与当前点之间的距离; 2.按照距离递增次序排序; 3.选取与当前距离最小的k个点; 4.确定前k个点所在类别的出现频率; 5.返回前

Important Thing First 2543

Python KNN k-邻近算法 手动实现及分析 分类、回归、糖尿病预测实战

Python KNN k-邻近算法 算法原理 \qquad k-邻近算法的核心思想是未标记样本的类别,由距离其最近的k个邻近投票来决定。 \qquad 假设,我们有一个已经标记的数据集,即已经知道了数据集中每个样本所属的类别。此外,有一个未标记的数据样本,我们的任务是预测出这个数据样本所属的类别。k-邻近算法的原理是,计算待标记的数据样本和数据集中每个样本的距离,取距离最近的k个样本。待标记的数据...

Rp的博客 2863

分类算法 -- KNN算法 (理论与python实现)

分类算法 – KNN算法 KNN(K-Nearest Neighbor)是一个分类算法,属于有监督学习。 KNN思想的核心在于:近朱者赤,近墨者黑,根据新样本的邻居来判定其类别。 理论说明 算法概论 假设我们已知n个样本的特征和标签(即所属分类),并以此作为样本集A。 当输入一个没有标签的样本b时,我们可以通过比较新样本b与样本集A中数据对应的特征,然后提取出最为相似的k个数据。 最后我们选取k个...

海军上将光之翼的博客 1931

Python 实现 BO-KNN(贝叶斯优化 K 近邻算法)进行分类预测的示例

将贝叶斯优化与 KNN 算法结合,构成了“BO-KNN(贝叶斯优化 K 近邻算法)”,这一结合为我们提供了一种新的方法,以更好地选择 KNN 的超参数,从而实现更加精准的分类预测。最后,BO-KNN 的可解释性也是一个亟需解决的问题。首先,贝叶斯优化是一种复杂的统计方法,虽然它能够为超参数调优提供强大的支持,但其实现难度较高,尤其是如何构建合适的代理模型(通常是高斯过程)来进行有效的搜索。传统的机器学习方法如 KNN 和贝叶斯优化之间的结合,不仅能提升分类算法的性能,也为优化方法的研究提供了新的视角。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 1010

Python实现KNN算法(附源码)

本篇我们将讨论一种广泛使用的分类技术,称为k邻近算法,或者说K最近邻(KNN,k-Nearest Neighbor)。所谓K最近邻,是k个最近的邻居的意思,即每个样本都可以用它最接近的k个邻居来代表。01、KNN算法思想如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。KNN方法在类别决策时,只与极少量的相邻样本有关。

不断学习,不断进步,提高自己 6292

Python实现K近邻算法(KNN)完整教程:手把手教你构建AI分类模型

K近邻算法(K-Nearest Neighbors, KNN)是机器学习中最经典的监督学习分类算法之一。它以“简单、直观、易理解”著称,被广泛应用于图像识别、推荐系统、医学诊断等领域。本文将覆盖KNN的核心原理、数学模型、Python实现全流程,并通过实战案例(鸢尾花分类)演示如何从0到1构建分类模型。本文将按照“原理→数学→代码→实战”的逻辑展开:先通过生活案例理解KNN的核心思想,再用数学公式拆解关键步骤,接着用Python代码实现完整流程,最后通过真实数据集验证模型效果。K值。

AI 领航者的博客 1201

Python 实现 KNN 分类算法

文章目录KNNKNN 分类算法步骤KNN 的优缺点python 实现 本文将详细讲述 KNN 算法及其 python 实现 KNN KNN(K-Nearest Neighbour)即 K最近邻,是分类算法中最简单的算法之一。KNN 算法的核心思想是 如果一个样本在特征空间中的 k 个最相邻的样本中的大多数属于某一个类别,则将该样本归为该类别 KNN 分类算法步骤 有 N 个已知分类结果的样本点,对...

深刻的博客 2839

TwinCAT3 实时核异步通信:基于ADS的C++ Server/Client数据交换实战解析

本文深入解析了在TwinCAT3实时核中,如何利用ADS协议实现C++ Server与Client之间的异步数据交换。文章从核心概念入手,详细阐述了实时核、ADS通信及异步机制,并通过实战步骤指导环境搭建、路由配置、Server端服务创建与Client端请求发起,重点剖析了Req/Ind/Res/Con异步回调模型,旨在帮助开发者构建高效、非阻塞的实时工业控制应用。

purple的博客 469

kNN分类算法的Python实现

1.k-近邻算法实现 from numpy import * import operator def createDataSet(): group = array([[1.0, 1.1], [2.0, 2.0], [0, 0], [4.1, 5.1]]) labels = ['A', 'B', 'C', 'D'] return group, labels def...

RivenDong 1925

黑苹果从入门到精通:最详细的VMware安装macOS教程

前言 不知为何,以前我发的两篇关于黑苹果的文章或没过审或被删除,最近SMZDM上有不少优质的黑苹果文章发出来,貌似禁令已开,前段时间在一篇写的很不错的黑果文章下吹牛说今年要写一个系列,故有了这篇文章作为系列的开头。 系列的名字起的有点俗,叫做xxx从入门到精通,但是我很喜欢,相信过半的黑果群众都是程序员,作为教程来说这个名字俗但是好用,我也希望这个系列能像其它入门到精通系列一样,让大家学到东西...

La victoria的博客 14万+

从零开始学DAG:用dagitty软件快速构建因果图的5个步骤

本文为初学者提供了使用dagitty软件快速构建因果图的5个实用步骤。通过一个公共卫生研究实例,详细演示了如何从定义核心变量开始,逐步引入混杂、中介和碰撞变量,最终利用dagitty的自动分析功能识别最小充分调整集,从而科学指导研究设计与统计分析,有效提升因果推断的严谨性。

ii567的博客 800

python分类算法_用Python实现KNN分类算法

本文实例为大家分享了Python KNN分类算法的具体代码,供大家参考,具体内容如下KNN分类算法应该算得上是机器学习中最简单的分类算法了,所谓KNN即为K-NearestNeighbor(K个最邻近样本节点)。在进行分类之前KNN分类器会读取较多数量带有分类标签的样本数据作为分类的参照数据,当它对类别未知的样本进行分类时,会计算当前样本与所有参照样本的差异大小;该差异大小是通过数据点在样本特征的...

weixin_39618169的博客 936

2022中山大学计算机技术专硕考研初试、复试经验帖

个人简介 推荐几个我自己感觉对考研非常有帮助的小助手吧。可以帮助节省时间! 考研时间规划总览 初试篇 数学 英语 政治 408 复试篇 机试 笔试 面试 关于选导师 个人感言

zik的博客 1万+

利用kNN算法进行分类python实现

文章目录kNN算法思想与步骤实力分析与代码实现 kNN算法思想与步骤 kNN算法的基本思想如下: 假设样本集共有n个样本,它们在m个特征上具有区分度,它们分别属于0或1中的一类。假设第i个样本的特征向量为(ai1,ai2,⋯ ,aim)(a_{i1},a_{i2},\cdots,a_{im})(ai1​,ai2​,⋯,aim​)。现有一待归类对象,设它的特征向量为(b1,b2,⋯ ,bm)(b_1,b_2,\cdots,b_m)(b1​,b2​,⋯,bm​)。计算此待归类对象与n个样本在特征空间中的欧氏距离

weixin_50744311的博客 3002

1、开启 Microsoft Power Automate 自动化之旅

本文介绍了 Microsoft Power Automate 的基本概念和其在信息时代自动化需求中的重要作用。Power Automate 是 Power Platform 的一部分,能够通过无代码/低代码的方式自动化处理重复性任务,例如邮件处理、文件复制等,从而提升工作效率。文章还详细讲解了 Power Automate 的核心术语、登录方式、创建第一个流程的操作步骤,并通过示例帮助用户快速上手。无论是终端用户还是管理员,都可以通过本文了解如何利用 Power Automate 实现业务流程自动化。

corn8的博客 169

【华为OD机试真题】29、组成最大数 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS)

题目描述 >小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来可以组成多种数字,计算组成的最大数字

KJ.JK 2419

KNN近邻算法实战:用Python实现葡萄酒分类

在葡萄酒分类案例中,我们用二维特征空间(酒精浓度和颜色深度)展示了如何用勾股定理的扩展公式进行距离计算。对于想快速验证算法效果的朋友,可以尝试修改K值或新增样本数据,实时观察分类结果的变化,这种交互式学习体验能加深对算法特性的理解。构建包含10个样本的数据集,每个样本有酒精浓度和颜色深度两个特征,以及对应的葡萄品种标签(0=黑皮诺,1=赤霞珠)。通过散点图直观展示两类葡萄酒在特征空间的分布情况,新数据点用黄色突出显示,便于观察其与各类样本的相对位置关系。实践中常用交叉验证确定最佳K值。

FrostfireStag78的博客 685

MATLAB基础应用精讲-【数模应用】PPO算法(附python代码实现)(二)

表示为状态转移概率和动作选择概率的乘积,因为状态和动作决定轨迹。

qq_36130719的博客 413

KNN分类算法的Python实现

文章目录前言一、KNN的基本思路二、代码实现1.读取excel文件2.对一个数据规范化3.对数据集规范化4.计算样本间距离5.KNN算法完整代码分类结果总结 前言 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。。 一、KNN的基本思路 所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训.

ixobgenw的博客 5851

Vue3 - 详细实现调用浏览器摄像头拍照并生成图片预览,支持将抓拍的图像保存到用户本地或上传到服务器、调取前置摄像头和后置摄像头,开启摄像头并进行拍照,vue实现调用摄像头,电脑或手机调用摄像头拍照

vue3,nuxt3,摄像头,vue3网站打开摄像头拍照,vue3项目调用摄像头实现拍照功能,拍照后怎么保存,照相后上传到后端服务器,开启摄像头黑屏,如何默认后置摄像头,网页开启电脑摄像头并照相,前置拍照,vue3如何调用手机摄像头进行拍摄,拒绝权限后不再弹出了,微信公众号网页,摄像头报错,拍照左右镜像反了,浏览器不兼容怎么办,vue3调用电脑端摄像头实时拍照,解决调用摄像头权限无法弹出,打不开摄像头,Vue3如何调用手机的摄像头,调用本地摄像头实现拍照,浏览器不弹摄像头权限了,如何不使用https运行测试

🏆 前端领域优质创作者 8654

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: tensflow中的矩阵运算
下一篇: 决策树和随机森林的python实现
zoujiahui_2018
博客等级 码龄12年 643粉丝 270原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值