一个实例搞定libsvm分类(《Learn SVM Step by Step》by faruto2011系列视频-应用篇)
LIBSVM(二)参数实例详解

LIBSVM(⼆)参数实例详解1. ⼊门案例1.1 分类的⼩例⼦--根据⾝⾼体重进⾏性别预测%% 使⽤Libsvm进⾏分类的⼩例⼦%{⼀个班级⾥⾯有两个男⽣(男⽣1、男⽣2),两个⼥⽣(⼥⽣1、⼥⽣2),其中男⽣1 ⾝⾼:176cm 体重:70kg;男⽣2 ⾝⾼:180cm 体重:80kg;⼥⽣1 ⾝⾼:161cm 体重:45kg;⼥⽣2 ⾝⾼:163cm 体重:47kg;如果我们将男⽣定义为1,⼥⽣定义为-1,并将上⾯的数据放⼊矩阵data中,并在label中存⼊男⼥⽣类别标签(1、-1)%}train_data = [176 70;180 80;161 45;163 47];train_label = [1;1;-1;-1];%{这样上⾯的data矩阵就是⼀个属性矩阵,⾏数4代表有4个样本,列数2表⽰属性有两个,label就是标签(1、-1表⽰有两个类别:男⽣、⼥⽣)。
%}% 利⽤libsvm建⽴分类模型此处options参数为默认值model = svmtrain(train_label,train_data);%{此时该班级⼜转来⼀个新学⽣,其⾝⾼190cm,体重85kg我们想给出其标签(想知道其是男[1]还是⼥[-1])由于其标签我们不知道,我们假设其标签为-1(也可以假设为1)%}test_data = [190 85];test_label = -1;[predict_label,accuracy,dec_value] = svmpredict(test_label,test_data,model);predict_labelif 1 == predict_labeldisp('==该⽣为男⽣');endif -1 == predict_labeldisp('==该⽣为⼥⽣');end1.2 回归的⼩例⼦ y=x^2 利⽤训练集合已知的x,y来建⽴回归模型 model ,然后利⽤这个 model 去预测。
最新LibSVM分类的实用指南

L i b S V M分类的实用指南LibSVM分类的实用指南摘要SVM(support vector machine)是一项流行的分类技术。
然而,初学者由于不熟悉SVM,常常得不到满意的结果,原因在于丢失了一些简单但是非常必要的步骤。
在这篇文档中,我们给出了一个简单的操作流程,得到合理的结果。
(译者注:本文中大部分SVM实际指的是LibSVM)1入门知识SVM是一项非常实用的数据分类技术。
虽然SVM比起神经网络(Neural Networks)要相对容易一些,但对于不熟悉该方法的用户而言,开始阶段通常很难得到满意的结果。
这里,我们给出了一份指南,根据它可以得到合理结果。
需要注意,此指南不适用SVM的研究者,并且也不保证一定能够获得最高精度结果。
同时,我们也没有打算要解决有挑战性的或者非常复杂的问题。
我们的目的,仅在于给初学者提供快速获得可接受结果的秘诀。
虽然用户不是一定要深入理解SVM背后的理论,但为了后文解释操作过程,我们还是先给出必要的基础的介绍。
一项分类任务通常将数据划分成训练集和测试集。
训练集的每个实例,包含一个"目标值(target value)"(例如,分类标注)和一些"属性(attribute)"(例如,特征或者观测变量)。
SVM的目标是基于训练数据产出一个模型(model),用来预测只给出属性的测试数据的目标值。
给定一个训练集,"实例-标注"对,,支持向量机需要解决如下的优化问题:在这里,训练向量xi通过函数Φ被映射到一个更高维(甚至有可能无穷维)空间。
SVM在这个高维空间里寻找一个线性的最大间隔的超平面。
C 0是分错项的惩罚因子(penalty parameter of the error term)。
被称之为核函数(kernel function)。
新的核函数还在研究中,初学者可以在SVM书中找到如下四个最基本的核函数:(线性、多项式、径向基函数、S型)1.1实例表1是一些现实生活中的实例。
高光谱 libsvm 分类

高光谱libsvm 分类高光谱图像分类是指对高光谱图像中的每个像素点进行分类,将其归为不同的类别。
下面是一个简单的高光谱图像分类代码示例,使用的是支持向量机(SVM)分类器。
首先,需要导入必要的库和数据集:import numpy as npimport matplotlib.pyplot as pltfrom sklearn import svm, metricsfrom sklearn.model_selection import train_test_splitfrom sklearn.datasets import load_sample_image# 加载示例高光谱图像dataset = load_sample_image('data/flower.jpg')X = dataset.data.reshape(-1, 3)y = np.zeros(X.shape[0])# 选择前1000个像素点作为训练集X_train, X_test, y_train, y_test = train_test_split(X[:1000], y[:1000], test_size=0.2, random_state=42)接下来,使用支持向量机(SVM)分类器对高光谱图像进行分类:# 定义SVM分类器classifier = svm.SVC(gamma=0.001)# 训练模型classifier.fit(X_train, y_train)# 在测试集上进行预测y_pred = classifier.predict(X_test)# 计算准确率accuracy = metrics.accuracy_score(y_test, y_pred)print("Accuracy:", accuracy)最后,可以将分类结果可视化:# 可视化分类结果plt.figure(figsize=(8, 8))plt.subplot(211)plt.imshow(dataset)plt.title("Original Image")plt.axis("off")plt.subplot(212)plt.imshow(y_pred.reshape(dataset.shape[:2]))plt.title("Classified Image")plt.axis("off")plt.show()上述是简单的高光谱图像分类代码示例,可以根据需要进行修改和优化。
svm算法案例

svm算法案例SVM算法是一种支持向量机算法,被广泛应用于分类和回归问题。
下面我们将介绍一个使用SVM算法解决分类问题的案例。
假设我们有一个鸢尾花数据集,该数据集包含三个品种的鸢尾花(山鸢尾、变色鸢尾和维吉尼亚鸢尾)的测量数据,包括花萼和花瓣的长度和宽度。
我们的目标是根据这些测量值对鸢尾花进行分类。
我们将使用Python编程语言和Scikit-learn库来实现SVM算法。
首先,我们需要加载鸢尾花数据集,并将其拆分为训练集和测试集。
我们将使用70%的数据作为训练集,30%的数据作为测试集。
```from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitiris = load_iris()X_train, X_test, y_train, y_test =train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)```接下来,我们将使用SVM算法进行分类。
我们将使用线性核函数,并设置正则化参数C为1。
我们还将拟合训练集并预测测试集。
```from sklearn.svm import SVC# Create SVM object with linear kernelsvm = SVC(kernel='linear', C=1)# Train SVM on training datasvm.fit(X_train, y_train)# Predict classes of test sety_pred = svm.predict(X_test)```最后,我们将评估模型的性能。
我们将使用混淆矩阵、准确率、召回率和F1得分来评估模型的性能。
```from sklearn.metrics import confusion_matrix,accuracy_score, recall_score, f1_score# Compute confusion matrixcm = confusion_matrix(y_test, y_pred)# Compute accuracy, recall, and F1 scoreaccuracy = accuracy_score(y_test, y_pred)recall = recall_score(y_test, y_pred, average='weighted') f1 = f1_score(y_test, y_pred, average='weighted')print('Confusion matrix:', cm)print('Accuracy: {:.2f}%'.format(accuracy * 100))print('Recall: {:.2f}%'.format(recall * 100))print('F1 score: {:.2f}%'.format(f1 * 100))```运行完整的程序后,我们将得到以下输出:```Confusion matrix:[[19 0 0][ 0 13 1][ 0 1 11]]Accuracy: 96.30%Recall: 96.30%F1 score: 96.30%```这表明我们的模型在测试集上表现良好,准确率为96.3%。
Libsvm分类实验报告

一、LIBSVM介绍LIBSVM是台湾大学林智仁(Chih-Jen Lin)副教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件还有一个特点,就是对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数就可以解决很多问题;并且提供了交互检验(Cross Validation)的功能。
二、准备工作2.1软件下载安装使用的平台是Windows XP,从命令列执行。
先把一些需要的东西装好,总共需要三个软件:libsvm, python, gnuplot。
这里我选择的版本是libsvm-2.88,python26。
Libsvm:到.tw/~cjlin/libsvm/下载libsvm,然后解压缩就好了。
Python:到/download/下载完直接安装就好了。
Gnuplot:下载ftp:///pub/gnuplot/gp400win32.zip解压缩。
这里全部解压安装在c盘c:\libsvm-2.88c:\python26c:\gnuplot2.2参数修改(1)把c:\libsvm-2.88\tools中的easy.py和grid.py复制到c:\libsvm-2.91\python中(2)在c:\libsvm-2.88\python中修改easy.py和grid.py的路径:①点中easy.py在右键中选Edit with IDLE打开,将else下面的路径修改如下:else:# example for windowssvmscale_exe = r"c:\libsvm-2.88\windows\svm-scale.exe"svmtrain_exe = r"c:\libsvm-2.88\windows\svm-train.exe"svmpredict_exe = r"c:\libsvm-2.88\windows\svm-predict.exe"gnuplot_exe = r"c:\gnuplot\bin\pgnuplot.exe"grid_py = r"c:\libsvm-2.88\python\grid.py"②点中grid.py在右键中选Edit with IDLE打开,将else下面的路径修改如下: else:# example for windowssvmtrain_exe = r"c:\libsvm-2.91\windows\svm-train.exe"gnuplot_exe = r"c:\gnuplot\bin\pgnuplot.exe"三、实验步骤(1)按照LIBSVM软件包所要求的格式准备数据集;(2)对数据进行缩放操作;(3)选用适当的核函数;(4)采用交叉验证选择惩罚系数C与g的最佳参数;(5)采用获得的最佳参数对整个训练集进行训练获取支持向量机模型;(6)利用获取的模型进行测试与预测。
支持向量机 libsvm python三分类问题实例

2:EXCEL下的数据处理
Libsvm所需的数据格式应该是 <lable_value> <index1>:<value1> <index2>:<value2>.....。 (lable_value,index,value变量的值全部为数值型,lable_value表示样本的类 型,在二分类其中,其值一般取-1和1或者0和1,当然取其他值也是可以的,只要能 区分就行。index可以理解为遥感影像中的波段序列或者特征序列。value可以理解 为对应的像元值或者特征值)。 也就是类似于 1 1:0.302000 2:0.67200 2 1:0.568000 2:0.668000 3 1:0.568000 2:0.668000 这样的,如果你的数据不是这样,请下载FormatDataLibsvmaa.xlsm这个自带宏 命令的表格来转换,其中标签向量根据分类的类别自己定义
注意,正确率为零是因为在TESTD文件中所有数据标签为均4,而train数据的三个标 签为1,2,3,肯定都是对不上的(在SVM-PREDICT中你需要分类的数据必须给出 任意一个标签数据)。
在C:\libsvm-3.21\windows下调用SVM-TRAIN,输入优化后的参数,ibsvm-3.21\windows下调用SVM-PREDICT,按照用法输入,可以得出
输出的最后结果储存在OUT222这个文件中。
4)最重要的是GRID.py 设置好各项参数进行参数寻优(预设值就是RBF核函数) 具体数值区间我是采用的默认值 根据README里面的用法,同时调用GNUPLOT和SVMTRAIN两个地址,可以得 出.out和.png两个结果 最后可以得出一个最好的G C两个参数的数值
svm分类 案例

svm分类案例
支持向量机(SVM)是一种强大的分类工具,在许多领域都有广泛的应用。
以下是一个使用SVM进行分类的案例:
案例背景:
假设我们正在处理一个二分类问题,其中有两个类别分别为正面和负面。
我们有一组数据,其中每个数据点都有一些特征,例如年龄、收入、教育程度等。
我们的目标是使用这些特征来预测每个数据点属于哪个类别。
案例步骤:
1. 数据预处理:首先,我们需要对数据进行预处理,包括缺失值填充、异常值处理、特征缩放等。
在这个案例中,我们假设数据已经进行了适当的预处理。
2. 特征选择:接下来,我们需要选择合适的特征来训练SVM分类器。
在这个案例中,我们选择年龄、收入和教育程度作为特征。
3. 训练SVM分类器:使用选择的特征和训练数据集,我们可以训练一个SVM分类器。
在训练过程中,SVM会找到一个超平面,使得两个类别的数据点尽可能分开。
4. 测试SVM分类器:使用测试数据集,我们可以评估SVM分类器的性能。
常见的评估指标包括准确率、精确率、召回率和F1分数等。
5. 优化SVM分类器:如果测试结果不理想,我们可以尝试调整SVM的参
数或使用其他优化方法来提高分类器的性能。
案例总结:
通过这个案例,我们可以看到SVM是一种强大的分类工具,可以用于处理
各种分类问题。
在实际应用中,我们需要注意数据预处理、特征选择和参数调整等方面,以确保分类器的性能和准确性。
SVM多分类问题libsvm在matlab中的应用

SVM多分类问题libsvm在matlab中的应⽤转载⾃对于⽀持向量机,其是⼀个⼆类分类器,但是对于多分类,SVM也可以实现。
主要⽅法就是训练多个⼆类分类器。
⼀、多分类⽅式1、⼀对所有(One-Versus-All OVA)给定m个类,需要训练m个⼆类分类器。
其中的分类器 i 是将 i 类数据设置为类1(正类),其它所有m-1个i类以外的类共同设置为类2(负类),这样,针对每⼀个类都需要训练⼀个⼆类分类器,最后,我们⼀共有 m 个分类器。
对于⼀个需要分类的数据 x,将使⽤投票的⽅式来确定x的类别。
⽐如分类器 i 对数据 x 进⾏预测,如果获得的是正类结果,就说明⽤分类器 i 对 x 进⾏分类的结果是: x 属于 i 类,那么,类i获得⼀票。
如果获得的是负类结果,那说明 x 属于 i 类以外的其他类,那么,除 i 以外的每个类都获得⼀票。
最后统计得票最多的类,将是x的类属性。
2、所有对所有(All-Versus-All AVA)给定m个类,对m个类中的每两个类都训练⼀个分类器,总共的⼆类分类器个数为 m(m-1)/2 .⽐如有三个类,1,2,3,那么需要有三个分类器,分别是针对:1和2类,1和3类,2和3类。
对于⼀个需要分类的数据x,它需要经过所有分类器的预测,也同样使⽤投票的⽅式来决定x最终的类属性。
但是,此⽅法与”⼀对所有”⽅法相⽐,需要的分类器较多,并且因为在分类预测时,可能存在多个类票数相同的情况,从⽽使得数据x属于多个类别,影响分类精度。
对于多分类在matlab中的实现来说,matlab⾃带的svm分类函数只能使⽤函数实现⼆分类,多分类问题不能直接解决,需要根据上⾯提到的多分类的⽅法,⾃⼰实现。
虽然matlab⾃带的函数不能直接解决多酚类问题,但是我们可以应⽤libsvm⼯具包。
libsvm⼯具包采⽤第⼆种“多对多”的⽅法来直接实现多分类,可以解决的分类问题(包括C- SVC、n - SVC )、回归问题(包括e - SVR、n - SVR )以及分布估计(one-class-SVM )等,并提供了线性、多项式、径向基和S形函数四种常⽤的核函数供选择。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 利用svmtrain来建立模型
• 利用svmpredict来进行预测
《Learn SVM Step by Step 》by faruto
一个实例搞定libsvm分类
7
——打造最优秀、专业和权威的MATLAB技术交流平台!
一个实例搞定libsvm分类(2)
– model svmtrain训练得到的模型
• 输出
– predict_label预测的测试集的标签,大小N*1,N表示样本数,数据类型double; – accuracy/mse 一个3*1的列向量,第一个数表示分类准确率(分类问题使用),第二个数表示
mse(回归问题使用),第三个数表示平方相关系数(回归问题使用);
更多MATLAB精彩视频详见/forum-5-1.html
《Learn SVM Step by Step 》faruto
一个实例搞定libsvm分类
2
——打造最优秀、专业和权威的MATLAB技术交流平台!
• model = svmtrain(label,data,'-s 0 -t 2 -c 1 -g 0.1'); • 有了model我们就可以做分类预测,比如此时该班级又转来两个新学生:
• 身高190cm,体重85kg • 身高161cm,体重50kg
• 通过上面建立的model给出其标签(想知道其是男【1】还是女【-1】) • 令 testdata = [190 85;161 50] • 由于新来的同学的标签,我们并不知道,假设其全为1(也可以假设全为-1) • 令testdatalabel = [1;1] • 然后利用libsvm来预测新来的学生是男生还是女生
• 本讲涉及到的MATLAB使用技巧总结
《Learn SVM Step by Step 》by faruto
一个实例搞定libsvm分类
13
——打造最优秀、专业和权威的MATLAB技术交流平台!
关于数据标签的注意事项(1)
• 上面我们将男生定义为1,女生定义为-1,那定义成别的有影响吗?
• 输入
– test_data测试集属性矩阵,大小N*m,N表示测试集样本数,m表示属性数目(维数),数据类 型double;
– test_label测试集标签,大小N*1,N表示样本数,数据类型double ;
» 注意:如果没有测试集标签,可以用任意的N*1的列向量代替即可,此时的输出accuracy/mse,就 没有参考价值。
• …… • Lssvm的下载、安装和使用 • 一个实例搞定lssvm分类 • 一个实例搞定lssvm回归
• ……
• 《Learn SVM Step by Step 》理论篇 • 具体内容待定。
《Learn SVM Step by Step 》by faruto
一个实例搞定libsvm分类
3
——打造最优秀、专业和权威的MATLAB技术交流平台!
MATLAB技术论坛 | Simulink仿真论坛 | 专业MATLAB技术交流平台! 网址: 邮箱:matlabsky@ 客服:1341692017(QQ)
更多MATLAB精彩视频详见/forum-5-1.html
《Learn SVM Step by Step 》by faruto
一个实例搞定libsvm分类
4
本讲视频内容目录
——打造最优秀、专业和权威的MATLAB技术交流平台!
《Learn SVM Step by Step 》系列视频目录
• 《Learn SVM Step by Step 》应用篇
• Libsvm的下载、安装和使用 • Libsvm参数实例详解 • 一个实例搞定libsvm分类 • 一个实例搞定libsvm回归 • Libsvm分类参数优化 • Libsvm回归参数优化 • Libsvm-FarutoUltimate版本介绍与使用 • Libsvm-FarutoGUI版本介绍与使用 • 使用libsvm分类&回归的整体过程
• 一个分类例子 • 一个班级里面有两个男生(男生1、男生2),两个女生(女生1、女生2)
• 男生1 身高:176cm 体重:70kg; 男生2 身高:180cm 体重:80kg;
女生1 身高:161cm 体重:45kg; 女生2 身高:163cm 体重:47kg;
• 将男生定义为1,女生定义为-1,并将上面的数据放入矩阵data中
• data = [176 70; 180 80; 161 45; 163 47];
• 在label中存入男女生类别标签(1、-1)
• label = [1;1;-1;-1];
• 上面的data矩阵就是一个属性矩阵,行数4代表有4个样本,列数2表示属性有 两个,label就是标签(1、-1表示有两个类别:男生、女生)。
技术论坛: 函数百科: 电子期刊: 官方博客: 读书频道: 视频教程: 有偿编程: 软件汉化:
一个实例搞定libsvm分类(1)
• 使用libsvm进行分类过程很简单,只需要有属性矩阵和标签,然后就可以建 立分类模型(model),然后利用得到的这个model进行分类预测了。
• 难点在libsvm的参数调节,关于参数寻优的问题在这里姑且不谈,重点是讲 解会用libsvm进行分类,效果好坏暂且不论。
《Learn SVM Step by Step 》by faruto
一个实例搞定libsvm分类
8
——打造最优秀、专业和权威的MATLAB技术交流平台!
一个实例搞定libsvm分类(3)
• svmpredict的调用格式
• [predict_label, accuracy/mse, dec_value] = svmpredict(test_label, test_data,model);
《Learn SVM Step by Step 》by faruto
一个实例搞定libsvm分类
1
——打造最优秀、专业和权威的MATLAB技术交流平台!
MATLAB技术论坛视频教学
内容:《Learn SVM Step by Step 》系列视频 作者:faruto 时间:2011.6-9 版权:All Rights Preserved By 声明:严厉谴责和鄙夷一切利用本论坛资源进行任何牟利或盗版的行为!
• svmtrain的调用格式
• model = svmtrain(train_label, train_data, ‘options’);
• 输入
– train_data训练集属性矩阵,大小n*m,n表示样本数,m表示属性数目(维数),数据类型 double;
– train_label训练集标签,大小n*1,n表示样本数,数据类型double ; – options参数选项,比如‘-c 1 –g 0.1’,详见视频 《Learn SVM Step by Step》系列视频-应用
《Learn SVM Step by Step 》by faruto
一个实例搞定libsvm分类
10
——打造最优秀、专业和权威的MATLAB技术交流平台!
一个实例搞定libsvm分类(5)
• 有了上面的属性矩阵data,和标签label就可以利用libsvm建立分类模型了。
• 一个实例搞定libsvm分类
• 关于数据标签的注意事项
• 分类模型model参数解密
• 本讲涉及到的MATLAB使用技巧总结
《Learn SVM Step by Step 》by faruto
一个实例搞定libsvm分类
6
——打造最优秀、专业和权威的MATLAB技术交流平台!
• 一个实例搞定libsvm分类
• 关于数据标签的注意事项
• 分类模型model参数解密
• 本讲涉及到的MATLAB使用技巧总结
《Learn SVM Step by Step 》by faruto
一个实例搞定libsvm分类
5
本讲视频内容目录
——打造最优秀、专业和权威的MATLAB技术交流平台!
– 答曰:没有影响,但标签必须是数值类型的,不可以是字符类型的。
– 这里面的标签定义就是区分开男生和女生,怎么定义都可以的,只要定义成数值 型的就可以。 比如我可将将男生定义为2,女生定义为5;
– 后面的label相应为label=[2;2;5;5]; 比如我可将将男生定义为18,女生定义为22;
– 后面的label相应为label=[18;18;22;22];
篇:Libsvm参数实例详解/thread-18457-1-1.html
• 输出
– model训练得到的模型,是一个结构体。
» 注意:当使用-v参数时,返回的model不再是一个结构体,分类问题返回的是交叉验证下的平均分 类准确率;回归问题返回的是交叉检验下的平均mse(均方根误差)。
» 注意:如果测试集的真实标签事先无法得知,此返回值没有参考意义。
– dec_value决策值
《Learn SVM Step by Step 》by faruto
一个实例搞定libsvm分类
9
——打造最优秀、专业和权威的MATLAB技术交流平台!
一个实例搞定libsvm分类(4)
——打造最优秀、专业和权威的MATLAB技术交流平台!
一个实例搞定libsvm分类(6)
– data = – 176 70 – 180 80 – 161 45 – 163 47 – label = –1 –1 – -1 – -1 – testdata = – 190 85 – 161 50 – testdatalabel = –1 –1 – Accuracy = 50% (1/2) (classification) 此时这个指标没有参考价值 – predictlabel = –1 – -1