文章目录

  • 1 KNN算法原理
    • 1.1 基本概念
    • 1.2 KNN算法原理
    • 1.3 实现步骤
    • 1.3 KNN算法优缺点
  • 2 python手工实现KNN算法
    • 2.1 KNN算法预测单个数据
    • 2.2 KNN算法预测数据集
    • 2.3 sklearn实现KNN算法

1 KNN算法原理

1.1 基本概念

KNN(K-NearestNeighbor)即K近邻算法,是数据挖掘分类技术中最简单的方法之一。所谓K近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。

1.2 KNN算法原理


假设特征空间有8个样本点,其中红色点为良性肿瘤,蓝色点为恶性肿瘤,现在要预测绿色点是良性肿瘤还是恶性肿瘤,我们需要计算出绿色点到所有其他样本点的距离,选择出距离最小的K个点,对K个点所属的类别进行比较,根据少数服从多数的原则,将测试样本点归入在K个点中占比最高的那一类。计算距离方法一般采用欧拉距离公式:
n维特征空间欧式距离计算公式

1.3 实现步骤

总体来说,KNN分类算法包括以下4个步骤:
①准备数据,对数据进行预处理
②计算测试样本点(也就是待分类点)到其他每个样本点的距离 。
③对每个距离进行排序,然后选择出距离最小的K个点。
④对K个点所属的类别进行比较,根据少数服从多数的原则,将测试样本点归入在K个点中占比最高的那一类。

1.3 KNN算法优缺点

优点:

1)思想简单、效果强大。
2)天然可解决多分类问题。
2)重新训练的代价较低(类别体系的变化和训练集的变化,在Web环境和电子商务应用中是很常见的)。
3)计算时间和空间线性于训练集的规模(在一些场合不算太大)。

缺点:
1)效率低下,如果训练集有m个样本,n个特征,则预测每一个新的数据,计算复杂度O(m*n)
2)高度数据相关,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数;对数据的局部结构比较敏感。如果查询点是位于训练集较密集的区域,那预测相对比其他稀疏集来说更准确。
3)预测结果不具有可解释性,只是找到了预测样本距离最近的样本点,不知道为什么属于预测类别。
4)维数灾难:随着维度增加,看似距离很近的2个点距离越来越大

2 python手工实现KNN算法

2.1 KNN算法预测单个数据

import matplotlib.pyplot as plt
import numpy as np#创建样本数据
x_data = [[1,2],[3,7],[4,3],[2,5],[5,1],[8,2]]
x_data = np.array(x_data)
y_data = [1,1,0,1,0,0]
y_data = np.array(y_data)

样本数据分布情况

假设测试数据为(6,7),在特征空间分布情况如下

from math import sqrt#计算测试数据到所有样本点距离
distance = []
for data in x_data:d = sqrt(np.sum((data-x_test)**2))distance.append(d)nearest = np.argsort(distance)
#最近的3个样本点
top_k = y_data[nearest[:3]]#k个样本点投票最多的
from collections import Counter
y_predict = Counter(top_k).most_common(1)[0][0]

2.2 KNN算法预测数据集

import numpy as np
from collections import Counter
from math import sqrt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_splitclass KNNClassifier:# 初始化KNN分类器,并对k赋值def __init__(self, k):self.k = kself.x_train = Noneself.y_train = None# 根据训练数据集x_train和y_train训练kNN分类器def fit(self, x_train, y_train):self.x_train = x_trainself.y_train = y_trainreturn self# 给定单个待预测数据x,返回x的预测结果值def __predict(self, x_test):distance = [sqrt(np.sum((data - x_test) ** 2)) for data in self.x_train]aa = np.argsort(distance)top_k = self.y_train[aa[:self.k]]votes = Counter(top_k).most_common(1)[0][0]return votes# 给定待预测数据集X_predict,返回表示X_predict的结果向量def predict(self, X_test):y_predict = [self.__predict(x) for x in X_test]return y_predictdef score(self, y_true, y_predict):percent = np.sum(y_true == y_predict) / len(y_true)return percentiris = load_iris()
x_data = iris.data
y_data = iris.target
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.2)
knn = KNNClassifier(k=3)
knn.fit(x_train, y_train)
y_predict = knn.predict(x_test)
percent = knn.sores(y_test, y_predict)

2.3 sklearn实现KNN算法

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import  KNeighborsClassifieriris = load_iris()
x_data = iris.data
y_data = iris.target
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.2)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(x_train, y_train)
y_predict = knn.predict(x_test)
percent = knn.score(x_test,y_test)

KNN算法原理及python实现相关推荐

  1. KNN算法原理与python实现

    文章目录 KNN算法原理 KNN算法介绍 KNN算法模型 距离度量 k值的选择 分类的决策规则 KNN算法python实现 手写数字识别 sklearn代码实现 参考文献 KNN算法原理 KNN算法介 ...

  2. 浅谈KNN算法原理及python程序简单实现、KD树、球树

    最近比较空闲,打算利用这一段时间理一下机器学习的一些常见的算法.第一个是KNN算法: KNN 1.原理: KNN,K-NearestNeighbor---K最近邻 K最近邻,就是K个最近的邻居的意思, ...

  3. KNN算法原理与简单实现

    KNN算法原理与简单实现 K最近邻(k-Nearest Neighbor,KNN)分类算法,是最简单的机器学习算法之一,涉及高等数学知识近乎为0,虽然它简单,但效果很好,是入门机器学习的首选算法.但很 ...

  4. 手把手教你EMD算法原理与Python实现(更新)

    Rose今天主要介绍一下EMD算法原理与Python实现.关于EMD算法之前介绍过<EMD算法之Hilbert-Huang Transform原理详解和案例分析>, SSVEP信号中含有自 ...

  5. python kmeans聚类 对二维坐标点聚类_Kmeans均值聚类算法原理以及Python如何实现

    第一步.随机生成质心 由于这是一个无监督学习的算法,因此我们首先在一个二维的坐标轴下随机给定一堆点,并随即给定两个质心,我们这个算法的目的就是将这一堆点根据它们自身的坐标特征分为两类,因此选取了两个质 ...

  6. 匈牙利算法原理与Python实现

    匈牙利算法原理与Python实现 今天学习一个新的算法-匈牙利算法,用于聚类结果分析,先用图表示我当前遇到的问题: 这两列值是我用不同算法得到的聚类结果,从肉眼可以看出第一列聚类为0的结果在第二列中对 ...

  7. Apriori 算法原理以及python实现详解

    Apriori 算法原理以及python实现 ​ Apriori算法是第一个关联规则挖掘算法,也是最经典的算法.它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与 ...

  8. LM(Levenberg–Marquardt)算法原理及其python自定义实现

    LM算法原理及其python自定义实现 LM(Levenberg–Marquardt)算法原理 LM算法python实现 实现步骤: 代码: 运行结果: LM(Levenberg–Marquardt) ...

  9. 机器学习之KNN算法原理

    机器学习之KNN算法原理 1 KNN算法简介 2 算法思想 3 多种距离度量公式 ① 欧氏距离(Euclidean distance) ② 曼哈顿距离(Manhattan distance) ③ 闵式 ...

最新文章

  1. Spring读书笔记——bean创建(下)
  2. 如何将adb shell里面查到的文件复制到本地电脑
  3. JAVA开发需求分析套路_毕设做什么好?感觉都是套路了
  4. 【转】mysql 、oracle中char和varchar以及varchar2的区别
  5. ubuntu matlab_有没有人和我一起整理Python的matlab代替
  6. Vue给单独页面添加背景色
  7. about page
  8. 开启mysql远程连接
  9. 基于STM32设计的数字电子秤
  10. Lattice Diamond 3.12下载与安装(免费获取license.dat)
  11. 智慧消防智能化管理系统综合分析
  12. Java之对象转型(casting)
  13. java弦截法,国家计算机软考高级程序员历年真题1996
  14. pve万兆网卡驱动_教你:高性价比万兆群晖方案——万兆SFP网卡配置使用教程
  15. 【Acm】算法之美—Crashing Balloon
  16. 论文笔记《End-to-End Training of Hybrid CNN-CRF Models for Stereo》用于立体评估的端到端训练的混合CNN-CRF模型
  17. 台式机计算机图标不见了,win7系统电脑右下角无线网络连接图标不见了怎么办-台式电脑怎么设置无线网络...
  18. 最新传智播客P2P金融项目网络借贷平台开发
  19. 免费 内网穿透工具 实测好用
  20. 数学建模--转移矩阵

热门文章

  1. 第四次作业——潘芊睿
  2. 智能运动手环摄像机的作用是什么?
  3. mysqladmin 命令详解
  4. Nginx-跨域请求配置
  5. 【论文书写--文献的交叉引用】
  6. 荣耀是不是没有鸿蒙了,不只是华为手机!荣耀或将接入鸿蒙,选定这款机型大有讲究...
  7. 一文读懂Casper区块链上的NFT
  8. 在该服务器未获取角色信息,王者荣耀体验服在该服务器未获取角色 | 手游网游页游攻略大全...
  9. 河道水文标尺识别检测 yolov5
  10. swift 聊天表情emoji转译(二)——从转译文字到聊天列表