Matlab-SVM工具箱初使用-分类小例子(学生性别判断)
2017-04-07 16:29
1121 查看
本例源自《MATLAB神经网络43个案例分析》
结果解释:通过预测得知新学生标签为1 (男),由于原本假设标签为-1,假设错误,所以分类准确率0%。
对于我这个一头雾水的萌新,自然是抄抄抄先看结果。但是很离奇的发现预测结果是这样的
也就是没有结果,我懵了一下,为什么呢,于是我先想是不是我代码打错了,但是认真检查了一遍,发现并不是,于是有一大段先前被我忽略的让我以为十分人性化的代码提示进入的眼里,长下面这样
我认真一看,不对啊,提示里说函数的返回值要么三个要么一个,我这只写了俩怎么破,第三个返回值又是什么东西。我找啊找,终于找到一份材料这么介绍svmpredict训练函数,既解决我的问题,又让我了解了一下这个函数。
预测
格式:
[predicted_label, accuracy, decision_values/prob_estimates]
= libsvmpredict(testing_label_vector, testing_instance_matrix, model [, ‘libsvm_options’]);
这个函数包括四个参数,其中
-testing_label_vector:测试样本的类标,如果有m个样本,就是m x 1的矩阵(类型必须为double)。如果类标未知,可以初始化为任意m x 1的double数组。
-testing_instance_matrix:测试样本的特征,如果有m个样本,每个样本特征是n维,则为m x n的矩阵(类型必须为double)。
-model:使用libsvmtrain返回的模型
-libsvm_options:预测的参数,与训练的参数形式一样。
libsvmpredict函数有三个返回值,不需要的值在Matlab可以用 ~ 进行代替。
-predicted_label:第一个返回值,表示样本的预测类标号。
-accuracy:第二个返回值,一个3 x 1的数组,表示分类的正确率、回归的均方根误差、回归的平方相关系数。
-decision_values/prob_estimates:第三个返回值,一个矩阵包含决策的值或者概率估计。对于n个预测样本、k类的问题,如果指定“-b 1”参数,则n x k的矩阵,每一行表示这个样本分别属于每一个类别的概率;如果没有指定“-b 1”参数,则为n x k*(k-1)/2的矩阵,每一行表示k(k-1)/2个二分类SVM的预测结果。
我认真看了一下,虽然有些部分还是一知半解,但是看我粗体部分,OK解决。
2. label的定义的不同对其本身的预测没有影响,只是对样本贴了一个标签,说这个样本是男生,这个样本是女生。label可以取成任意数值型的数,也就是比如男生label为4,女生label为99,本质上对最后预测结果的准确率是没有影响,而如果我们本身对一个样本的定义是非数值型,例如apple,但我们也可以把非数值型的标签抽象对应为任意数值型标签。
2.关于一些SVM 函数介绍 来自于CSDN另一个博主的博客 点击访问
3.另外看到很多地方都推荐了一本Matlab快速入门书《MATLAB揭秘》,CSDN有免费下载
4.边入门边写博客 希望对其他人有帮助。
本例背景
给出男孩女孩身高体重数据写入属性矩阵data,设定标签label(1代表男生,-1代表女生)。另给出一名未知性别新学生的属性数据,利用LIBSVM进行预测本例代码
//写入数据 >> data = [176 70; 180 80; 161 45; 163 47]; >> label = [1;1;-1;-1]; //利用属性矩阵与标签建立分类模型 >> model = svmtrain(label,data); //写入测试数据 >> testdata = [190 85]; >> testdatalabel = -1; //利用建立的模型进行预测 >>[predictlabel,accuracy,~] = svmpredict(testdatalabel,testdata,model); //对预测结果进行判断并输出预设判断语句 >>predictlabel if 1 == predictlabel disp('==boy'); end if -1 == predictlabel disp('== girl'); end
运行结果
结果解释:通过预测得知新学生标签为1 (男),由于原本假设标签为-1,假设错误,所以分类准确率0%。
总结
先说遇到的问题,因为书老版或者其他的缘故书上写的预测函数是>>[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model);
对于我这个一头雾水的萌新,自然是抄抄抄先看结果。但是很离奇的发现预测结果是这样的
predictlabel = []
也就是没有结果,我懵了一下,为什么呢,于是我先想是不是我代码打错了,但是认真检查了一遍,发现并不是,于是有一大段先前被我忽略的让我以为十分人性化的代码提示进入的眼里,长下面这样
我认真一看,不对啊,提示里说函数的返回值要么三个要么一个,我这只写了俩怎么破,第三个返回值又是什么东西。我找啊找,终于找到一份材料这么介绍svmpredict训练函数,既解决我的问题,又让我了解了一下这个函数。
预测
格式:
[predicted_label, accuracy, decision_values/prob_estimates]
= libsvmpredict(testing_label_vector, testing_instance_matrix, model [, ‘libsvm_options’]);
这个函数包括四个参数,其中
-testing_label_vector:测试样本的类标,如果有m个样本,就是m x 1的矩阵(类型必须为double)。如果类标未知,可以初始化为任意m x 1的double数组。
-testing_instance_matrix:测试样本的特征,如果有m个样本,每个样本特征是n维,则为m x n的矩阵(类型必须为double)。
-model:使用libsvmtrain返回的模型
-libsvm_options:预测的参数,与训练的参数形式一样。
libsvmpredict函数有三个返回值,不需要的值在Matlab可以用 ~ 进行代替。
-predicted_label:第一个返回值,表示样本的预测类标号。
-accuracy:第二个返回值,一个3 x 1的数组,表示分类的正确率、回归的均方根误差、回归的平方相关系数。
-decision_values/prob_estimates:第三个返回值,一个矩阵包含决策的值或者概率估计。对于n个预测样本、k类的问题,如果指定“-b 1”参数,则n x k的矩阵,每一行表示这个样本分别属于每一个类别的概率;如果没有指定“-b 1”参数,则为n x k*(k-1)/2的矩阵,每一行表示k(k-1)/2个二分类SVM的预测结果。
我认真看了一下,虽然有些部分还是一知半解,但是看我粗体部分,OK解决。
2. label的定义的不同对其本身的预测没有影响,只是对样本贴了一个标签,说这个样本是男生,这个样本是女生。label可以取成任意数值型的数,也就是比如男生label为4,女生label为99,本质上对最后预测结果的准确率是没有影响,而如果我们本身对一个样本的定义是非数值型,例如apple,但我们也可以把非数值型的标签抽象对应为任意数值型标签。
备注
1.本例源自《MATLAB神经网络43个案例分析》2.关于一些SVM 函数介绍 来自于CSDN另一个博主的博客 点击访问
3.另外看到很多地方都推荐了一本Matlab快速入门书《MATLAB揭秘》,CSDN有免费下载
4.边入门边写博客 希望对其他人有帮助。
相关文章推荐
- matlab SVM工具箱安装和使用
- Matlab自带的分类学习工具箱(SVM、决策树、Knn等分类器)
- Matlab SVM工具箱的使用
- matlab中SVM工具箱的使用方法
- SVM Matlab工具箱的使用(一)
- MATLAB实现多分类和libsvm工具箱的安装使用详解
- matlab 中机器学习工具箱中分类器下介绍SVM新函数一个例子
- matlab中SVM工具箱的使用方法
- matlab中SVM工具箱的使用方法
- 在matlab中如何使用SVM工具箱
- 陆振波博士对四种SVM工具箱的使用要点
- 关于matlab的SVM工具箱的几个函数
- 数据拟合---使用自定义函数进行非线性拟合 -在Origin。matlab拟合工具箱cftool
- 4步教你学会使用matlab模糊控制工具箱
- matlab中map工具箱(Mapping toolbox)使用
- MATLAB SVM工具箱
- SVM实现多分类的程序基础工作(二)——通过一个简单libsvm例子迈入libsvm学习的大门
- SVM分类及其Model文件的解析使用
- matlab中使用SVM
- 关于matlab中princomp的使用说明讲解小例子