求助libsvm的MATLAB版如何自定义核函数

2024-05-13 07:05

1. 求助libsvm的MATLAB版如何自定义核函数

对于自定义核函数,libsvm中称为:Precomputed Kernels。其中的例子如下:
  Assume the original training data has three four-feature instances and testing data has one instance:
     15  1:1 2:1 3:1 4:1
     45      2:3     4:3
     25          3:1
     15  1:1     3:1
   If the linear kernel is used, we have the following new training/testing sets:
     15  0:1 1:4 2:6  3:1
     45  0:2 1:6 2:18 3:0 
     25  0:3 1:1 2:0  3:1
 
     15  0:? 1:2 2:0  3:1
   ? can be any value.
  其中,15,45等是类别,而第二个则为自定义函数的矩阵。在使用线性核的状态下计算值如第二个矩阵所示。具体说明如下
    类别   0:索引(即该条数据为第几条)  1:与第一条数据的核函数值  2:与第二条数据核函数值  ……  n:与第n挑数据的值
在自定义核函数构造该矩阵之后,调用方式采用svm_train -t 4 [其他可选参数] kernel_file(核函数矩阵文件) Model_file(模型文件)。这样,我们就可以很容易地应用Java,C++版本的核函数矩阵了。

求助libsvm的MATLAB版如何自定义核函数

2. 求助GA优化SVM参数的matlab 代码

你试一下把options=gaoptimset(options,'InitialPopulation',X0); 改一下 以为你得到的结果是options,但在调用gaoptimset这个函数的时候又把它当成参数输入了,这样就错了,改成opts=gaoptimset(options,'InitialPopulation',X0);

3. 谁有svm用高斯核函数分类UCI数据集的matlab程序,高斯核矩阵是自己求出的???

同问,请问如何求高斯核矩阵呀?LZ现在会了吗?

谁有svm用高斯核函数分类UCI数据集的matlab程序,高斯核矩阵是自己求出的???

4. 自己写的一个Matlab的SVM回归程序,请求帮助

riverdata=[8.07 48.8 0.27 0.0191 3.0;2.70 200.0 1.55 0.074 1500.0;2.35 70 0.43 0.10 110;
3.84 72 0.76 0.13 260;0.85 47.0 0.32 0.067 14.0;2.10 60.0 0.94 0.104 54.0;
2.1 53 0.83 0.107 47;0.4 19 0.16 0.116 9.9;0.85 34 0.15 0.055 9.5;
0.76 64.0 0.67 0.27 35;1.56 24 0.71 0.043 9.6;1.1 59 0.88 0.12 42;
2.16 69 1.55 0.17 160;0.94 26 0.34 0.067 33;0.91 37 0.4 0.067 39;
2.04 104 0.58 0.05 315;4.75 127 0.64 0.08 670;0.49 16.0 0.27 0.08 20;
0.85 18 0.6 0.1 21;0.58 25 1.01 0.14 14;2.47 34 0.82 0.18 65;
0.43 16 0.37 0.05 14;0.58 36 0.21 0.049 8.1];
riverdata_train=riverdata(1:16,1:4);
riverdata_trainlabels=riverdata(1:16,5);
riverdata_test=riverdata(17:23,1:4);
riverdata_testlabels=riverdata(17:23,5);
%优选参数
bestmse=1;
for log2c = -10:10,
for log2g=-10:10,
cmd=['-v 4 -c',num2str(2^log2c),'-g',num2str(2^log2g),'-s 3 -p 0.4 -n 0.1'];
cv=svmtrain(riverdata_trainlabels,riverdata_train,cmd);
if (cv<bestmse),
bestmse=cv;bestc=2^log2c;bestg=2^log2g;
end
end
end

5. Python中怎样编写混合核函数?

这个和用不用python没啥关系,是数据来源的问题。 调用淘宝API,使用 api相关接口获得你想要的内容,我 记得api中有相关的接口,你可以看一下接口的说明。 用python做爬虫来进行页面数据的获龋。

Python中怎样编写混合核函数?

6. 如何在MATLAB中添加SVM函数工具箱

打开matlab,点击HOME中的"Set Path"选项。

在弹出的对话框中,选择“Add with Subfolders...”。

在弹出的文件夹选择对话框中,选择svm工具箱所在的目录。

选择完成后,回到“Set Path”对话框,多了以下一些目录路径,然后点击“Save”和“Close”即可。

回到matlab主界面,输入svmtrain即可测试libsvm工具箱是否安装成功,出现如下提示信息,则安装成功。

7. 有谁下过Matlab的SVM-KM中的m-svm代码吗?新手求助

向量机类型应是最经典简单的svm,核函数可以是多项式,高斯,小波等核函数,向量机求解用的是二次规划算法,也就是QP算法(quadratic programming algorithm )

有谁下过Matlab的SVM-KM中的m-svm代码吗?新手求助

8. 求一完整的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
最新文章
热门文章
推荐阅读