6.LibSVM核函数

时间:2023-02-16 09:17:40

libsvm的核函数类型(svmtrain.c注释部分):

"-t kernel_type : set type of kernel function (default 2)\n"
"    0 -- linear: u'*v\n"
"    1 -- polynomial: (gamma*u'*v + coef0)^degree\n"
"    2 -- radial basis function: exp(-gamma*|u-v|^2)\n"
"    3 -- sigmoid: tanh(gamma*u'*v + coef0)\n"
"    4 -- precomputed kernel (kernel values in training_instance_matrix)\n

linear:线性核函数(linear kernel)
polynomial:多项式核函数(ploynomial kernel)
RBF:径向基核函数(radical basis function)
sigmoid: 神经元的非线性作用函数核函数(Sigmoid tanh)
precomputed :用户自定义核函数
究竟用哪一种核函数取决对数据处理的要求,不过建议一般都是使用RBF核函数。因为RBF核函数具有良好的性态,在实际问题中表现出了良好的性能。

下面来考虑这样一种情况,给定m个训练样本6.LibSVM核函数,每一个6.LibSVM核函数对应一个特征向量。那么,我们可以将任意两个6.LibSVM核函数6.LibSVM核函数带入6.LibSVM核函数中,计算得到6.LibSVM核函数。i可以从1到m,j可以从1到m,这样可以计算出m*m的核函数矩阵(Kernel Matrix)。为了方便,我们将核函数矩阵和6.LibSVM核函数都使用6.LibSVM核函数来表示。

如果假设6.LibSVM核函数是有效地核函数,那么根据核函数定义

6.LibSVM核函数

可见,矩阵K应该是个对称阵。

自定义核函数时,使用-t 4参数后,需要根据核函数给出核矩阵即可。比如:线性核函数是 K(x,x') = (x * x'),设训练集是train_data,设训练集有150个样本, 测试集是test_data,设测试集有120个样本。
训练集的核矩阵是 ktrain1 = train_data*train_data'
测试集的核矩阵是 ktest1 = test_data*train_data'
想要使用-t 4参数还需要把样本的序列号放在核矩阵前面 ,形成一个新的矩阵。然后使用svmtrain建立支持向量机,再使用svmpredict进行预测即可。形式与使用其他-t参数稍有不同,如下。

clear;
clc; %%
load heart_scale.mat;
% Split Data
train_data = heart_scale_inst(:,:);
train_label = heart_scale_label(:,:);
test_data = heart_scale_inst(:,:);
test_label = heart_scale_label(:,:); %% Linear Kernel
model_linear = svmtrain(train_label, train_data, '-t 0');
[predict_label_L, accuracy_L, dec_values_L] = svmpredict(test_label, test_data, model_linear); %% Precomputed Kernel One
% 使用的核函数 K(x,x') = (x * x')
% 核矩阵
ktrain1 = train_data*train_data';
Ktrain1 = [(:)',ktrain1];
model_precomputed1 = svmtrain(train_label, Ktrain1, '-t 4');
ktest1 = test_data*train_data';
Ktest1 = [(:)', ktest1];
[predict_label_P1, accuracy_P1, dec_values_P1] = svmpredict(test_label, Ktest1, model_precomputed1);
% 这样得到的结果和上步中使用LibSVM提供的线性核得到的结果相同。 %% Precomputed Kernel Two
% 使用的核函数 K(x,x') = ||x|| * ||x'||
% 核矩阵
ktrain2 = ones(,);
for i = :
for j = :
ktrain2(i,j) = sum(train_data(i,:).^)^0.5 * sum(train_data(j,:).^)^0.5;
end
end
Ktrain2 = [(:)',ktrain2];
model_precomputed2 = svmtrain(train_label, Ktrain2, '-t 4'); ktest2 = ones(,);
for i = :
for j = :
ktest2(i,j) = sum(test_data(i,:).^)^0.5 * sum(train_data(j,:).^)^0.5;
end
end
Ktest2 = [(:)', ktest2];
[predict_label_P2, accuracy_P2, dec_values_P2] = svmpredict(test_label, Ktest2, model_precomputed2); %% Precomputed Kernel Three
% 使用的核函数 K(x,x') = (x * x') / ||x|| * ||x'||
% 核矩阵
ktrain3 = ones(,);
for i = :
for j = :
ktrain3(i,j) = ...
train_data(i,:)*train_data(j,:)'/(sum(train_data(i,:).^2)^0.5 * sum(train_data(j,:).^2)^0.5);
end
end
Ktrain3 = [(:)',ktrain3];
model_precomputed3 = svmtrain(train_label, Ktrain3, '-t 4'); ktest3 = ones(,);
for i = :
for j = :
ktest3(i,j) = ...
test_data(i,:)*train_data(j,:)'/(sum(test_data(i,:).^2)^0.5 * sum(train_data(j,:).^2)^0.5);
end
end
Ktest3 = [(:)', ktest3];
[predict_label_P3, accuracy_P3, dec_values_P3] = svmpredict(test_label, Ktest3, model_precomputed3);

函数的正确选取依赖产生分类问题的实际问题的特点,因为不同的实际问题对相似程度有着不同的度量,核函数可以看作一个特征提取的过程,选择正确的核函数有助于提高分类准确率。核函数的构造可以直接构造,也可以通过变换来得到。

6.LibSVM核函数的更多相关文章

  1. libsvm参数学习和核函数使用(转载)

    一.参数说明 English libsvm_options: -s svm_type : set type of SVM (default 0) 0 -- C-SVC        1 -- nu-S ...

  2. Libsvm自定义核函数【转】

    1. 使用libsvm工具箱时,可以指定使用工具箱自带的一些核函数(-t参数),主要有: -t kernel_type : set type of kernel function (default 2 ...

  3. libSVM简介及核函数模型选择

    1. libSVM简介 训练模型的结构体 struct svm_problem //储存参加计算的所有样本 { int l; //记录样本总数 double *y; //指向样本类别的组数 struc ...

  4. libsvm的安装,数据格式,常见错误,grid.py参数选择,c-SVC过程,libsvm参数解释,svm训练数据,libsvm的使用详解,SVM核函数的选择

    直接conda install libsvm安装的不完整,缺几个.py文件. 第一种安装方法: 下载:http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm. ...

  5. libsvm下的windows版本中的工具的使用

    下载的libsvm包里面已经为我们编译好了(windows).进入libsvm\windows,可以看到这几个exe文件: a.svm-toy.exe:图形界面,可以自己画点,产生数据等. b.svm ...

  6. LibSVM for Python 使用

    经历手写SVM的惨烈教训(还是太年轻)之后,我决定使用工具箱/第三方库 Python libsvm的GitHub仓库 LibSVM是开源的SVM实现,支持C, C++, Java,Python , R ...

  7. libsvm简介和函数调用参数说明

    1.      libSVM简介 libSVM是*林智仁(Chih-Jen Lin) 教授2001年开发的一套支持向量机库,这套库运算速度挺快,可以很方便的对数据做分类或回归.由于libSVM程序小 ...

  8. libsvm 训练后的模型参数讲解(转)

    主要就是讲解利用libsvm-mat工具箱建立分类(回归模型)后,得到的模型model里面参数的意义都是神马?以及如果通过model得到相应模型的表达式,这里主要以分类问题为例子.测试数据使用的是li ...

  9. SVM学习笔记(一):libsvm参数说明(转)

    LIBSVM 数据格式需要---------------------- 决策属性 条件属性a 条件属性b ... 2 1:7 2:5 ... 1 1:4 2:2 ... 数据格式转换--------- ...

随机推荐

  1. 详细解读PHP时区修改正确方法

    .修改PHP.ini这个文件 找到date.timezone这行,去掉前面的分号,改成: date.timezone = Asia/Shanghai .修改 .htaccess文件 修改.htacce ...

  2. 推荐几款很棒的 JavaScript 表单美化和验证插件

    表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...

  3. LeetCode OJ 219.Contains Duplicate 2

    Given an array of integers and an integer k, find out whether there are two distinct indices i and j ...

  4. 蓝桥网试题 java 基础练习 查找整数

    --------------------------------------------------------------------- 注意看清楚条件 别漏了 -1 -1 -1 --------- ...

  5. 51 NOD 1238 最小公倍数之和 V3

    原题链接 最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧…… (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧…… ...

  6. MySQL 5.7.14安装说明,解决服务无法启动

    http://jingyan.baidu.com/article/f54ae2fc0affca1e92b84999.html http://www.myexception.cn/mysql/51431 ...

  7. ALGO-13_蓝桥杯_算法训练_拦截导弹(贪心,DP)

    问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  8. JSON—基础

    什么是JSON?(JavaScript Object Notation) 1:一种轻量级的数据交换格式 2:采用独立于语言的文本格式 3:常用于客户端和服务器之间传递数据(以对象的形式传递) JSON ...

  9. pdb文件及引发的思考

    最初只想知道线上iis里需要不需要pdb文件,了解部分之后对于.net底层产生了浓厚的兴趣,看了一点点资料 资料来源: https://www.cnblogs.com/itech/archive/20 ...

  10. java并发深入

    对象由数据+行为组成.数据就是字段,行为就是方法. 并发须要保证这些可被多个线程訪问的共享对象数据的完整性,以及某些特定完整性语义. 比方一个类有一个字段count=0,两个线程同一时候对它做加1操作 ...