NCU-机器学习-作业3:基于SVM的手写字识别

任务描述:

手写数字识别是生活中尤其常见的机器学习任务,给出一份手写数字训练数据集,训练一个SVM模型并对测试集进行手写数字识别。

输入数据:

在train/目录下包含多个txt文件,其中每个文件表示一个用01矩阵表示的手写数字,文件名中下划线前面的数字代表手写数字的值(如2_167.txt表示手写数字为2;3_13.txt表示手写数字为3,训练数据集可在教学资料中下载,文件名为svm_train.tar)。

在test/目录下也包含多个txt文件,只不过test文件夹下面的txt文件无法从文件名得知手写数字的值(文件名:0.txt~945.txt),需要根据训练好的模型进行预测。

输出数据:

程序需要生成一个result.csv文件,用于保存程序对test中各个txt文件中手写数字值的预测结果。第一行固定为num,之后每一行为一个数值,代表预测值,表示程序对test中对应txt文件的预测结果。

评价标准:

测试集上的准确率。

输入样例:

复制代码
00000000000000000011110000000000
00000000000000001111111100000000
00000000001000111111111100000000
00000000011111111111111110000000
00000000111111111111111110000000
00000000111111111111111110000000
00000000111111111111111110000000
00000000111111111111111111000000
00000001111111111101111111000000
00000000111111000000001111000000
00000001111110000000011111000000
00000001111100000000011111000000
00000001111100000000011111000000
00000001111100000000001111000000
00000001111100000000001111000000
00000001111100000000001111000000
00000001111100000000001111000000
00000001111100000000001111000000
00000001111100000000001111000000
00000001111100000000001111000000
00000001111100000000011111000000
00000000111100000000011111000000
00000000011110000000011111000000
00000000111100000001111110000000
00000000111110000111111000000000
00000000111111111111111000000000
00000000011111111111111000000000
00000000011111111111111000000000
00000000011111111111110000000000
00000000001111111111110000000000
00000000000111111111000000000000
00000000000000111100000000000000

输出样例:

复制代码
num
0
1
2
3
4

思路代码:

Tips:仅为样例代码,存在可优化部分。

python 复制代码
import os

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
import numpy as np


def get_dataset(path, need_label=True):
    dataset, labels = [], []
    filenames = os.listdir(path)

    for filename in filenames:
        if need_label:
            labels.append(filename[0])
        filepath = os.path.join(path, filename)
        dataset.append(np.fromfile(filepath, dtype=np.uint8))

    if need_label:
        return dataset, labels
    return dataset


if __name__ == '__main__':
    X_train, y_train = get_dataset("train")
    X_test = get_dataset("test", need_label=False)

    # 数据标准化
    scaler = StandardScaler()
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)  # 使用同一个scaler的transform,避免误差
    y_train = list(y_train)

    model = SVC()
    model.fit(X_train, y_train)

    y_pred_test = model.predict(X_test)

    # 保存预测结果到result.csv
    results = pd.DataFrame({'num': y_pred_test})
    results.to_csv('result.csv', index=False)

答案提交:

提交.py文件即可。

相关推荐
微学AI2 分钟前
融合注意力机制和BiGRU的电力领域发电量预测项目研究,并给出相关代码
人工智能·深度学习·自然语言处理·注意力机制·bigru
知来者逆13 分钟前
计算机视觉——速度与精度的完美结合的实时目标检测算法RF-DETR详解
图像处理·人工智能·深度学习·算法·目标检测·计算机视觉·rf-detr
一勺汤16 分钟前
YOLOv11改进-双Backbone架构:利用双backbone提高yolo11目标检测的精度
人工智能·yolo·双backbone·double backbone·yolo11 backbone·yolo 双backbone
武汉唯众智创18 分钟前
高职人工智能技术应用专业(计算机视觉方向)实训室解决方案
人工智能·计算机视觉·人工智能实训室·计算机视觉实训室·人工智能计算机视觉实训室
Johny_Zhao29 分钟前
MySQL 高可用集群搭建部署
linux·人工智能·mysql·信息安全·云计算·shell·yum源·系统运维·itsm
一只可爱的小猴子39 分钟前
2022李宏毅老师机器学习课程笔记
人工智能·笔记·机器学习
地瓜机器人44 分钟前
乐聚机器人与地瓜机器人达成战略合作,联合发布Aelos Embodied具身智能
人工智能·机器人
带娃的IT创业者1 小时前
《AI大模型趣味实战》基于RAG向量数据库的知识库AI问答助手设计与实现
数据库·人工智能
__Benco1 小时前
OpenHarmony - 小型系统内核(LiteOS-A)(十),魔法键使用方法,用户态异常信息说明
人工智能·harmonyos
小杨4041 小时前
python入门系列二十(peewee)
人工智能·python·pycharm