首页 > 其他分享 >[Machine Learning] 使用经典分类模型k-最近邻(kNN)实现手写数字识别

[Machine Learning] 使用经典分类模型k-最近邻(kNN)实现手写数字识别

时间:2025-01-17 15:54:01浏览次数:1  
标签:kNN index fileStr 模型 testFileCount Machine Learning 手写 识别

一、内容实现概述

本文主要讲述使用scikit-learn库内置的kNN模型,实现手写数字识别

预测房价实现过程如下:

  • 导入所需库:预先导入pandas、matplotlib以及scikit-learn库
  • 导入数据:使用pandas库的文件解析方法read_csv(),读取房价文件数据
  • 数据预处理:对房价数据进行预处理,获得特征数据与目标数据
  • 数据分割:使用sklearn库的数据分割方法对步骤3中的数据进行比例分割,得到训练集和测试集数据
  • 构建线性回归模型:调用sklearn库的线性模型类LinearRegression构建模型
  • 训练模型:调用sklearn库的fit()方法对训练集数据进行训练
  • 预测模型:调用sklearn库的predict()方法对测试集数据进行预测
  • 绘制预测结果:调用matplotlib库的plot()与show()进行绘制并展示预测结果
  • 评估模型:由于该模型是回归模型,所以调用sklearn库的均方误差评估方法mean_squared_error()进行评估

注:

  • 在Python中使用(导入)numpy库时,需要先安装,本实现使用的是pip命令安装 pip install numpy
  • 在Python中使用(导入)scikit-learn框架时,需要先安装,本实现使用的是pip命令安装 pip install -U scikit-learn
  • Scikit-Learn官方教程

 

二、代码实现

注:源代码地址

# 主题:使用kNN(k-最近邻)算法实现手写数字识别

import sys, os
# 1. 将当前项目的根目录(C:\Users\accountName\projects\machine-learning)加入到系统路径中
sys.path.append(os.getcwd())
# 2. 将不在同一目录下的knn模块的classify0函数导入到该文件中去使用
from machinelearninginaction.Ch02.kNN import classify0

import numpy as np

# 将图像转换为向量。这里将把一个32×32的二进制图像矩阵转换为1×1024的向量
def image2vector(filename):
    vector = np.zeros((1, 1024))
    with open(filename, 'r') as file:
        for line_index in range(32):
            lineStr = file.readline().strip()
            for j in range(len(lineStr)):
                vector[0, 32 * line_index + j] = int(lineStr[j])
    return vector

# 识别手写数字
def handwritingClassTest():
    # 将训练集中的图像矩阵转换成向量
    # 获取trainingDigits目录列表
    trainFileList = os.listdir("machinelearninginaction\\Ch02\\trainingDigits")
    testFileCount = len(trainFileList)
    trainVector = np.zeros((testFileCount, 1024))
    trainLabel = []
    for index in range(testFileCount):
        fileStr = trainFileList[index]
        fileName = fileStr.split('.')[0]
        classificationNum = int(fileName.split('_')[0])
        trainLabel.append(classificationNum)
        trainVector[index, :] = image2vector("machinelearninginaction\\Ch02\\trainingDigits\\%s" % fileStr) # 此处使用‘%s’字符串占位符来插入fileStr

    # 验证测试集中数字图像识别的结果
    testDigitsDirPath = "machinelearninginaction\\Ch02\\testDigits"
    testFileList = os.listdir(testDigitsDirPath)
    testFileCount = len(testFileList)
    errCount = 0.0
    for index in range(testFileCount):
        fileStr = testFileList[index]
        fileName = fileStr.split('.')[0]
        classificationNum = int(fileName.split('_')[0])
        testVector = image2vector(testDigitsDirPath + "\\%s" % fileStr)
        pred_result = classify0(testVector, trainVector, trainLabel, 3)
        # print(f"模型手写数字识别的预测结果:{pred_result}, 实际结果为:{classificationNum}")
        if pred_result != classificationNum:
            errCount += 1.0
    print("手写数字识别准确率:", (float(testFileCount) - errCount) / float(testFileCount))
    print("测试集手写数字识别错误数量:", errCount)
    print("手写数字识别错误率:", errCount / float(testFileCount))

handwritingClassTest()

 

三、运行结果

 

标签:kNN,index,fileStr,模型,testFileCount,Machine,Learning,手写,识别
From: https://www.cnblogs.com/xl1164191281/p/18677181

相关文章

  • 【论文阅读】GROOT:Learning to Follow Instructions by Watching Gameplay Viedos
    GROOT:LearningtoFollowInstructionsbyWatchingGameplayViedos.作者为北京大学梁一韬所在的TeamCraftJarvis,发表时间为2023Background在开放世界下开发类人级别的具身智能体以解决开放式任务一直是人工智能领域长期以来追求的目标。随着ChatGPT的流行,近年来涌现了一批......
  • [Machine Learning] 使用经典线性回归模型实现房价预测
    一、内容实现概述本文主要讲述使用Python的Plotly绘图库绘制掷2个6面骰子多次后其结果之和的直方图结果Matplot绘制过程如下:导入random库、plotly库以及绘制直方图的Bar()方法两次同时调用random库的randint()随机方法在1-6的整数中随机取一个值,并记录每两次随机值之和的结......
  • 【2024遥感应用组一等奖】基于ENVI Deep Learning的多源SAR影像海带水淹区域提取与分
    作品介绍01应用背景近年来,随着全球气候变化的加剧,海岸带地区面临的洪水威胁日益严重。这些极端天气事件,特别是由热带气旋引发的洪水,不仅给沿海地区带来了巨大的经济损失,还对当地居民的安全和生活产生了深远影响。因此,能够准确识别海岸地区的水淹区域对于防灾减灾、制定应对策......
  • My CVPR Learning-Feedback
    2024视觉-语言 EfficientVision-LanguagePre-trainingbyClusterMasking图像包含大量冗余信息,这使得从图像中高效学习表示变得具有挑战性,提出了一种在视觉-语言对比学习过程中对图像块进行聚类掩蔽的策略论文方法:随机聚类掩蔽:在训练过程中,随机选择图像块作为聚类中......
  • 【AI游戏】使用强化学习玩 Flappy Bird:从零实现 Q-Learning 算法(附完整资源)
    1. 引言FlappyBird是一款经典的休闲游戏,玩家需要控制小鸟穿过管道,避免碰撞。虽然游戏规则简单,但实现一个AI来自动玩FlappyBird却是一个有趣的挑战。本文将介绍如何使用 Q-Learning 强化学习算法来训练一个AI,使其能够自动玩FlappyBird。我们将从游戏的基本框架开......
  • Towards Better Multi-task Learning: A Framework for Optimizing Dataset Combinati
    本文是LLM系列文章,针对《TowardsBetterMulti-taskLearning:AFrameworkforOptimizingDatasetCombinationsinLargeLanguageModels》的翻译。迈向更好的多任务学习:一个优化大型语言模型中数据集组合的框架摘要1引言2相关工作3框架4实验设置5结果6......
  • cursor试用出现:Too many free trial accounts used on this machine 的解决方法
    文章精选推荐1JetBrainsAiassistant编程工具让你的工作效率翻倍2ExtraIcons:JetBrainsIDE的图标增强神器3IDEA插件推荐-SequenceDiagram,自动生成时序图4BashSupportPro这个ides插件主要是用来干嘛的?5IDEA必装的插件:SpringBootHelper的使用与功能特点6A......
  • Life Long Learning(李宏毅)机器学习 2023 Spring HW14 (Boss Baseline)
    1.终身学习简介神经网络的典型应用场景是,我们有一个固定的数据集,在其上训练并获得模型参数,然后将模型应用于特定任务而无需进一步更改模型参数。然而,在许多实际工程应用中,常见的情况是系统可以不断地获取新数据,例如Web应用程序中的新用户数据或自动驾驶中的新驾驶数据。......
  • 机器学习顶会NeurIPS: AGILE: A Novel Reinforcement Learning Framework of LLM Agent
    ......
  • 组会PPT_Learning Representations from Imperfect Time Series Data via Tensor Rank
    系列博客目录文章目录系列博客目录参数解释:下图就是一个简单的多模态图片,图像的金毛和文本的金毛,一起被模型学习,嵌入一个公共的隐空间。什么是秩?张量秩是描述张量可以通过多少个较低阶张量的乘积来表示。先说一下矩阵的秩,比如A,他的秩为2,因为100这个向量无......