PYTHON基础:K最邻近算法

news2024/11/19 19:44:50

K最邻近算法笔记

K最邻近算法既可以用在分类中,也可以用在回归中。在分类的方法,比如说在x-y的坐标轴上又两个成堆的数据集,也就是有两类,如果这个时候有个点在图上,它是属于谁?
原则就是哪一类离它比较近的数据集的点最多,它就是属于谁的。

接下里通过一些简单的例子进行说明。
我们这里要用到的模块叫做scikit_learn,这里面有一些数据可以提供给我进行模拟的,当然也可以使用自己的数据也没问题。

from sklearn.datasets import make_blobs#用于导入模块给好的数据
from sklearn.neighbors import KNeighborsClassifier#KNN分类器
import matplotlib.pyplot as plt #画图工具
from sklearn.model_selection import train_test_split#数据集拆分工具
import numpy as np#数据分析工具
#生成两类两百个点
data=make_blobs(n_samples=200,centers=2,random_state=8)
#数据可视化
X,y =data 
#画出数据点图
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')
plt.show()

可以在图上绘制出两类的点,如果这个时候放一个点进去,数据这么多肯定没办法一个个计算,我们就可以利用机器学习建立一个模型来判断,这些已知的数据是我们建立模型的基础。我们可不可以直接建立了一个范围,一个点如果在一个范围的内的就是这个属于这个类的
在这里插入图片描述

这里就是K最邻近算法建立的“领域范围”了

from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt 
from sklearn.model_selection import train_test_split
import numpy as np
data=make_blobs(n_samples=200,centers=2,random_state=8)
X,y =data 
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')


clf=KNeighborsClassifier()
clf.fit(X,y)
#下面是画图
x_min,x_max=X[:, 0].min()-1,X[:, 0].max()+1
y_min,y_max=X[:, 1].min()-1,X[:, 1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max, .02),np.arange(y_min,y_max,.02))
z=clf.predict (np.c_[xx.ravel (),yy.ravel ()])
z=z.reshape(xx.shape)
plt.pcolormesh(xx,yy,z)
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifier:KNN")

plt.show()

在这里插入图片描述

我们输入一点(8.75,4.23)并把它标记为星形,看下可以判定与否

from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt 
from sklearn.model_selection import train_test_split
import numpy as np
data=make_blobs(n_samples=200,centers=2,random_state=8)
X,y =data 
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')


clf=KNeighborsClassifier()
clf.fit(X,y)
x_min,x_max=X[:, 0].min()-1,X[:, 0].max()+1
y_min,y_max=X[:, 1].min()-1,X[:, 1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max, .02),np.arange(y_min,y_max,.02))
z=clf.predict (np.c_[xx.ravel (),yy.ravel ()])
z=z.reshape(xx.shape)
plt.pcolormesh(xx,yy,z)
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifier:KNN")
plt.scatter(8.75,4.23,marker='*',c='red',s=200)
plt.show()

在这里插入图片描述

这个时候,我们建立的模型的确得到了准确的表达

那我们再试试一个临界值6.75,4.82

print('\n\n\n')
print('output')
print('===============')
print('new data',clf.predict([[6.75,4.82]]))
print('===============')
print('\n\n\n')
output
===============
new data [1]
===============

分类实在第一类,的确没问题

那我们再来试试多元情况

还是上面一样的代码,我们这个来试试500个数据点并把他们分成五类。

from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt 
from sklearn.model_selection import train_test_split
import numpy as np
data2=make_blobs(n_samples=500,centers=5,random_state=8)
X2,y2 =data2 
plt.scatter(X2[:,0],X2[:,1],c=y2,cmap=plt.cm.spring,edgecolor='k')

生成了下面这个图片
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210204121552148.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzU2NzQwMQ==,size_16,color_FFFFFF,t_70在这里插入图片描述

我们在使用和上面一样的算法

from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt 
from sklearn.model_selection import train_test_split
import numpy as np
data2=make_blobs(n_samples=500,centers=5,random_state=8)
X2,y2 =data2 
plt.scatter(X2[:,0],X2[:,1],c=y2,cmap=plt.cm.spring,edgecolor='k')


clf=KNeighborsClassifier()
clf.fit(X2,y2)
x_min,x_max=X2[:, 0].min()-1,X2[:, 0].max()+1
y_min,y_max=X2[:, 1].min()-1,X2[:, 1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max, .02),np.arange(y_min,y_max,.02))
z=clf.predict (np.c_[xx.ravel (),yy.ravel ()])
z=z.reshape(xx.shape)
plt.pcolormesh(xx,yy,z)
plt.scatter(X2[:,0],X2[:,1],c=y2,cmap=plt.cm.spring,edgecolor='k')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifier:KNN")
plt.show()

可见也成功画出了‘范围’
在这里插入图片描述

那我们的模拟的准确度有多高呢?用下面这个函数可以计算出来。

print('\n\n\n')
print('output')
print('===============')
print('corrct rate{:.2f}'.format(clf.score(X2,y2)))
print('===============')
print('\n\n\n')
print('\n\n\n')
print('output')
print('===============')
print('corrct rate{:.2f}'.format(clf.score(X2,y2)))
print('===============')
print('\n\n\n')


output
===============
corrct rate0.96
===============

满分1分,这里我们拟合的模型有0.96分,拟合的程度还是相当好的

接下里我们在来看下回归分析的应用

这里我们用make_regression 来生成一个建立模型的数据集

from sklearn.datasets import make_regression#用于生成数据
import matplotlib.pyplot as plt#画图
#一个特征,噪音50
X,y=make_regression(n_features=1,n_informative=1,noise=50,random_state=8)
plt.scatter(X,y,c='orange',edgecolor='k')
plt.show()

在这里插入图片描述

我们使用算法开始建立模型

from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsRegressor
#导入KNN回归分析模型
X,y=make_regression(n_features=1,n_informative=1,noise=50,random_state=8)
plt.scatter(X,y,c='orange',edgecolor='k')
reg=KNeighborsRegressor()
#拟合数据
reg.fit(X,y)
z=np.linspace(-3,3,200).reshape(-1,1)
plt.scatter(X,y,c='orange',edgecolor='k')
plt.plot(z,reg.predict(z),c='k',linewidth=3)
plt.title('kNN Regressor')
plt.show()

可以拟合出一条折线
在这里插入图片描述

我们来对这个模型进行下测试,看看这个模型好不好使,结果打分是0.77,还是不错的

print('\n\n\n')
print('output')
print('===============')
print('model score{:.2f}'.format(reg.score(X,y)))
print('===============')
print('\n\n\n')



output
===============
model score0.77
===============

参考文献
深入浅出python机器学习–段小手著

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

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

相关文章

【Unity6.0+AI】Unity版的Pytorch之Sentis-把大模型植入Unity

本教程详细讲解什么Sentis。以及恶补一些人工智能神经网络的基础概念,概述了基本流程,加载模型、输入内容到模型、使用GPU让模型推理数据、输出数据。 官方文档 Unity Sentis: Use AI models in Unity Runtime | Unity 主页介绍 官方文档链接:Sentis overview | Sentis | 1…

常见的一些库函数

什么是库函数: 库函数是一组预先定义好的函数,可以通过包含相应的头文件来使用。它们提供了各种常用的功能和算法,使得编程更加方便和高效。 库函数的作用如下: 提供常用功能:库函数提供了各种常用的功能,…

深入探究MongoDB:从基础到实战,一个全面的指南

MongoDB:海量数据库的介绍 定义与命名由来: MongoDB源自词“humongous”,意味着“巨大无比”。因此,MongoDB可译为“海量数据库”。类型: MongoDB是一种非关系型(NoSQL)数据库。与传统的关系型数据库相比,它的显著特点是不使用SQL语句。数据结构更灵活,没有固定的数据类…

前端调用后端编写的导出excel表格接口

前提: 我在前人将excel工具封装好的基础上,实现前端导出后端编写的excel表格接口,出现过很多问题。 先看前人的代码: 前端 handleExport() {const params Object.assign({}, this.queryParams.value)this.download(/system/a/fe…

ubuntu多用户环境dockerbug,卸载重装docker流程

之前不小心误操作删除重装docker,结果删除没成功,更没法重装,每次apt install都会报一个docker错误,虽然不影响软件的常规安装~但是现在还是需要装一个完整docker,还是选择删除一下,重点是关闭服…

数据分析——数据预处理和数据管道构建

目标:对于拿到的一个任意数据集,编写类似数据加载程序,以适应深度学习的研究。 框架: 针对不同的时间序列数据集,可以总结如下关键步骤,以编写类似上述代码的深度学习数据处理流程: 1. **了解…

十一.MyBatis的缓存

11.1缓存介绍 为什么使用缓存? 使用缓存的主要原因是为了提高应用程序的性能和响应速度。缓存可以存储经常访问的数据或计算结果,从而避免重复进行相同的计算或查询数据库等耗时的操作。通过使用缓存,你可以减少对原始数据源的访问次数&…

Springboot整合MVC进阶篇

一、概述 1.1SpringBoot整合SpringMVC配置 SpringBoot对SpringMVC的配置主要包括以下几个方面: 自动配置:SpringBoot会自动配置一个嵌入式的Servlet容器(如Tomcat),并为我们提供默认的SpringMVC配置。这样我们无需手动…

电脑显卡驱动停止响应该怎么办?为什么会出现这种情况

显卡驱动停止响应的原因 当你电脑突然弹框说显卡驱动停止响应,你知道是出现什么问题了吗,下面我们为大家总结了有可能造成显卡驱动停止响应的原因。1. 过热:显卡在长时间高负载下可能会过热,导致驱动停止响应。过高的温度可能…

RM3100 stm32驱动(硬件i2c)

目录 RM3100接线HAL库I2C函数HAL_I2C_Mem_ReadHAL_I2C_Mem_WriteHAL_I2C_Master_Transmit / HAL_I2C_Master_Receive例子 HSHAKE寄存器 cubemx配置RM3100寄存器驱动最终效果 RM3100接线 原理图 SA0 SA1接地,此时i2c设备地址为0100000,即0x20 如果SA0接…

PDF编辑工具--Acrobat Pro DC 2023中文

Acrobat Pro DC 2023是一款功能强大的PDF编辑和管理软件,它可以帮助用户在创建、编辑、转换和共享PDF文档方面达到前所未有的高度。这款软件提供了丰富的编辑功能,使用户能够轻松添加注释、高亮、下划线、插入文本等,自由地编辑PDF文档。除了…

django之drf框架(两个视图基类、5个扩展视图类、9个视图子类)

两个视图基类 APIView和GenericAPIView drf提供的最顶层的父类就是APIView,以后所有的类都继承自他 GenericAPIView继承自APIView,他里面封装了一些工能 基于APIViewModelSerializerResposne写5个接口 子路由:app01>>>urls.py …

关于表格太大了jupyter无法单次处理的问题

记录下自己的心路历程…耗时耗精力 我用的数据库单个表格就很大,一个表格有30多G,jupyter无法处理这么大的表格,会直接把电脑的进程全部结束掉,结束掉要是能运行成功倒也行啊,然鹅…给我报错说处理不了,罢工…

关于解决微服务A调用微服务B的接口获取不到数据

前提: 1、首先,你得确保写的不同微服务之间调用接口时没有任何问题的,可以参考我上一篇文章; 2、其次,你需要具备怎么去调试,怎么去定位问题。 具备以上两点其实问题就迎刃而解了。先来看看我的问题吧 问题…

arcpy获取矢量坐标系

代码: shppath "矢量路径" shpdescribe arcpy.Describe(shppath) print(shpdescribe.spatialReference.name) 结果:

ROS学习记录:如何在Github上寻找并安装软件包

一、打开网页输入www.github.com 二、进入github界面 三、打开一个终端,输入mkdir catkin_ws1建立一个工作空间 四、使用cd catkin_ws1进入工作空间 五、使用mkdir src创建一个子目录src就是source,原始资料的意思,指的就是程序源代码这类资源材料&#…

layui表格中预览视频和图片

全代码 <!DOCTYPE html> <html><head><title>Layui&#xff1a;数据表格table中预览图片、视频</title><meta charset"utf-8"/><link rel"stylesheet" href"../dist/css/layui.css"><style>&l…

多维时序 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多变量时间序列预测

多维时序 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多变量时间序列预测 目录 多维时序 | MATLAB实现SSA-BiLSTM麻雀算法优化双向长短期记忆神经网络多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现SSA-BiLSTM麻雀算法优化…

string类的函数讲解

标准库中的string类 首先关于string类的了解&#xff0c;我先给出官方的string类的讲解&#xff0c;以便于大家的学习&#xff1a;链接: http://www.cplusplus.com/reference/string/string/?kwstring 这个网站是C官方网站&#xff0c;里面对于各个关键字和库函数的讲解都是很…

Kubernetes (四) 资源清单及yaml文件详解

一. 资源清单 二. 编写yaml文件及内容详解 常用命令 …