PYTHON基础:K最邻近算法

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机器学习–段小手著

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RK3568平台开发系列讲解(Linux系统篇)GPIO调试手段

🚀返回专栏总目录 文章目录 一、/sys/kernel/debug/gpio目录二、/sys/kernel/debug/pinctrl 目录沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 GPIO调试手段。 一、/sys/kernel/debug/gpio目录 debugfs 是 Linux 内核提供的一个调试文件系统,可以用于…

Navicat删除连接报错:service in use cannot be deleted的解决方法

我在删除连接时遇到了这个报错,内容如图。下面我介绍两种解决方法,非常简单。 第一种 右键点击想要删除的连接,先选择“关闭连接”。再选择“删除连接” 第二种 如果第一种方法无效,直接关闭Navicat软件,重新打开。然后…

javaweb--实验十 --期末复盘

实验十 JDBC连接MySQL 本次实验没有代码补全,以下都是完整过程,详细关注连接过程的问题 一、实验目的: 1、掌握JDBC连接数据库的一般操作。 2、理解JavaBean的基本作用。 3、理解分层设计的思想。 二、 实验内容: 实现学生信…

广州华锐互动VRAR:VR煤矿安全警示教育系统提供真实生动的场景体验

随着科技的不断发展,虚拟现实(VR)技术已经逐渐渗透到各个领域,为人们的生活带来了诸多便利。在煤矿行业,VR技术的应用也日益受到关注。广州华锐互动开发的VR煤矿安全警示教育系统,旨在通过虚拟现实技术&…

WordPress主题大前端DUX v8.3源码下载

DUX主题8.3版本更新内容: 新增:Cloudflare Turnstile 免费验证功能 新增:子菜单页面模版,支持多级页面 新增:手机端文章内表格自动出现横向滚动条,可集体或单独设置滚动宽度 新增:标签云页面模版…

drf知识-06

视图集 #1 ModelViewSet: 视图类:GenericAPIView 映射:list create retrieve update destroy #2 ViewSetMixin类: 只要继承它,路由写法变了 分析:ViewSetMixin 不是视图类,支…

FTP不同方式使用与搭建与端口号常识了解

目录 一、FTP介绍 二、winServer2012搭建ftp服务器 在虚拟机搭建具体步骤 2.1、新建组: 2.2、新建用户名 2.3、把用户名与组绑定 2.4、安装ftp 2.5、配置ftp服务器 2.6、给文件夹调整权限 2.7、测试 a、服务器本机测试 b、外部机器测试 C、借助工具Mobal…

低代码开发:数字化转型的引擎

引言 在当今数字化时代,组织面临着不断变化的市场需求和技术挑战。数字化转型已成为维持竞争力的关键,而低代码开发正在崭露头角,成为加速创新和数字化转型的有力工具。本文将深入探讨低代码开发的核心概念、优势和应用,以揭示它…

数据库基础面试第四弹

1. Redis的数据结构有哪些 1. 字符串(String): 字符串是Redis最基本的数据结构。它可以存储任意类型的数据,包括文本、整数或二进制数据。字符串类型的值最大可以达到512MB。 1 2 3 4 SET name "John" GET name 将字…

云原生Kubernetes:K8S集群版本升级(v1.22.14 - v1.23.14)

目录 一、理论 1.K8S集群升级 2.环境 3.升级集群(v1.23.14) 4.验证集群(v1.23.14) 二、实验 1. 环境 2.升级集群(v1.23.14) 2.验证集群(v1.23.14) 一、理论 1.K8S集群升级 …

【Python_09】Python基础语法(数据容器之列表详解)

文章目录 概述Python中的数据容器列表1.1 定义列表1.2列表取值与修改1.3 列表遍历1.3.1 使用for循环遍历列表1.3.2 使用while循环遍历1.3.3 使用enumerate()函数获取索引和元素 1.4 列表常用方法 概述 数据容器是用来存储和组织数据的数据结构和对象。可以以不同的方式存储和操…

摇杆控制人物移动

摇杆控制人物移动 一、UI搭建二、3d模型搭建三、脚本JoyStickBar.csPlayerController.cs 工程在我资源里名字叫Joystickbar.unitypackage [连接](https://download.csdn.net/download/qq_42194657/12043019?spm1001.2014.3001.5503) 一、UI搭建 JoyStickBar是图片背景 JoySt…

功能问题:如何在H5中实现拍照功能?3步搞定!

大家好,我是大澈! 本文约2100字,整篇阅读大约需要4分钟。 感谢关注微信公众号:“程序员大澈”,免费领取"面试礼包"一份,然后免费加入问答群,从此让解决问题的你不再孤单&#xff01…

python 面试题第一弹

1. 如何理解Python中的深浅拷贝 浅拷贝(Shallow Copy)创建一个新的对象,该对象的内容是原始对象的引用。这意味着新对象与原始对象共享相同的内存地址,因此对于可变对象来说,如果修改了其中一个对象,另一个…

odoo17核心概念view7——listview总体框架分析

这是view系列的第七篇文章,今天主要介绍我们最常用的list视图。 1、先看list_view,这是主文件 /** odoo-module */import { registry } from "web/core/registry"; import { RelationalModel } from "web/model/relational_model/relational_mode…

Spring中常见的Bean后处理器

Bean后处理器的作用:为Bean生命周期各个阶段提供扩展。接下来我们查看一个案例 public class TestBeanPostProcessor {public static void main(String[] args) {//该容器不存在任何Spring中的bean对象,是一个干净的容器,且提供了正常容器中…

运动轨迹仿真

重型运载火箭轨迹/总体参数一体化优化方法 硬核推导火箭运动方程,并用python仿真实现 rocket-simulation:MATLAB-火箭仿真软件 MatRockSim:Matlab 火箭飞行模拟器 【开源】飞鹰一号探空火箭——箭体设计、制造回顾与仿真对比 偏航角,滚动角&#xf…

基于双闭环PI的SMO无速度控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于双闭环PI的SMO无速度控制系统simulink建模与仿真,基于双闭环PI的SMO无速度控制系统主要由两个闭环组成:一个是电流环,另一个是速度环。…

2024深入评测CleanMyMac X4.14.6破解版新的功能

随着时间的推移,我们的Mac电脑往往会变得越来越慢,存储空间变得越来越紧张,这时候一个优秀的清理工具就显得尤为重要。作为一款备受好评的Mac清理工具,它能够为你的Mac带来全方位的清理和优化。在本文中,我们将深入评测…

中科驭数与宽睿科技达成战略合作,共筑超低时延软硬一体技术底座

近日,中科驭数(北京)科技有限公司(简称“中科驭数”)和上海宽睿信息科技有限责任公司(简称“宽睿科技”)完成战略合作协议签署。双方将结合各自在超低时延软硬件领域的深厚业务积累和技术产品优…