当前位置: 首页 > news >正文

上机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}")

相关文章:

上机4KNN实验4

目录 编程实现 kNN 算法。一、步骤二、实现代码三、总结知识1、切片2、iloc方法3、归一化4、MinMaxScale()5、划分测试集、训练集6、KNN算法 .py 编程实现 kNN 算法。 1、读取excel表格存放的Iris数据集。该数据集有5列,其中前4列是条件属性…...

产品经理如何保持核心竞争力?学会这些方法

如今,内卷的风已经吹到各行各业,产品经理也不例外。想要在内卷日益严重的环境中生存下来,产品经理就需要学会保持自己的核心竞争力。那么,产品经理要如何才能在内卷时代持续保持自己的核心竞争力呢? 1、建立快速学习的…...

终知人生苦短,何必自我为难

不是少年比他当年的那个目标更强,也不是他完全丧失了冲关过坎的勇气,而是他知道了自己能力的边界和极限,迫切需要外界的帮助。 不再自我设限,不再自我挑战,而是想用最简便、最快捷、最省精力的路径,解决掉困…...

C++阶段复习‘‘‘‘总结?【4w字。。。】

文章目录 前言类和对象C类定义和对象定义类成员函数C 类访问修饰符公有(public)成员私有(private)成员受保护(protected)成员 继承中的特点类的构造函数和析构函数 友元函数内联函数this指针指向类的指针类…...

嵌入式行业算青春饭吗?

今日话题,嵌入式行业算青春饭吗?嵌入式行业的技术要求确实非常广泛,需要深厚的知识广度和深度。这意味着入行门槛较高,我们需要了解不仅是软件和硬件,还要熟悉底层接口和硬件信号的处理方式,了解数据在计算…...

【C++】非类型模板参数 | array容器 | 模板特化 | 模板为什么不能分离编译

目录 一、非类型模板参数 二、array容器 三、模板特化 为什么要对模板进行特化 函数模板特化 补充一个问题 类模板特化 全特化与偏特化 全特化 偏特化 四、模板为什么不能分离编译 为什么 怎么办 五、总结模板的优缺点 一、非类型模板参数 模板参数分两类&#x…...

解决 Django 开发中的环境配置问题:Windows 系统下的实战指南20231113

简介: 在本文中,我想分享一下我最近在 Windows 环境下进行 Django 开发时遇到的一系列环境配置问题,以及我是如何一步步解决这些问题的。我的目标是为那些可能遇到类似困难的 Django 开发者提供一些指导和帮助。 问题描述: 最近…...

C语言仅凭自学能到什么高度?

今日话题,C语言仅凭自学能到什么高度?学习C语言的决定我确实非常推荐,毕竟它是编程领域的“通用工具”,初学者可以尝试并在发现编程的乐趣后制定长期学习计划。至于能够达到何种高度,这实在无法准确回答。即使是经验丰…...

Python爬虫过程中DNS解析错误解决策略

在Python爬虫开发中,经常会遇到DNS解析错误,这是一个常见且也令人头疼的问题。DNS解析错误可能会导致爬虫失败,但幸运的是,我们可以采取一些策略来处理这些错误,确保爬虫能够正常运行。本文将介绍什么是DNS解析错误&am…...

vue devtools 调试工具安装配置

方式一:在谷歌商店下载安装 打开Google Chrome浏览器 --> 右上角三个点图标 --> 更多工具 --> 扩展程序 --> 在 Chrome 应用商店中查找扩展程序和主题背景 方式二:下载插件安装包自行配置 下载devtools安装包 使用git下载,内含…...

kube-bench-CIS基准的自动化扫描工具学习

仓库地址:GitHub - aquasecurity/kube-bench: Checks whether Kubernetes is deployed according to security best practices as defined in the CIS Kubernetes Benchmark kube-bench,检查 Kubernetes 是否根据 CIS Kubernetes 基准中定义的安全最佳实践部署,下载…...

springboot(ssm 拍卖行系统 在线拍卖平台 Java(codeLW)

springboot(ssm 拍卖行系统 在线拍卖平台 Java(code&LW) 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0&#xff09…...

go语言rpc初体验

go语言rpc初体验 package mainimport ("net""net/rpc" )// 注册一个接口进来 type HelloService struct { }func (s *HelloService) Hello(request string, replay *string) error {//返回值是通过修改replay的值*replay "hello " requestret…...

嵌入式LINUX——环境搭建 windows、虚拟机、开发板 互ping

摘要: 本文包含,如果设置linux开发板和虚拟机、windows 互ping成功 以及设置过程中出现的虚拟机、开发板查询不到eth0 windows ping开发板出项丢包等问题的解决方式。 windows端设置 windows端插入USB转网卡 打开windows桌面下右下角的网络标识 打开“更改适配器选项”…...

评论:AlexNet和CaffeNet有何区别?

一、说明 在这个故事中,我们回顾了AlexNet和CaffeNet。AlexNet 是2012 年ILSVRC(ImageNet 大规模视觉识别竞赛)的获胜者,这是一项图像分类竞赛。而CaffeNet是AlexNet的单GPU版,因此,我们平时在普通电脑的Al…...

什么是 IT 资产管理(ITAM),以及它如何简化业务

IT 资产管理对任何企业来说都是一项艰巨的任务,但使用适当的工具可以简化这项任务,例如,IT 资产管理软件可以为简化软件和硬件的管理提供巨大的优势。 什么是 IT 资产管理 IT 资产管理(ITAM)是一组业务实践&#xff…...

git快速上传代码

① git init; 初始化git,之后在文件夹里有.git文件,这个需要 勾选才能查看。 ② git remote add test myFisrtTest: 测试专用 这里的test是自定义的,myFisrtTest: 测试专用 是远程仓库 ③ git branch -a 这里是查看分支 ④ …...

stable diffusion comfyui的api使用教程

一、为什么要使用comfyui的api?对比webui的api,它有什么好处? 1、自带队列 2、支持websocket 3、无需关心插件是否有开放api接口,只要插件在浏览器中可以正常使用,接口就一定可以使用 4、开发人员只需关心绘图流程的搭建 5、切换…...

Swift中的strong, weak, unowned

在 Swift 中,strong, weak, 和 unowned 关键词用于管理内存中对象的引用。这些关键词与 Swift 的自动引用计数(ARC)系统紧密相关,用于防止内存泄漏和强引用循环。下面是对这三种引用类型的简要说明: 1. Strong 默认行…...

Linux命令——ssh

Linux命令——ssh 背景 SSH(Secure Shell 的缩写)是一种网络协议,用于加密两台计算机之间的通信,并且支持各种身份验证机制。 历史上,网络主机之间的通信是不加密的,属于明文通信。这使得通信很不安全&a…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...