无涯教程-KNN算法 - 寻找最近邻居

news2024/11/16 19:31:12

K最近邻(KNN)算法是一种监督的ML算法,可用于分类以及回归预测问题,但是,它主要用于行业中的分类预测问题。以下两个属性将很好地定义KNN-

  • 惰性学习算法    -  KNN是一种惰性学习算法,因为它没有专门的训练阶段,并且在分类时将所有数据用于训练。

  • 非参数学习算法 -  KNN也是一种非参数学习算法,因为它不假设基础数据。

KNN算法

K最近邻(KNN)算法使用"特征相似度"来预测新数据点的值,这进一步意味着,将根据新数据点与训练集中的点的匹配程度为该新数据点分配一个值。无涯教程可以通过以下步骤了解其工作方式-

第1步   -  要实现任何算法,都需要数据集,因此,在KNN的第一步中,必须加载训练以及测试数据。

第2步   -  接下来,需要选择K的值,即最近的数据点, K可以是任何整数。

第3步   -  对于测试数据中的每个点,请执行以下操作-

  •     3.1 - 借助以下任意一种方法来计算测试数据与每行训练数据之间的距离:欧几里得距离,曼哈顿距离,距离计算最常用的方法是欧几里得。

  •     3.2 - 现在,基于距离值,将它们按升序排序。

  •     3.3 - 接下来,它将从排序后的数组中选择前K行。

  •     3.4 - 现在,它将基于这些行中最常见的类别为测试点分配一个类别。

第4步    -  结束

以下是了解K的概念和KNN算法的工作的示例-

假设有一个可以绘制如下的数据集-

Concept of K

现在,无涯教程需要将带有黑点的新数据点(在点60,60处)分类为蓝色或红色类。假设K=3,即它将找到三个最近的数据点。下图显示-

KNN Algorithm

可以在上图中看到带有黑点的数据点的三个最近邻居。在这三个中,有两个属于红色等级,因此黑点也将被分配为红色等级。

代码实现

众所周知,K最近邻算法(KNN)可用于分类和回归。以下是Python中使用KNN作为分类器和回归器的配方-

KNN分类器

首先,从导入必要的python包开始-

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

接下来,如下所示从其网络链接下载iris数据集:

path="https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

接下来,需要为数据集分配列名称,如下所示:

headernames=[sepal-length, sepal-width, petal-length, petal-width, Class]

现在,需要将数据集读取为pandas数据框,如下所示:

dataset=pd.read_csv(path, names=headernames)
dataset.head()
sepal-lengthsepal-widthpetal-lengthpetal-widthClass
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa

数据预处理将在以下脚本行的帮助下完成。

X=dataset.iloc[:, :-1].values
y=dataset.iloc[:, 4].values

接下来,将数据分为训练和测试拆分。以下代码将数据集拆分为60%的训练数据和40%的测试数据-

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.40)

接下来,将按如下方式进行数据缩放-

from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
scaler.fit(X_train)
X_train=scaler.transform(X_train)
X_test=scaler.transform(X_test)

接下来,借助sklearn的KNeighborsClassifier类训练模型,如下所示-

from sklearn.neighbors import KNeighborsClassifier
classifier=KNeighborsClassifier(n_neighbors=8)
classifier.fit(X_train, y_train)

最后,需要进行预测。可以在以下脚本的帮助下完成-

y_pred=classifier.predict(X_test)

接下来,按如下所示打印输出-

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)
Confusion Matrix:
[[21 0 0]
[ 0 16 0]
[ 0 7 16]]
Classification Report:
                  precision   recall   f1-score   support
    Iris-setosa        1.00     1.00       1.00        21
Iris-versicolor        0.70     1.00       0.82        16
 Iris-virginica        1.00     0.70       0.82        23
      micro avg        0.88     0.88       0.88        60
      macro avg        0.90     0.90       0.88        60
   weighted avg        0.92     0.88       0.88        60

Accuracy: 0.8833333333333333

KNN回归器

首先,从导入必要的Python包开始-

import numpy as np
import pandas as pd

接下来,如下所示从其网络链接下载iris数据集:

path="https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

接下来,需要为数据集分配列名称,如下所示:

headernames=[sepal-length, sepal-width, petal-length, petal-width, Class]

现在,需要将数据集读取为pandas数据框,如下所示:

data = pd.read_csv(url, names = headernames)
array = data.values
X = array[:,:2]
Y = array[:,2]
data.shape
output:(150, 5)

接下来,从 sklearn 导入 KNeighborsRegressor 以适合模型-

from sklearn.neighbors import KNeighborsRegressor
knnr=KNeighborsRegressor(n_neighbors=10)
knnr.fit(X, y)

最后,无涯教程可以找到MSE,如下所示:

print ("The MSE is:",format(np.power(y-knnr.predict(X),2).mean()))
The MSE is: 0.12226666666666669

KNN算法 - 寻找最近邻居 - 无涯教程网无涯教程网提供K最近邻(KNN)算法是一种监督的ML算法,可用于分类以及回归预测问题,但是,它主要用于...https://www.learnfk.com/python-machine-learning/machine-learning-with-python-knn-algorithm-finding-nearest-neighbors.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/935214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java-继承和多态(下)

补全构造方法 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);while (scanner.hasNextInt()) {int x scanner.nextInt();int y scanner.nextInt();int z scanner.nextInt();Sub sub new…

【Python】基于Python的电话簿(Phonebook project)设计【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

使用Rust开发命令行工具

生成二进制文件,将其扔到环境变量的path下即可~ 用rust打造实时天气命令行工具[1] 找到合适的API 使用该api[2] 如请求 api.openweathermap.org/data/2.5/weather?qBeijing&appidyour_key: { "coord": { "lon": 116.3972, "lat&quo…

变天了,国产技术突破让黑黄金变成白菜价,芯片技术变革时代来了

由于众所周知的原因,美国企图利用它掌握的硅基芯片技术体系,阻止中国发展先进芯片,不过中国科技界在一项重要芯片材料方面已取得重大突破,还让这种芯片材料变成白菜价,将改变硅基芯片技术主导的时代。 这种芯片材料就是…

小研究 - JVM 的类装载机制

本文通过对一个类装载实例的分析,阐明了 Java虚拟机的类装载的代理机制和由此定义的命名空间,指出了类装载机制在容器/组件/抽象框架结构中的作用。 目录 1 引言 2 实例 3 分析 3.1 类装载的代理机制 3.2 Java的命名空间 3.3 解决问题 4 应…

全栈之前端 | 1.CSS3必备基础知识学习

关注回复【学习交流群】加入【安全开发运维】答疑交流群 请朋友们【多多点击文中的广告】,支持作者更新更多文章。 目录: 0x00 前言简述 描述: 前面跟随着WeiyiGeeker作者【全栈工程师修炼指南】公众号一起学习了前端基础的知识以及HTML标签、属性、事件、字符集系列…

寻找注册配置中心最佳评测官,赢取丰厚奖品 | 测评开启,开发者请速速集结

评测前请点击文末链接,领取 MSE-Nacos 免费试用,再启动评测。 注册配置中心 MSE-Nacos (以下简称 MSE-Nacos),即 Nacos 的企业版,开箱即用的 Nacos 云服务,对 Nacos 内核进行企业级稳定性加固,故障自动检测…

统计学补充概念-13-逻辑回归

概念 逻辑回归(Logistic Regression)实际上是一种用于解决分类问题的统计学习方法,尽管其名称中带有"回归"一词,但它主要用于处理分类任务。逻辑回归用于预测一个事件发生的概率,并将其映射到一个特定的输出…

js的this指向问题

代码一: 这段代码定义了run函数、obj对象,然后我们把run函数作为obj的方法。 function run(){console.log(this);}let obj{a:1,b:2};obj.runrun;obj.run(); 那么我们调用obj的run方法,那么这个方法打印的this指向obj。 分析:即…

第十三课 宾语从句

文章目录 前言一、宾语从句1、主语及物动词宾语从句2、主语双宾动词间接宾语直接宾语3、主语特定及物动词宾语从句(作宾语)宾补4、主语be某些形容词宾语从句5、动词不定式后面的宾语从句6、动名词后面的宾语从句7、介词后面的宾语从句9、间接引语 前言 一…

基于LOF算法的异常值检测

目录 LOF算法简介Sklearn官网LOF算法应用实例1Sklearn官网LOF算法应用实例2基于LOF算法鸢尾花数据集异常值检测读取数据构造数据可视化,画出可疑异常点LOF算法 LOF算法简介 LOF异常检测算法是一种基于密度的异常检测算法,基于密度的异常检测算法主要思想…

Centos7安装ZK-UI管理界面安装|Maven|Git|

一: JDK1.8安装 参考: Centos7卸载|安装JDK1.8|Xshell7批量控制多个终端 二:Maven安装 2.1:下载maven安装包 maven 下载地址:https://mirror.bit.edu.cn/apache/maven/maven-3/ [rootwww ~]# mkdir -p /usr/local/maven [rootwww ~]# …

【C/C++】多态的概念 | 虚函数 | 虚函数指针

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

Linux操作系统--vi/vim编辑器

1.Vi/Vim简介 Vi 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。 VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容。这里简单的理解为如果你需要使用指令取操作Linux系…

【LeetCode-中等题】142. 环形链表 II

文章目录 题目方法一&#xff1a;哈希表set去重方法二&#xff1a;快慢指针 题目 方法一&#xff1a;哈希表set去重 思路&#xff1a;我们遍历链表中的每个节点&#xff0c;并将它记录下来&#xff1b;一旦遇到了此前遍历过的节点&#xff0c;就可以判定链表中存在环。借助哈希…

nonlocal关键字声明

nonlocal关键字声明 作用 使得内层函数可以使用/修改外层函数的变量 值得注意的是&#xff0c;在未使用nonlocal声明时 对于外层函数中的可变对象&#xff0c;内层函数即可访问&#xff0c;也可以修改 def outer():x, y [1], [2]def inner(z):x.append(1)print(x)print(z)r…

英特尔oneAPI人工智能黑客松 - 坚果识别实战

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

Ubuntu断电重启后黑屏左上角光标闪烁,分辨率低解决办法,ubuntu系统display只有4:3 怎么办?太卡

这个问题主要是显卡驱动问题&#xff0c;按照步骤更新显卡驱动 1&#xff0c;选择metapackage 并且选择proprietary版本&#xff0c;选择版本号选择最新的版本。 2&#xff0c;具体步骤参考 前言 笔者在安装显卡驱动时并未遇到问题&#xff0c;主要是后续屏幕亮度无法调节&…

qt在线包下载安装出错 无法检索远程树

我的问题好像是在安装Qt5.15.2出现的。 我的情况是由于网络问题问题&#xff0c;设置开启了本机的代理之后&#xff0c;就可以正常下载了。

STM32F103 USB OTA升级APP (二)

接上一篇STM32F103 USB OTA升级BootLoader (一)&#xff1a;跳转链接 修改程序启动地址和Flash大小 修改main.c代码 #include "main.h" #include "usart.h" #include "usb_device.h" #include "gpio.h" #include "Update.h&quo…