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文件即可。

相关推荐
QY_Research_1 小时前
2026房地产NFT平台创业机遇与落地指南分析报告
大数据·人工智能·物联网·机器人·制造
机器人零零壹3 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
电子元件小说家4 小时前
2026年四季度电感市场观察:AI算力与汽车电子驱动下的选型与验证建议智能硬件
人工智能·汽车
网易CodeWave-小码哥4 小时前
支持多模块 Java 微服务导入|CodeWave SDD V4.5.10 上线
人工智能
AI你一生一世4 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
belldeep4 小时前
python:genesis-world, Genesis-Embodied-AI
人工智能·python·ai·genesis
怕浪猫4 小时前
小程序成长计划上新:10 亿 Token 现在能调 DeepSeek-v4.1-flash了
人工智能·aigc·ai编程
ss2734 小时前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql
七牛云行业应用5 小时前
DeepSeek Super-agent 与 Grok Bot:开源 Agent 架构和聊天助手有何区别
人工智能·ai·架构·ai编程
维克兜率天5 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python