基于SVM的图像分类

今天在星巴克呆了一天,复习了一下学习的内容,翻到了研一期间旁听人工智能的课程设计,第一个完全写的一个基于SVM的图像分类任务,记得当时我是实验室第一个独立完成课程设计的,其他小伙伴还是参考我的代码,现在工业界,已经被漫天的深度学习覆盖,难道忘记了曾经万能的SVM了吗?

还是写一遍小文,整理一下笔记,万一有初学者想要参考一下呢,也督促自己熟悉曾经做过的工作。

当时还在CSDN上写过一篇文章,原因是用matlab配置libsvm总是配置不好(当时Win8.1是最新版的系统,libsvm还是最流行的svm工具包,当时是2013年),博客地址在http://blog.csdn.net/qust_waiwai/article/details/17189787 ,只是写了个草稿,没想到,却成了评论最多的文章。

那就先把这个草稿整理完。

Windows64位 MATLAB使用LibSVM

LibSVM的网站上下载压缩包,然后解压。会发现有一些文件夹还有一些代码文件,其中一个MATLAB的的文件夹,里面就是提供的matlab接口(这些都在根目录的README文件里面介绍了,还有其他接口的安装与使用说明)。

在MATLAB这个目录下也有一个README文件,这个文件详细的描述了如何使用LibSVM的MATLAB接口,其中介绍了64位系统提供了 预编译好的二进制可执行文件。

On Windows systems, pre-built binary files are already in the 
directory '..\windows', so no need to conduct installation. Now we 
provide binary files only for 64bit MATLAB on Windows. If you would 
like to re-build the package, please rely on the following steps.

至于为什么编译不好,先不浪费时间在这上面了,应该是编译器版本的原因,现在Win10要比Win8.1稳定了,应该就没有这个问题了。

将根目录中的windows目录拷贝到MATLAB的安装目录中的toolboxs中,里面全是各种包,不用自己在维护一个文件夹了,然后在MATLAB中Set Path,把这Windows目录添加进去,在MATLAB中就可以使用了。

输入 svmtrain 测试一下,会输出基本的用法:

>> svmtrain
Usage: model = svmtrain(training_label_vector, training_instance_matrix, 'libsvm_options');
libsvm_options:
-s svm_type : set type of SVM (default 0)
    0 -- C-SVC      (multi-class classification)
    1 -- nu-SVC     (multi-class classification)
    2 -- one-class SVM
    3 -- epsilon-SVR    (regression)
    4 -- nu-SVR     (regression)
-t kernel_type : 
  • 15
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
SVM(支持向量机)是一种常见的分类算法,可以用于图像分类。下面是一个基于SVM图像分类MATLAB代码示例: 1. 准备数据集 首先需要准备一个图像数据集,包括若干张图片和对应的标签(类别)。可以使用MATLAB自带的图像数据集或者自己收集整理。 2. 特征提取 将每张图片转化为特征向量,这里使用HOG特征。可以使用MATLAB自带的HOG函数进行提取。 3. 数据预处理 将特征向量归一化(normalize)或者标准化(standardize),以便更好地应用SVM分类器。 4. 训练SVM分类器 使用训练数据集训练一个SVM分类器。可以使用MATLAB自带的fitcsvm函数进行训练。 5. 测试 将测试数据集的图片转化为特征向量,然后使用训练好的SVM分类器进行分类。可以使用MATLAB自带的predict函数进行分类,并计算分类准确率。 下面是一个简单的示例代码: ```matlab % 准备数据集 data = imageDatastore('path/to/image/folder', 'IncludeSubfolders', true, 'LabelSource', 'foldernames'); [trainData, testData] = splitEachLabel(data, 0.8, 'randomized'); % 特征提取 featuresTrain = cellfun(@(x) extractHOGFeatures(x), trainData.Files, 'UniformOutput', false); featuresTest = cellfun(@(x) extractHOGFeatures(x), testData.Files, 'UniformOutput', false); % 数据预处理 XTrain = cell2mat(featuresTrain); XTest = cell2mat(featuresTest); YTrain = trainData.Labels; YTest = testData.Labels; [XTrain, mu, sigma] = zscore(XTrain); XTest = (XTest - mu) ./ sigma; % 训练SVM分类svm = fitcsvm(XTrain, YTrain); % 测试 YTest_pred = predict(svm, XTest); accuracy = sum(YTest == YTest_pred) / numel(YTest); fprintf('Testing accuracy: %.2f%%\n', accuracy * 100); ``` 注意,这只是一个简单的示例代码,实际应用中可能需要更多的数据预处理和参数调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值