上机4KNN实验4

目录

  • 编程实现 kNN 算法。
    • 一、步骤
    • 二、实现代码
    • 三、总结知识
      • 1、切片
      • 2、iloc方法
      • 3、归一化
      • 4、MinMaxScale()
      • 5、划分测试集、训练集
      • 6、KNN算法
  • .py

编程实现 kNN 算法。

1、读取excel表格存放的Iris数据集。该数据集有5列,其中前4列是条件属性,最后1列是类别(已经表示为数值)。
2、对数据集进行按列归一化,使每列的取值范围是[0,1].
3、从数据集中随机选取70%作为训练数据集,剩下30%用来测试,k=5.
4、输出测试数据的分类正确率,即正确分类的测试样本数除以总的测试样本数。

一、步骤

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

二、实现代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import accuracy_score
# 读取excal表格数据
iris_data=pd.read_csv('Iris.csv')

在这里插入图片描述

# 获取条件属性和类别
x=iris_data.iloc[:,:-1] #截取前4列属性
y=iris_data.iloc[:,-1] #截取最后一列类别

在这里插入图片描述
在这里插入图片描述

# 数据归一化
scaler=MinMaxScaler()
x_normalized=scaler.fit_transform(x)

在这里插入图片描述

# 划分测试集30%、训练集70%
x_train,x_text,y_train,y_text=train_test_split(x_normalized,y,test_size=0.3,random_state=42)

knn_classifier=KNeighborsClassifier(n_neighbors=5)# 5个最近相邻作为参考
knn_classifier.fit(x_train,y_train)# 训练分类器

y_pred=knn_classifier.predict(x_text)# 训练好的分类剩下的测试集
accuracy=accuracy_score(y_pred,y_text)# 比较测试精度

在这里插入图片描述

三、总结知识

1、切片

语法:

start:stop:step

start:起始索引
stop:终止索引
step:步长
举例

a=[1,2,3,4,5,6,7,8,9,10]
a[2:5:]

在这里插入图片描述

a[::-1]

在这里插入图片描述

a[-1::]

在这里插入图片描述

a[:-1:]

在这里插入图片描述

a[-5:-1:]

在这里插入图片描述

2、iloc方法

iloc是Pandas中按位置(整数位置)索引数据的方法

DataFrame.iloc[索引行,索引列]

其中索引行,索引列可以是单个整数、整数列表/数组、切片对象

iloc[:,:-1] #取前四列
iloc[:,-1] #取最后一列

3、归一化

什么是归一化
归一化是一种数据处理方法,它将数据转换为一定范围内的数值。这个范围可以是任意的,但是最常用的范围是0到1或-1到1之间。归一化的作用是,使得不同数据在参与运算和比较时更加公平和准确,从而提高模型的精度和可靠性。
为什么要归一化
在机器学习中,由于不同的特征在量级和范围上的不同,使得它们的贡献不同。在一些模型中,例如kNN、KMeans等,特征之间的距离就成了模型的核心,而这些模型在计算距离时需要保证特征之间具有同样的权重,这就需要对特征进行归一化。对于另一些模型如神经网络,特征之间的权重影响了模型的收敛速度和稳定性,进行归一化可以加快收敛速度和降低过拟合的情况。

4、MinMaxScale()

MinMaxScaler 是 scikit-learn 库中的一个类,用于进行最小-最大缩放(归一化)操作。归一化是一种将数据缩放到指定范围的方法,通常是 [0, 1]。这有助于确保不同特征之间的数值差异不会对机器学习模型产生不良影响。
具体来说,MinMaxScaler 将每个特征缩放到给定的最小值和最大值之间。其主要方法是使用以下公式
在这里插入图片描述

from sklearn.preprocessing import MinMaxScaler

# 创建MinMaxScaler对象
scaler = MinMaxScaler()

# 对数据进行归一化
X_normalized = scaler.fit_transform(X)

fit_transform 方法将计算训练集的最小值和最大值,并使用上述公式对训练集进行归一化

5、划分测试集、训练集

X_train, X_test, y_train, y_test = train_test_split(X_normalized, y, test_size=0.3, random_state=42)
X_normalized: 归一化后的特征矩阵,即条件属性。
y: 目标(类别)列。
这行代码将数据集拆分为训练集和测试集,其中:

X_train: 训练集的特征矩阵。
X_test: 测试集的特征矩阵。
y_train: 训练集的目标(类别)。
y_test: 测试集的目标(类别)。

6、KNN算法

knn_classifier = KNeighborsClassifier(n_neighbors=5)

创建了一个 kNN 分类器对象。n_neighbors=5 表示选择最近的5个邻居作为参考来进行分类

knn_classifier.fit(X_train, y_train)

使用训练数据来拟合(训练)kNN 分类器。X_train 是训练集的特征矩阵,y_train 是训练集的目标(类别)列。通过这个过程,kNN 分类器学会了如何根据特征对数据进行分类

.py

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import accuracy_score

# 读取Excel表格数据用csv存储
iris_data = pd.read_csv('Iris.csv')

# 获取条件属性和类别
X = iris_data.iloc[:, :-1]  # 前4列是条件属性
y = iris_data.iloc[:, -1]   # 最后1列是类别

# 对数据进行按列归一化
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_normalized, y, test_size=0.3)

# 创建kNN分类器并进行训练
knn_classifier = KNeighborsClassifier(n_neighbors=5)
knn_classifier.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = knn_classifier.predict(X_test)

# 计算分类正确率
accuracy = accuracy_score(y_test, y_pred)
print(f"分类正确率: {accuracy}")

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

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

相关文章

[CISCN 2023 西南]do_you_like_read

打开题目,大概是一个购买书籍的网站,有登陆的功能 我们可以先分析下给的源码 在admin.php中会验证是否为admin用户 我们尝试爆破下密码,爆出来为admin123 登陆后发现存在文件上传漏洞 我们分析下源码 存在文件后缀检测,如果为p…

交换机工作原理

交换机工作原理 交换机功能:端口扩展(默认同一网络),如果只是两台设备进行通信,可以直接连接这两台设备而不用交换机,但如果设备较多,设备没有那么多接口,那么这个时候就需要交换机…

三分钟学完Git版本控制常用指令

基本指令 git clone [url] 克隆远程仓库到本地 git clone https://gitee.com/mayun2023a/mprpc.git2.git checkout -b xxx 切换至新分支xxx(相当于复制了remote的仓库到本地的xxx分支上) 3.修改或者添加本地代码(部署在硬盘的源文件上) 4.g…

Django配置文件,request,链接mysql方法,Orm简介

三板斧问题(views.py) HttpResponse # 返回的是字符串render # 渲染一个HTML静态文件,模板文件redirect # 重定向的 在视图文件中得视图函数必须要接收一个形参request,并且,视图函数也要有返回值&#xff…

着实不错的自适应大邻域搜索算法ALNS

文章目录 引言演进路线邻域搜索,NS变邻域搜素,VDNS大邻域搜索,LNS自适应大邻域搜索,ALNS 代码实现34个国内城市的TSP测试集XQF131 相关阅读 引言 之前介绍的差分进化算法和蚁群算法分别适用于求解连续优化问题和组合优化问题&…

【第五章】软件设计师 之 系统安全分析与设计

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 1、信息系统安全属性 2、对称加密与非对称加…

Redis五种数据类型及命令操作(二)

🎈个人公众号:🎈 :✨✨✨ 可为编程✨ 🍟🍟 🔑个人信条:🔑 知足知不足 有为有不为 为与不为皆为可为🌵 🍉本篇简介:🍉 本篇记录Redis五种数据类型及命令操作,如…

C语言--前置++与后置++

:自增1 注意区分前置和后置 前置:先,后使用 后置:先使用,后 --:自减1 注意区分前置和后置 前置:先-- ,后使用 后置,先使用,后-- int main() {int i 10;//int j i;//前置,先…

网络编程学习笔记

参考: 套接字通信部分 《TCP/IP 网络编程》以及《TCP/IP网络编程》学习笔记 socket 编程 1. 字节序 字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序,也就是说对于单字符来说是没有字节序问题的&…

如何使用PHPStudy本地快速搭建网站并实现远程访问

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

【第三章】软件设计师 之 数据库系统

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 1、数据库系统前言 2、三级模式 - 两级映射…

选购护眼台灯,全网都没有说清一个关键点!——照度均匀度

网上关于护眼台灯的选购推荐帖子多如牛毛,好台灯选购要点大体可归纳为以下五点: RG0无蓝光危害(豁免级蓝光危害,RG1为低蓝光危害、RG2、RG3分别为中度和高危危害) 无眩光,无可视频闪(不刺眼…

matlab 多自由度的车辆垂向振动模型 车辆平稳性研究

1、内容简介 略 17-可以交流、咨询、答疑 多自由度的车辆垂向振动模型 多自由度的车辆垂向振动模型,包含四分之一车体模型、半车模型和整车模型 垂向振动模型、四分之一车体模型、半车模型和整车模型 2、内容说明 略 3、仿真分析 略 4、参考论文 略 链接&…

内存映射:PS和PL DDR3的一些区别

之前写的一些资料: PS与PL互联与SCU以及PG082-CSDN博客 参考别人的资料: PL读写PS端DDR的设计_pl读写ps端ddr数据-CSDN博客 xilinx sdk、vitis查看地址_vitis如何查看microblazed地址_yang_wei_bk的博客-CSDN博客 可见,PS端的DDR3需要从…

git push origin masterEverything up-to-date

按住这个看一下很简单的问题,我在网上看了很多就是没找到能用的,最后找到了这个看起来写的很简单的一个文章,但他写的真的有用。 出现的问题 解决步骤

JavaScript逆向之Hook技术

Hook技术: 背景: ​ 在js逆向的过程种,当我们遇到加密参数,可以使用关键字全局搜素,跟栈,还有一种就是hook技术。跟栈就是比较麻烦,需要我们一个个找,hook技术就比较厉害了&#x…

【Linux】Kali(WSL)基本操作与网络安全入门

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍WSL安装Kali及基本操作。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路…

信捷 XDH 输出点流水灯

本文以XDH 为例,实现输出点流水灯,测试输出点是否正常。 用到了FOR NEXT循环和偏移量实现。 程序下载链接如下: https://download.csdn.net/download/weixin_39926429/88527971

PyCharm因安装了illuminated Cloud插件导致加载项目失败

打开Pycharm时会有弹窗提示: The license for Illuminated Cloud is invalid or has expired. All Illuminated Cloud features will be disabled. 这个弹窗会导致你加载项目一直失败,close project 也关不掉,我都是用任务管理器杀死进程的…

详解Redis持久化(上篇——RDB持久化)

Redis持久化的作用和意义 Redis 持久化是一种机制,用于将内存中的数据写入磁盘,以保证数据在服务器重启时不会丢失。持久化是为了解决内存数据库(如 Redis)在服务器关闭后,数据丢失的问题。 Redis 持久化的主要作用和…