当前位置:首页 > 代码 > 正文

svm分类iris代码(svm iris)

admin 发布:2022-12-19 18:49 193


今天给各位分享svm分类iris代码的知识,其中也会对svm iris进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

请问python中如何把SVM分类输出转化为后验概率?想试试SVM+sigmoid,求代码?

因为要用libsvm自带的脚本grid.py和easy.py,需要去官网下载绘图工具gnuplot,解压到c盘.进入c:\libsvm\tools目录下,用文本编辑器(记事本,edit都可以)修改grid.py和easy.py两个文件,找到其中关于gnuplot路径的那项,根据实际路径进行修改,并保存

python与libsvm的连接(参考SVM学习笔记(2)LIBSVM在python下的使用)

1.打开IDLE(pythonGUI),输入importsyssys.version

2.如果你的python是32位,将出现如下字符:

(default,Apr102012,23:31:26)[MSCv.150032bit(Intel)]’

这个时候LIBSVM的python接口设置将非常简单。在libsvm-3.16文件夹下的windows文件夹中找到动态链接库libsvm.dll,将其添加到系统目录,如`C:\WINDOWS\system32\’,即可在python中使用libsvm

手撕SVM(公式推导+代码实现)(三)

前面我们进行了很多的理论性研究,下面我们开始用代码进行实现。

这个数据集显然线性可分。

[-1.0,

-1.0,

1.0,

-1.0,

1.0,

1.0,

1.0,

-1.0,

-1.0,

-1.0,

-1.0,

-1.0,

-1.0,

1.0,

-1.0,

1.0,

1.0,

-1.0,

1.0,

-1.0,

-1.0,

-1.0,

1.0,

-1.0,

-1.0,

1.0,

1.0,

-1.0,

-1.0,

-1.0,

-1.0,

1.0,

1.0,

1.0,

1.0,

-1.0,

1.0,

-1.0,

-1.0,

1.0,

-1.0,

-1.0,

-1.0,

-1.0,

1.0,

1.0,

1.0,

1.0,

1.0,

-1.0,

1.0,

1.0,

-1.0,

-1.0,

1.0,

1.0,

-1.0,

1.0,

-1.0,

-1.0,

-1.0,

-1.0,

1.0,

-1.0,

1.0,

-1.0,

-1.0,

1.0,

1.0,

1.0,

-1.0,

1.0,

1.0,

-1.0,

-1.0,

1.0,

-1.0,

1.0,

1.0,

1.0,

1.0,

1.0,

1.0,

1.0,

-1.0,

-1.0,

-1.0,

-1.0,

1.0,

-1.0,

1.0,

1.0,

1.0,

-1.0,

-1.0,

-1.0,

-1.0,

-1.0,

-1.0,

-1.0]

可以看出来,这里使用的类别标签是-1和1

SMO算法的伪代码:

L==H

第0次迭代 样本:1, alpha优化次数:1

第0次迭代 样本:3, alpha优化次数:2

第0次迭代 样本:5, alpha优化次数:3

L==H

第0次迭代 样本:8, alpha优化次数:4

L==H

j not moving enough

j not moving enough

L==H

L==H

j not moving enough

L==H

第0次迭代 样本:30, alpha优化次数:5

第0次迭代 样本:31, alpha优化次数:6

L==H

L==H

第0次迭代 样本:54, alpha优化次数:7

L==H

L==H

第0次迭代 样本:71, alpha优化次数:8

L==H

L==H

L==H

第0次迭代 样本:79, alpha优化次数:9

L==H

第0次迭代 样本:92, alpha优化次数:10

j not moving enough

L==H

迭代次数:0

第0次迭代 样本:1, alpha优化次数:1

j not moving enough

j not moving enough

j not moving enough

j not moving enough

j not moving enough

L==H

L==H

j not moving enough

j not moving enough

j not moving enough

j not moving enough

L==H

j not moving enough

L==H

L==H

j not moving enough

j not moving enough

第0次迭代 样本:37, alpha优化次数:2

第0次迭代 样本:39, alpha优化次数:3

第0次迭代 样本:52, alpha优化次数:4

j not moving enough

j not moving enough

j not moving enough

j not moving enough

j not moving enough

第0次迭代 样本:71, alpha优化次数:5

j not moving enough

j not moving enough

j not moving enough

j not moving enough

j not moving enough

迭代次数:0

j not moving enough

j not moving enough

j not moving enough

第0次迭代 样本:8, alpha优化次数:1

L==H

j not moving enough

第0次迭代 样本:23, alpha优化次数:2

L==H

j not moving enough

j not moving enough

L==H

j not moving enough

j not moving enough

j not moving enough

第0次迭代 样本:39, alpha优化次数:3

L==H

j not moving enough

第0次迭代 样本:52, alpha优化次数:4

j not moving enough

第0次迭代 样本:55, alpha优化次数:5

L==H

L==H

L==H

L==H

L==H

j not moving enough

第0次迭代 样本:79, alpha优化次数:6

第0次迭代 样本:92, alpha优化次数:7

迭代次数:0

j not moving enough

L==H

j not moving enough

j not moving enough

L==H

j not moving enough

第0次迭代 样本:23, alpha优化次数:1

j not moving enough

j not moving enough

j not moving enough

j not moving enough

j not moving enough

j not moving enough

j not moving enough

L==H

L==H

第0次迭代 样本:51, alpha优化次数:2

j not moving enough

j not moving enough

j not moving enough

j not moving enough

L==H

第0次迭代 样本:69, alpha优化次数:3

L==H

j not moving enough

第0次迭代 样本:94, alpha优化次数:4

j not moving enough

j not moving enough

迭代次数:0

j not moving enough

j not moving enough

j not moving enough

j not moving enough

j not moving enough

...

迭代次数:497

j not moving enough

j not moving enough

j not moving enough

迭代次数:498

j not moving enough

j not moving enough

j not moving enough

迭代次数:499

j not moving enough

j not moving enough

j not moving enough

迭代次数:500

求助,关于libsvm的运算结果分类精度

这个问题挺复杂的。 表面上看是libsvm导入出错了。

但是还有另外一个原因,就是数据的格式不太对。 解析出错了。

第三个原因就是python里计算的精度比较高。 而借助了libsvm后数据的精度变低了。

你说的准确率应该是算法结果的准确率。 按理,数据导入时精度变低应该影响不大。

所以很大可能是数据导入错误,或者是算法错误。

matlab如何svm实现图像分类输出像素点

matlab如何svm实现图像分类输出像素点,这里分享下操作方法。

设备:华硕笔记本

系统:win10

软件:matlab2012

1、首先双击桌面matlab图标,打开matlab软件。

2、然后在打开的软件中,点击左上角新建m文件。

3、然后输入如图所示的代码。

4、最后点击运行程序,即可输出两幅图像像素点。

如何使用libsvm进行分类

这帖子就是初步教教刚接触libsvm(svm)的同学如何利用libsvm进行分类预测,关于参数寻优的问题在这里姑且不谈,另有帖子详述。

其实使用libsvm进行分类很简单,只需要有属性矩阵和标签,然后就可以建立分类模型(model),然后利用得到的这个model进行分类预测了。

那神马是属性矩阵?神马又是标签呢?我举一个直白的不能在直白的例子:

说一个班级里面有两个男生(男生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表示有两个类别:男生、女生)。

Remark:这里有一点废话一些(因为我看到不止一个朋友问我这个相关的问题):

上面我们将男生定义为1,女生定义为-1,那定义成别的有影响吗?

这个肯定没有影响啊!(用脚趾头都能想出来,我不知道为什么也会有人问),这里面的标签定义就是区分开男生和女生,怎么定义都可以的,只要定义成数值型的就可以。

比如我可将将男生定义为2,女生定义为5;后面的label相应为label=[2;2;5;5];

比如我可将将男生定义为18,女生定义为22;后面的label相应为label=[18;18;22;22];

为什么我说这个用脚趾头都能想怎么定义都可以呢?学过数学的应该都会明白,将男生定义为1,女生定义为-1和将男生定义为2,女生定义为5本质是一样的,应为可以找到一个映射将(2,5)转换成(1,-1),so所以本质都是一样的,后面的18、22本质也是一样的。

这里要多说一些,如果你原本的数据集合的标签不是数值型的(比如a、b、c)那么你完全可以通过某种转换映射将不是数值型的标签转换成数值型的。

现在回归正题,有了上面的属性矩阵data,和标签label就可以利用libsvm建立分类模型了,简要代码如下:

model = svmtrain(label,data);

复制代码

有了model我们就可以做分类预测,比如此时该班级又转来一个新学生,其

身高190cm,体重85kg

我们想通过上面这些信息就给出其标签(想知道其是男【1】还是女【-1】)

比如 令 testdata = [190 85]; 由于其标签我们不知道,我们假设其标签为-1(也可以假设为1)

Remark:这里又有一点废话一些(因为我看到不止一个朋友问我这个相关的问题):

如果测试集合的标签没有怎么办?测试集合的标签就应该没有,否则测试集合的标签都有了,还预测你妹啊!?没有是正确的,就像上面一样,新来的学生其标签咱不应知道,就想通过其属性矩阵来预测其标签,这才是预测分类的真正目的。

之所以平时做测试时,测试集合的标签一般都有,那是因为一般人们想要看看自己的分类器的效果如何,效果的评价指标之一就是分类预测的准确率,这就需要有测试集的本来的真实的标签来进行分类预测准确率的计算。

话归正传,即

testdatalabel = -1;

然后利用libsvm来预测这个新来的学生是男生还是女生,代码如下:

[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model)

复制代码

下面我们整体运行一下上面这段恶 搞[e gao]的背景数据和代码(你别笑,这个是真能运行的,也有结果的):

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

复制代码

运行结果如下:

Accuracy = 0% (0/1) (classification)

predictlabel =

1

复制代码

哎,我们看到,通过预测我们得知这个新来的学生的标签是1(男生),由于原本我们假设其标签为-1,假设错误,所以分类准确率为0%。

好,通过上面的讲解,不知道诸位看官对于利用libsvm进行分类是否有了一定了解【谁要是这么通俗的例子还搞不清楚怎么使用libsvm进行分类,那我真无语啦】,下面使用libsvm工具箱本身带的测试数据heart_scale来实际进行一下测试:

%% HowToClassifyUsingLibsvm

% by faruto @ faruto's Studio~

%

% Email:faruto@163.com

%

%

%

% last modified by 2010.12.27

%% a litte clean work

tic;

close all;

clear;

clc;

format compact;

%%

% 首先载入数据

load heart_scale;

data = heart_scale_inst;

label = heart_scale_label;

% 选取前200个数据作为训练集合,后70个数据作为测试集合

ind = 200;

traindata = data(1:ind,:);

trainlabel = label(1:ind,:);

testdata = data(ind+1:end,:);

testlabel = label(ind+1:end,:);

% 利用训练集合建立分类模型

model = svmtrain(trainlabel,traindata,'-s 0 -t 2 -c 1.2 -g 2.8');

% 分类模型model解密

model

Parameters = model.Parameters

Label = model.Label

nr_class = model.nr_class

totalSV = model.totalSV

nSV = model.nSV

% 利用建立的模型看其在训练集合上的分类效果

[ptrain,acctrain] = svmpredict(trainlabel,traindata,model);

% 预测测试集合标签

[ptest,acctest] = svmpredict(testlabel,testdata,model);

%%

toc;

复制代码

运行结果:

model =

Parameters: [5x1 double]

nr_class: 2

totalSV: 197

rho: 0.0583

Label: [2x1 double]

ProbA: []

ProbB: []

nSV: [2x1 double]

sv_coef: [197x1 double]

SVs: [197x13 double]

Parameters =

2.0000

3.0000

2.8000

Label =

1

-1

nr_class =

2

totalSV =

197

nSV =

89

108

Accuracy = 99.5% (199/200) (classification)

Accuracy = 68.5714% (48/70) (classification)

Elapsed time is 0.040873 seconds.

求一完整的SVM分类器的程序,matlab编写的。感激不尽。。。。

这个是非线性svm的:

1.命令函数部分:

clear;%清屏

clc;

X =load('data.txt');

n = length(X);%总样本数量

y = X(:,4);%类别标志

X = X(:,1:3);

TOL = 0.0001;%精度要求

C = 1;%参数,对损失函数的权重

b = 0;%初始设置截距b

Wold = 0;%未更新a时的W(a)

Wnew = 0;%更新a后的W(a)

for i = 1 : 50%设置类别标志为1或者-1

y(i) = -1;

end

a = zeros(n,1);%参数a

for i = 1 : n%随机初始化a,a属于[0,C]

a(i) = 0.2;

end

%为简化计算,减少重复计算进行的计算

K = ones(n,n);

for i = 1 :n%求出K矩阵,便于之后的计算

for j = 1 : n

K(i,j) = k(X(i,:),X(j,:));

end

end

sum = zeros(n,1);%中间变量,便于之后的计算,sum(k)=sigma a(i)*y(i)*K(k,i);

for k = 1 : n

for i = 1 : n

sum(k) = sum(k) + a(i) * y(i) * K(i,k);

end

end

while 1%迭代过程

%启发式选点

n1 = 1;%初始化,n1,n2代表选择的2个点

n2 = 2;

%n1按照第一个违反KKT条件的点选择

while n1 = n

if y(n1) * (sum(n1) + b) == 1 a(n1) = C a(n1) = 0

break;

end

if y(n1) * (sum(n1) + b) 1 a(n1) ~= 0

break;

end

if y(n1) * (sum(n1) + b) 1 a(n1) ~=C

break;

end

n1 = n1 + 1;

end

%n2按照最大化|E1-E2|的原则选取

E1 = 0;

E2 = 0;

maxDiff = 0;%假设的最大误差

E1 = sum(n1) + b - y(n1);%n1的误差

for i = 1 : n

tempSum = sum(i) + b - y(i);

if abs(E1 - tempSum) maxDiff

maxDiff = abs(E1 - tempSum);

n2 = i;

E2 = tempSum;

end

end

%以下进行更新

a1old = a(n1);

a2old = a(n2);

KK = K(n1,n1) + K(n2,n2) - 2*K(n1,n2);

a2new = a2old + y(n2) *(E1 - E2) / KK;%计算新的a2

%a2必须满足约束条件

S = y(n1) * y(n2);

if S == -1

U = max(0,a2old - a1old);

V = min(C,C - a1old + a2old);

else

U = max(0,a1old + a2old - C);

V = min(C,a1old + a2old);

end

if a2new V

a2new = V;

end

if a2new U

a2new = U;

end

a1new = a1old + S * (a2old - a2new);%计算新的a1

a(n1) = a1new;%更新a

a(n2) = a2new;

%更新部分值

sum = zeros(n,1);

for k = 1 : n

for i = 1 : n

sum(k) = sum(k) + a(i) * y(i) * K(i,k);

end

end

Wold = Wnew;

Wnew = 0;%更新a后的W(a)

tempSum = 0;%临时变量

for i = 1 : n

for j = 1 : n

tempSum= tempSum + y(i )*y(j)*a(i)*a(j)*K(i,j);

end

Wnew= Wnew+ a(i);

end

Wnew= Wnew - 0.5 * tempSum;

%以下更新b:通过找到某一个支持向量来计算

support = 1;%支持向量坐标初始化

while abs(a(support)) 1e-4 support = n

support = support + 1;

end

b = 1 / y(support) - sum(support);

%判断停止条件

if abs(Wnew/ Wold - 1 ) = TOL

break;

end

end

%输出结果:包括原分类,辨别函数计算结果,svm分类结果

for i = 1 : n

fprintf('第%d点:原标号 ',i);

if i = 50

fprintf('-1');

else

fprintf(' 1');

end

fprintf(' 判别函数值%f 分类结果',sum(i) + b);

if abs(sum(i) + b - 1) 0.5

fprintf('1\n');

else if abs(sum(i) + b + 1) 0.5

fprintf('-1\n');

else

fprintf('归类错误\n');

end

end

end

2.名为f的功能函数部分:

function y = k(x1,x2)

y = exp(-0.5*norm(x1 - x2).^2);

end

3.数据:

0.8871 -0.3491 8.3376 0

1.2519 1.2083 6.5041 0

-1.1925 1.9338 1.8790 0

-0.1277 2.4371 2.6971 0

1.9697 3.0906 6.0391 0

0.7603 0.8241 1.5323 0

1.6382 3.5516 4.4694 0

1.3438 -0.4539 5.9366 0

-1.3361 -2.0201 1.6393 0

-0.3886 3.3041 8.0450 0

-0.6780 6.0196 -0.4084 0

0.3552 -0.1051 1.2458 0

1.6560 4.0786 0.8521 0

0.8117 3.5451 6.8925 0

1.4773 -1.9340 3.9256 0

-0.0732 -0.9526 0.4609 0

0.1521 4.3711 2.2600 0

1.4820 0.7493 0.3475 0

0.6140 4.5261 8.3776 0

0.5721 3.3460 3.7853 0

0.5269 4.1452 4.3900 0

1.7879 -0.5390 2.5516 0

0.9885 5.7625 0.1832 0

-0.3318 2.4373 -0.6884 0

1.3578 5.4709 3.4302 0

2.7210 -1.1268 4.7719 0

0.5039 -0.1025 2.3650 0

1.1107 1.6885 3.7650 0

0.7862 1.3587 7.3203 0

1.0444 -1.5841 3.6349 0

1.7795 1.7276 4.9847 0

0.6710 1.4724 -0.5504 0

0.2303 0.2720 -1.6028 0

1.7089 -1.7399 4.8882 0

1.0059 0.5557 5.1188 0

2.3050 0.8545 2.8294 0

1.9555 0.9898 0.3501 0

1.7141 1.5413 3.8739 0

2.2749 5.3280 4.9604 0

1.6171 0.5270 3.3826 0

3.6681 -1.8409 4.8934 0

1.1964 1.8781 1.4146 0

0.7788 2.1048 0.0380 0

0.7916 5.0906 3.8513 0

1.0807 1.8849 5.9766 0

0.6340 2.6030 3.6940 0

1.9069 -0.0609 7.4208 0

1.6599 4.9409 8.1108 0

1.3763 0.8899 3.9069 0

0.8485 1.4688 6.7393 0

3.6792 6.1092 4.9051 1

4.3812 7.2148 6.1211 1

4.3971 3.4139 7.7974 1

5.0716 7.7253 10.5373 1

5.3078 8.8138 6.1682 1

4.1448 5.5156 2.8731 1

5.3609 6.0458 4.0815 1

4.7452 6.6352 1.3689 1

6.0274 6.5397 -1.9120 1

5.3174 3.0134 6.7935 1

7.2459 3.6970 3.1246 1

6.1007 8.1087 5.5568 1

5.9924 6.9238 5.7938 1

6.0263 5.3333 7.5185 1

3.6470 8.0915 6.4713 1

3.6543 7.2264 7.5783 1

5.0114 6.5335 3.5229 1

4.4348 7.4379 -0.0292 1

3.6087 3.7351 3.0172 1

3.5374 5.5354 7.6578 1

6.0048 2.0691 10.4513 1

3.1423 4.0003 5.4994 1

3.4012 7.1536 8.3510 1

5.5471 5.1372 -1.5090 1

6.5089 5.4911 8.0468 1

5.4583 6.7674 5.9353 1

4.1727 2.9798 3.6027 1

5.1672 8.4136 4.8621 1

4.8808 3.5514 1.9953 1

5.4938 4.1998 3.2440 1

5.4542 5.8803 4.4269 1

4.8743 3.9641 8.1417 1

5.9762 6.7711 2.3816 1

6.6945 7.2858 1.8942 1

4.7301 5.7652 1.6608 1

4.7084 5.3623 3.2596 1

6.0408 3.3138 7.7876 1

4.6024 8.3517 0.2193 1

4.7054 6.6633 -0.3492 1

4.7139 5.6362 6.2330 1

4.0850 10.7118 3.3541 1

6.1088 6.1635 4.2292 1

4.9836 5.4042 6.7422 1

6.1387 6.1949 2.5614 1

6.0700 7.0373 3.3256 1

5.6881 5.1363 9.9254 1

7.2058 2.3570 4.7361 1

4.2972 7.3245 4.7928 1

4.7794 8.1235 3.1827 1

3.9282 6.4092 -0.6339 1

关于svm分类iris代码和svm iris的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/18490.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载