K-近邻算法的 sklearn 实现

  1. 实验目的与要求
    1. 掌握基于 K-近邻分类算法的编程方法
    2. 通过编程理解 K-近邻分类算法和该算法的基本步骤

  2. 实验器材
    1. 硬件:PC 机(参与实验的学生每人一台)
    2. 软件环境:Python3.7 + Pycharm

  3. 实验内容
    1. 使用 sklearn 库中的 neighbors 模块实现 K-近邻算法,并对二手房样本所
      属类别进行预测,程序流程为:
      (1) 导入 sklearn 库中的 K-近邻算法模块(KNeighborsClassifier),数据集分割模块(train_test_split)以及机器学习准确率评估模块(metrics)
      (2) 读取数据,并分割成特征属性集和类别集
      (3) 将数据集分割成训练集和测试集
      (4) 构建模型
      (5) 利用循环语句,k 值取 1-8 分别训练模型以确定最优 k 值
      (6) 使用最优 k 值训练模型并对新样本[7,27]和[2,4]的类别进行预测
      (7) 使用测试集对模型进行测试
      (8) 预测新样本类别
      (9) 绘制分类边界图

  4. 数据集下载
    本实验的数据集可以点击此处去下载

  5. 代码实现
# coding = utf-8
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics  #引入机器学习的准确率评估模
from sklearn.model_selection import train_test_split  #数据分割模块
from sklearn.model_selection import cross_val_score  #交叉验证模块
# 导入数据
X1,y1=[],[]
fr = open('./knn.txt')
for line in fr.readlines():
    lineArr = line.strip().split()
    X1.append([int(lineArr[0]),int(lineArr[1])])
    y1.append(int(lineArr[2]))
X=np.array(X1)  #转换成 NumPy 数组,X 是特征属性集
y=np.array(y1)  #y 是类别标签集
X_train,X_test,Y_train,Y_test=train_test_split(X,y,test_size=0.16)
# 测试准确率
k_range = range(1, 9)
k_error = []  #保存预测错误率
for k in k_range:  #循环,k 取值为 1~8,查看 KNN 分类的预测准确率
    knn = KNeighborsClassifier(n_neighbors=k)
    scores = cross_val_score(knn, X, y, cv=3, scoring='accuracy')
    #cv 参数决定数据集划分比例,这里是按照 5:1 划分训练集和测试集
    k_error.append(1 - scores.mean())  #把每次的错误率添加到数组中
k_error.pop(0)
k_min = min(k_error)
k = k_error.index(k_min)
# 定义模型并训练
knn=KNeighborsClassifier(k + 2)
knn.fit(X,y)
KNeighborsClassifier(n_neighbors=3)
# 使用测试集对分类模型进行测试
y_pred=knn.predict(X_test)
print(knn.score(X_test,Y_test))  #输出整体预测结果的准确率
#输出准确率的方法 2
print(metrics.accuracy_score(y_true=Y_test,y_pred=y_pred))
#输出混淆矩阵,如果为对角矩阵,则表示预测结果是正确的,准确度越大
print(metrics.confusion_matrix(y_true=Y_test,y_pred=y_pred)) 
#输出更详细的分类测试报告
from sklearn.metrics import classification_report
target_names = ['labels_1','labels_2','labels_3']
print(classification_report(Y_test,y_pred))
1.0
1.0
[[2]]
              precision    recall  f1-score   support

           2       1.00      1.00      1.00         2

    accuracy                           1.00         2
   macro avg       1.00      1.00      1.00         2
weighted avg       1.00      1.00      1.00         2
# 预测新样本的类别
label=knn.predict([[7,27],[2,4]])
print(label)  #输出[2 1],表示新样本分别属于 2 和 1 类
[2 1]
# 绘制分类程序的界面图
import matplotlib as mpl
N, M = 90, 90  #网格采样点的个数,采样点越多,分类界面图越精细
t1 = np.linspace(0, 25, N)  #生成采样点的横坐标值
t2 = np.linspace(0,12, M)  #生成采样点的纵坐标值
x1, x2 = np.meshgrid(t1, t2)  #生成网格采样点 
x_show = np.stack((x1.flat, x2.flat), axis=1)  #将采样点作为测试点
y_show_hat = knn.predict(x_show)  #预测采样点的值
y_show_hat = y_show_hat.reshape(x1.shape)  #使之与输入的形状相同 
cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
plt.pcolormesh(x1, x2, y_show_hat, cmap=cm_light,alpha=0.3)  #预测值的显示
<matplotlib.collections.QuadMesh at 0x3e6b6e10>

在这里插入图片描述

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

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

相关文章

C++深度解析教程笔记3

C深度解析教程笔记3 第5课 - 引用的本质分析实验-const引用实验-引用的本质实验-引用所占空间大小vs2010反汇编 实验-局部变量的引用小结 第6课 - 内联函数分析实验-内联函数设置允许编译器内联 实验-forceinline小结 本文学习自狄泰软件学院 唐佐林老师的 C深度解析教程&#…

做私域不止是积累流量,生态也很重要!

如今&#xff0c;私域流水占比已经逼近整个零售市场的30%&#xff0c;达到4万亿规模&#xff0c;百度、阿里、腾讯等头部玩家也都在加速布局&#xff0c;私域运营&#xff0c;已不再是一个单一的商业模式或者运营手段&#xff0c;而是逐渐构成一种可持续的行业生态。 一、什么…

el-form 表单设置某个参数非必填验证

html <el-form ref"form" :rules"rules"><el-form-item prop"tiktokEmail" label"邮箱" ><el-input v-model"form.tiktokEmail" placeholder"邮箱" ></el-input></el-form-item&…

Docker-容器的前世今生

文章目录 Docker为什么产生&#xff1f;硬件虚拟化硬件虚拟化解决的问题硬件虚拟化定义硬件虚拟化技术虚拟机的优点虚拟机的缺点 操作系统虚拟化即容器容器化解决的问题容器化定义容器化技术历史 容器和虚拟机对比 Docker的发展历史Docker架构客户端服务端仓库Registry Docker重…

民航电子数据库:mysql与cae(insert语法差异)

目录 示例1、cae插入数据时不支持value关键字&#xff0c;只能使用values2、insert时&#xff0c;就算是自增主键&#xff0c;只要新增时包含了主键&#xff0c;该主键就必须有值&#xff0c;否则会报错&#xff1a;字段xxx不能取空值 对接民航电子数据库&#xff0c;本篇记录i…

循环购模式:引领消费新潮流,共创商业新生态

大家好&#xff0c;我是吴军&#xff0c;今天我想和大家分享一个独特而富有吸引力的商业模式——循环购模式。这是一种融合了消费返利与积分机制的新型购物体验&#xff0c;它为消费者和商家带来了前所未有的互动机会。 在循环购模式的运作下&#xff0c;消费者的每次购物都伴随…

OSPF大作业

一&#xff0c;拓扑 二&#xff0c;要求 1&#xff0c;r4为ISP上只配ip&#xff0c;r3与其他设备之间只使用公有IP 2&#xff0c;r3-r5/6/7为MGRE环境&#xff0c;r3为中心 3&#xff0c;整个OSPF的ip地址基于172.16.0.0/16划分 所以设备都可以访问r4的环回 4减少LSA的数量加快…

【转载】C++代码中将函数返回类型后置有啥好处吗

C代码中将函数返回类型后置有啥好处吗&#xff1f; 内容如下&#xff1a; C代码中将函数返回类型后置有啥好处吗&#xff1f; 这种语法是 C11 新增的&#xff0c;学名叫 trailing return type[1]。翻译过来是后置返回类型&#xff0c;trailing 是后面的、拖尾的意思。书写 int …

质量管理,怎能不知道SPC?

SPC&#xff08;统计过程控制&#xff09;是质量管理的一个重要组成部分&#xff0c;它可以帮助企业更好地控制生产过程、提高产品质量、降低生产成本、增强企业的竞争力。 SPC是一种应用统计技术对过程中的各个阶段进行评估和监控&#xff0c;建立并保持过程处于可接受的并且稳…

深入理解Linux调试工具eBPF和strace、内存泄漏处理、Kubernetes容器调试以及C++协程的崩溃信息收集

在软件开发领域&#xff0c;无论是初级开发者还是资深工程师&#xff0c;都需要面对复杂的调试工作。本文将介绍几个重要的调试工具和技术&#xff0c;并提供实际调试方法的指导&#xff0c;包括Linux环境下的eBPF和strace&#xff0c;内存泄漏问题的处理&#xff0c;Kubernete…

020Node.js的FS模块使用fs.mkdir创建目录

Node.js的FS模块使用fs.mkdir创建目录 //fs.mkdir 创建目录 /*path 将创建的目录路径mode 目录权限&#xff08;读写权限&#xff09;&#xff0c;默认777callback 回调&#xff0c;传递异常参数err*/ const fsrequire(fs);fs.mkdir(./css,(err)>{if(err){console.log(err)…

时间序列模型(含python程序实现)

常用按时间顺序排列的一组随机变量来表示一个随机事件的时间序列&#xff0c;简记为 用表示该随机序列的n个有序观察值&#xff0c;称之为序列长度为n的观察值序列。 常用的时间序列模型 时间序列的预处理 拿到一个观察值序列后&#xff0c;首先要对它的纯随机性和平稳性进行…

PC-3000 Mobile Pro: 智能手机及平板设备数据提取及取证工具

天津鸿萌科贸发展有限公司从事数据安全业务20余年&#xff0c;在数据恢复、数据取证、数据备份等领域有丰富的案例经验、前沿专业技术及良好的行业口碑。同时&#xff0c;公司面向取证机构及数据恢复公司&#xff0c;提供数据恢复实验室建设方案&#xff0c;包含数据恢复硬件设…

书生·浦语 大模型(学习笔记-9)大模型微调的相关概念 预训练 与 微调 全量微调FFT 与 PEFT的区别

目录 一、什么是大模型微调 二、指令微调 三、微调的目的 三、微调的方式 四、微调的步骤 五、微调数据准备 六、微调的数据质量 一、什么是大模型微调 预训练和微调的区别&#xff0c;这个很关键 二、指令微调 这个地方主要是微调的角度不同&#xff0c;简单理解&#…

linux jmeter ant下载并安装【2024-亲测】

环境 centos7 一、下载jmeter 在这里插入代码片wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz --no-check-certificate解压 tar -zxvf apache-jmeter-5.6.3.tgz复制到安装目录、设置环境变量 vim /etc/profile添加环境变量&#xff0c;路径改成…

YOLOv8: 快速而准确的对象检测

YOLOv8: 快速而准确的对象检测 背景 对象检测是计算机视觉中的一个关键任务,它可以帮助我们在图像或视频中识别和定位感兴趣的物体。其中,YOLO(You Only Look Once)系列是一类非常出色的实时对象检测算法,以其快速和准确的特点而闻名。YOLOv8是YOLO系列的最新版本,由Ultralyti…

【ESP32S3】使用 Flash 下载工具完成 Flash 加密功能

此篇文档记录通过 Flash 下载工具 完成 Flash 加密 功能的实现&#xff0c;此文档不启用 Flash 加密方案的 NVS 加密。 Flash 加密启动的验证代码&#xff1a;esp-idf/components/bootloader_support/src/flash_encrypt.c Flash 加密测试例程&#xff1a;esp-idf/examples/sec…

【yolov8目标检测部署】TensorRT int8量化

原作者github&#xff1a;https://github.com/xuanandsix/Tensorrt-int8-quantization-pipline/tree/main 改进&#xff1a; 源代码支持的TensorRT版本为7.许多属性已经弃用&#xff1b; 在原有的代码上将支持的TensorRT版本从7改到8. &#xff01;&#xff01;不知道如何安装T…

酷得电子机器狗玩具 MCU方案介绍

机器狗是一种多功能、互动性强的机器人&#xff0c;适合家庭和学校环境。它不仅可以陪伴孩子们玩耍&#xff0c;还能帮助他们学习和成长。功能如下&#xff1a; 关节可动&#xff1a;机器狗的关节设计灵活&#xff0c;可以执行各种动作&#xff0c;如“坐下”、“俯卧撑”、“…

【Ant-Desgin-React 步骤条】步骤条配合组件使用

步骤条配合组件使用 基础使用多分组进度 基础使用 /* eslint-disable no-unused-vars */ import React, { useState } from react import { Button, message, Steps, theme } from antd import After from ./components/after import Now from ./components/now const steps …
最新文章