【机器学习】训练数据集和测试数据集的划分及KNN准确率测试

ops/2025/2/9 6:14:29/

训练数据集和测试数据集的划分

  • 一、摘要
  • 二、机器学习算法性能评估
  • 三、train test split的具体实现
  • 四、调用KNN算法进行准确率测试
  • 五、提升模型性能的策略思考

一、摘要

本博文围绕机器学习算法性能评估方法展开,重点介绍了训练数据集与测试数据集的分离(train test split)的重要性。内容详细说明了为何不能直接将全部原始数据作为训练集投入生产环境,而是需要通过分割部分数据作为测试集来评估模型性能。讲解了如何进行数据乱序和比例分配,并介绍了使用sklearn库进行train test split的示例。此外,还提到了在进行模型选择时,通过测试数据集的反馈来改进算法的重要性。最后,通过一个简单的knn分类器实例展示了如何应用train test split方法评估机器学习算法的性能。

二、机器学习算法性能评估

  1. 机器学习算法性能评估的重要性,通过train test split方法进行评估。
  2. train test split将原始数据分为训练数据集测试数据集,通常训练数据集占80%或70%。
  3. 使用测试数据集评估模型性能,通过比较模型预测与真实标签的匹配程度。
  4. 如果模型在测试数据集中表现不佳,则需要改进算法以获得更好的模型。

三、train test split的具体实现

  1. 对原始数据进行shuffle操作(本质上就是打乱),以确保训练数据集和测试数据集的代表性。
  2. 根据设定的比例(如70%训练,30%测试)从shuffle后的数据划分训练测试数据集
  3. 确保训练数据集和测试数据集中的样本对应关系不丢失关键于监督学习任务。
  4. train test split可能存在的问题,如数据分布的改变,需在后续章节中详细介绍。
  5. 代码实现:
    1. 在PyCharm中编写新建model_selection.py文件,整个PyCharm中的工程如下:
      在这里插入图片描述

      在model_selection.py文件中添加如下内容:

      import numpy as npdef train_test_split(X, y, test_ratio=0.2, seed=None):"""将输入的特征矩阵 X 和标签向量 y 按照指定的测试集比例 test_ratio 划分为训练集和测试集。Args:X (numpy.ndarray): 特征矩阵,形状为 (n_samples, n_features),表示输入的数据特征。y (numpy.ndarray): 标签向量,形状为 (n_samples,),表示每个样本对应的标签。test_ratio (float, optional): 测试集占总数据集的比例,取值范围为 [0.0, 1.0]。默认值为 0.2。seed (int, optional): 随机数种子,用于确保多次运行该函数时生成的随机结果一致。默认值为 None。Returns:tuple: 包含四个元素的元组,分别为:- X_train (numpy.ndarray): 训练集的特征矩阵。- y_train (numpy.ndarray): 训练集的标签向量。- X_test (numpy.ndarray): 测试集的特征矩阵。- y_test (numpy.ndarray): 测试集的标签向量。Raises:AssertionError: 如果 X 和 y 的样本数量不一致,或者 test_ratio 不在 [0.0, 1.0] 范围内,会抛出此异常。"""# 确保输入的特征矩阵 X 和标签向量 y 的样本数量一致assert X.shape[0] == y.shape[0], \"特征矩阵 X 的样本数量必须与标签向量 y 的样本数量相等。"# 确保测试集比例 test_ratio 在有效范围内assert 0.0 <= test_ratio <= 1.0, \"测试集比例 test_ratio 必须在 [0.0, 1.0] 范围内。"# 如果指定了随机数种子 seed,则设置 NumPy 的随机数生成器的种子,以保证结果的可重复性if seed:np.random.seed(seed)# 生成一个长度为样本数量的随机排列的索引数组,用于打乱样本顺序shuffle_indexes = np.random.permutation(len(X))# 计算测试集的样本数量test_size = int(len(X) * test_ratio)# 从打乱的索引数组中选取前 test_size 个索引作为测试集的索引test_indexes = shuffle_indexes[:test_size]# 从打乱的索引数组中选取剩余的索引作为训练集的索引train_indexes = shuffle_indexes[test_size:]# 根据训练集的索引从特征矩阵 X 和标签向量 y 中提取训练集数据X_train = X[train_indexes]y_train = y[train_indexes]# 根据测试集的索引从特征矩阵 X 和标签向量 y 中提取测试集数据X_test = X[test_indexes]y_test = y[test_indexes]# 返回划分好的训练集和测试集的特征矩阵与标签向量return X_train, y_train, X_test, y_test
      
    2. 在jupyter中引入sklearn中的datasets,并初始化特征矩阵和标签向量:

      import numpy as np
      import matplotlib.pyplot as plt
      from sklearn import datasets
      iris = datasets.load_iris() # 鸢尾花数据集X = iris.data   # 特征矩阵
      y = iris.target # 标签向量# X是一个150行 x 4 列的矩阵,即150个样本,每个样本有4个特征
      print(X.shape)  # 结果为:(150, 4)
      # y是对于X的特征向量,即标签
      print(y.shape) # 结果为:(150,)
      

      执行结果:
      在这里插入图片描述

    3. 导入PyCharm写好的工程到jupyter中,执行:

      import sys
      # 替换为你的 PyCharm 工程实际路径
      project_path = 'D:/PycharmProjects/pythonProject/'
      if project_path not in sys.path:sys.path.append(project_path)from model_selection import train_test_split
      X_train,y_train,X_test,y_test = train_test_split(X,y,test_ratio=0.2,seed=666)print(X_train.shape)
      print(y_train.shape)
      print(X_test.shape)
      print(y_test.shape)
      

      执行结果如下:
      在这里插入图片描述

四、调用KNN算法进行准确率测试

  1. 调用工程中的KNN.py中的KNNClassifier类进行测试:
    在这里插入图片描述

五、提升模型性能的策略思考

  1. 模型选择和调参的重要性,根据测试数据集的性能调整模型超参数
  2. 后续将介绍使用不同模型和算法进行模型选择的过程,以及如何通过交叉验证等方法进一步优化模型性能

http://www.ppmy.cn/ops/156907.html

相关文章

适用于 Windows 的 Zed 编辑器的非官方稳定版。通过 scoop 或 pwsh 脚本轻松安装。不隶属于 Zed Industries

一、软件介绍&#xff08;文末提供下载&#xff09; Zed&#xff0c;这是一款由 Atom 和 Tree-sitter 的创建者提供的高性能多人 Atom and Tree-sitter.。 二、macOS 和 Linux安装 在 macOS 和 Linux 上&#xff0c;您可以直接下载 Zed 或通过本地包管理器安装 Zed。 本地包…

003 Linux驱动开发——第一个简单开发实验

01 开发板的第 1 个 APP 实验 gcc -o hello hello.c ./hello Hello, world! ./hello weidongshan Hello, weidongshan!要想给 ARM 板编译出 hello 程序&#xff0c;需要使用交叉编译工具链 arm-buildroot-linux-gnueabihf-gcc -o hello hello.c 这样编译出来的 hello 程序才可以…

如何在Windows上使用Docker

引言 WSL2&#xff08;Windows Subsystem for Linux2&#xff09;是微软开发的一种技术&#xff0c;允许在 Windows 操作系统上运行 Linux 环境。它提供了一个兼容层&#xff0c;使得用户可以在 Windows 系统中直接运行 Linux 命令行工具、应用程序和开发工具&#xff0c;而无需…

【学术投稿-第五届消费电子与计算机工程国际学术会议】HTML核心元素详解:超链接、列表、表格与实用技巧

基本信息 大会官网&#xff1a;www.iccece.org 线下召开时间&#xff1a;2025年2月28-3月2日 目录 前言 一、超链接&#xff1a;连接万物的桥梁 1. 基础语法 2. 高级应用 3.代码案例​编辑 4. 注意事项 二、列表&#xff1a;结构化内容的利器 1. 有序列表&#xff08;O…

边缘计算网关驱动智慧煤矿智能升级——实时预警、低延时决策与数字孪生护航矿山安全高效运营

迈向智能化煤矿管理新时代 工业物联网和边缘计算技术的迅猛发展&#xff0c;煤矿安全生产与高效运营正迎来全新变革。传统煤矿监控模式由于现场环境复杂、数据采集和传输延时较高&#xff0c;已难以满足当下高标准的安全管理要求。为此&#xff0c;借助边缘计算网关的实时数据…

ubuntu中 使用C++ FFmpeg拉取RTSP视频流

在C中使用FFmpeg拉取RTSP视频流涉及多个步骤&#xff0c;包括初始化FFmpeg库、打开RTSP流、读取帧数据等。以下是一个简单的示例代码&#xff0c;展示如何使用FFmpeg库拉取RTSP视频流并解码视频帧。 1. 安装FFmpeg库 首先&#xff0c;确保你已经安装了FFmpeg库。你可以通过以…

全面的生成式语言模型学习路线

设计了一套全面的生成式语言模型学习路线&#xff0c;包含基础储备、核心知识学习、实践应用和进阶提升四个阶段&#xff0c;你可以根据自身情况进行调整。 第一阶段&#xff1a;基础储备&#xff08;1 - 2个月&#xff09; 数学基础 线性代数 学习向量、矩阵的基本运算&…

腾讯社招流程记录

bg&#xff1a;24届985硕士&#xff0c;四个多月被裁&#xff0c;后端开发 12.20上午投递&#xff0c;腾讯csig云计算后台 12.20下午约面 12.24晚上一面 1h45min 12.26中午约二面 12.26晚上二面 1h10min 目前状态还在面试流程中 ---------------------- 三面还没约&#xff0…