SVM实现MNIST手写数字特征提取与分类

下载需积分: 11 | PDF格式 | 176KB | 更新于2024-08-13 | 79 浏览量 | 7 下载量 举报
收藏
本篇计算机视觉作业主要涉及的是使用机器学习中的支持向量机(SVM)对MNIST手写数字数据库进行特征提取和图像分类。MNIST是一个常用的数据集,包含60,000个训练样本和10,000个测试样本,每张图片都是28x28像素的灰度图像,用于识别0-9共10个数字。 作业的核心任务是: 1. **数据预处理**:首先,通过`get_file_list`函数获取指定路径下所有.png格式的图像文件,并使用`get_img_name_str`函数解析出图像名称。图像数据需要经过预处理,如在`img2vector`函数中,将20x20像素的灰度图像转换成1x400的一维向量,通过将像素值归一化到0-1范围,并调整为1行400列的矩阵形式。 2. **特征提取**:每个图像被转换成一个特征向量后,可以用于表示该图像的特征。这里,单个图像的特征是其灰度值分布的表示。 3. **数据划分**:为了训练和测试,可以选择每个数字类别(例如,每个数字有10张图片)作为训练样本,剩下的用于测试。这样可以确保模型的泛化能力。 4. **SVM模型训练**:利用scikit-learn库中的`svm.SVC`或`svm.LinearSVC`等SVM模型进行训练,输入是特征向量,输出是对每个数字类别的预测。SVM在这里扮演了分类器的角色,通过找到一个最优超平面来分割不同类别的数据。 5. **模型评估**:通过测试数据集(每个数字10张图片)对模型进行评估,计算分类准确率,这是衡量模型性能的关键指标。准确率越高,表示模型在未见过的数据上表现越好。 实现这一过程时,需要注意以下几点: - 数据预处理的质量直接影响模型性能,归一化步骤确保了特征的尺度一致。 - SVM的参数选择(如C、kernel类型)可能会影响分类效果,可能需要通过交叉验证等方法进行调优。 - 对于大规模数据,可能需要使用批处理或并行计算技术提高处理效率。 本作业让学生通过实践应用SVM进行计算机视觉中的手写数字识别任务,既锻炼了特征工程的能力,也加深了对监督学习算法的理解。通过实验,参与者能够理解如何在实际问题中提取和利用图像特征,以及如何构建和评估一个基本的机器学习模型。

相关推荐

filetype

逐步解释% matlab mobile传感器数据,从手机导入到本地即可 clear;close all;clc; load('sensorlog_20230601_123433.mat'); lat = Position.latitude; lon = Position.longitude; altitude = Position.altitude; timestamp = Position.Timestamp; spd = Position.speed; nums = length(lat); nBins = 10; binSpacing = (max(spd) - min(spd))/nBins; binRanges = min(spd):binSpacing:max(spd)-binSpacing; % 添加下确界 binRanges(end+1) = inf; % |histc| 确定值落入哪一个bin [~, spdBins] = histc(spd, binRanges); lat = lat'; lon = lon'; spdBins = spdBins'; % 创建一个地理形状矢量,该矢量将线段存储为features s = geoshape(); for k = 1:nBins % 保留与当前bin匹配的经纬度,其余部分保留为NaN,NaN为线段中的中断 latValid = nan(1, length(lat)); latValid(spdBins==k) = lat(spdBins==k); lonValid = nan(1, length(lon)); lonValid(spdBins==k) = lon(spdBins==k); % 保留从当前速度bin转换到另一个速度bin后出现的经纬度使路径连续 transitions = [diff(spdBins) 0]; insertionInd = find(spdBins==k & transitions~=0) + 1; % 预分配空间并插入额外的经纬度 latSeg = zeros(1, length(latValid) + length(insertionInd)); latSeg(insertionInd + (0:length(insertionInd)-1)) = lat(insertionInd); latSeg(~latSeg) = latValid; lonSeg = zeros(1, length(lonValid) + length(insertionInd)); lonSeg(insertionInd + (0:length(insertionInd)-1)) = lon(insertionInd); lonSeg(~lonSeg) = lonValid; % 将经纬度线段添加到地理形状矢量 s(k) = geoshape(latSeg, lonSeg); end wm = webmap('World Imagery'); mwLat = 26.053376; mwLon = 119.187501; name = 'School'; iconDir = fullfile(matlabroot,'toolbox','matlab','icons'); iconFilename = fullfile(iconDir, 'fzu.png'); wmmarker(mwLat, mwLon, 'FeatureName', name, 'Icon', iconFilename); colors = autumn(nBins); wmline(s, 'Color', colors, 'Width', 5); wmzoom(16);

48 浏览量