体育资讯网

您现在的位置是:首页 > 分类11 > 正文

分类11

svm分类器源码下载(SVM分类)

hacker2022-06-08 02:56:14分类11103
本文目录一览:1、谁可以给我SVM分类算法的源代码

本文目录一览:

谁可以给我SVM分类算法的源代码

专业svm分类器源码下载的可以看LIBSVMsvm分类器源码下载,如果只是想学习下具体实现可以参考这个地方svm分类器源码下载:, 这里用100行python代码就实现svm分类器源码下载了SVM!

求一完整的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分类算法的IDL源代码

如果只是想用,可以调用ENVI的SVM~在ENVI帮助文档搜ENVI_SVM_DOIT

如果想看代码,我没编过,不过在百度文库看到一个,根据那个WORD里面的链接就能下下来了,不过是否正确不知道耶~

发表评论

评论列表

  • 拥嬉墓栀(2022-06-08 10:41:01)回复取消回复

    1092 4.9051 1 4.3812 7.2148 6.1211 1 4.3971 3.4139 7.7974 1 5.071