SVM - 手写数字识别
来源:互联网 发布:java经纬度坐标范围内 编辑:程序博客网 时间:2024/04/28 10:49
1. 流程
- 收集数据:此处使用给定的文本文件
- 准备数据:基于二值图像构造数据
- 分析数据:对图像向量进行目测
- 训练算法:采用三种不同的方法,不同的参数
- 线性分类器
- 二次多项式核函数
- 径向基核函数
- 测试并计算错误率
2. 实验
本实验使用的训练数据如下图所示,为若干个手写的 0 和 9 的数字图像。
本实验使用的测试数据如下图所示,为若干个手写的 0 和 9 的数字图像。
实验的主函数如下所示:
% 功能:演示 Kernel SVM算法% 时间:2015-07-13clcclear allclose alladdpath('./data');%% 测试样本dataLength = 2;[xTrain1, yTrain1, xTrain2, yTrain2] = readDataFromFiles('./data/trainingDigits');[xTest1, yTest1, xTest2, yTest2] = readDataFromFiles('./data/testDigits');% 合并样本X = [xTrain1, xTrain2]; Y = [yTrain1, yTrain2]; % 打乱样本顺序index = randperm(size(X, 2));X(:, index) = X;Y(:, index) = Y;%% Kernel SVM 训练kernelType = 'liner';[alpha, b] = kernelSvmTrainMine(X, Y, kernelType);%% 提取 SVepsilon = 1e-5; indexSV = find(alpha > epsilon);%% 测试输出yTestResult1 = sign(sum(bsxfun(@times, alpha(indexSV) .* Y(indexSV)', kernel(X(:, indexSV), xTest1, kernelType))) + b);yTestResult2 = sign(sum(bsxfun(@times, alpha(indexSV) .* Y(indexSV)', kernel(X(:, indexSV), xTest2, kernelType))) + b);sum(yTestResult1 ~= yTest1)sum(yTestResult2 ~= yTest2)
训练数据和测试数据的个数为:
线性分类器的结果如下所示:
二次多项式核函数的结果如下所示,其中的系数是指
径向基核函数的结果如下所示,其中的系数是指
3. 总结
从上面的测试中可以看出:
1. 参数的不同对分类的效果影响很大
2. 并不是说最小的训练错误率对应于最小的支持向量数目。
3. 训练后的识别阶段并不需要所有训练样本,只需要支持向量
4. 线性核函数的训练效果并不糟糕,在某些情况下如果线性核函数就以满足要求就可不使用其他复杂核函数。
4. 完整代码和数据
我的GitHub
5. 参考
SVM 支持向量机
Dual SVM 对偶支持向量机
Kernel SVM
《机器学习实战》第六章
0 0
- SVM - 手写数字识别
- SVM手写数字识别
- SVM用于手写数字识别
- pca+svm手写数字识别
- 基于SVM手写数字识别
- 手写数字识别hebb和SVM
- SVM和Knn实现手写数字识别
- SVM手写数字的识别---python
- 【机器学习 sklearn】手写数字识别 SVM
- SVM学习笔记(二)----手写数字识别
- 基于opencv的手写数字识别(MFC,HOG,SVM)
- SVM手写字符识别
- 手写数字识别(二)----SVM 实现Mnist-image 手写数字图像识别
- SVM 手写数字检测
- 手写数字识别实验
- 手写数字识别
- 识别手写数字
- CNN 手写数字识别
- 【C语言】04-函数
- 第十五周
- 五年java人的一点感悟
- 最重要的 Java EE 最佳实践
- 每天一个linux命令(60):scp命令
- SVM - 手写数字识别
- Hibernate3学习笔记(10)——ID 标识选择器
- 对程序员非常重要的24个软技能
- 【C语言】02-第一个C程序
- HDU 1028 Ignatius and the Princess III
- SpringMVC第一个实例
- 第十六周
- Mac环境下svn的使用
- Unity5.1 新的网络引擎UNET(九) UNET 官方推荐视频教程