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个训练样本,每一个对应一个特征向量。那么,我们可以将任意两个和带入中,计算得到。i可以从1到m,j可以从1到m,这样可以计算出m*m的核函数矩阵(Kernel Matrix)。为了方便,我们将核函数矩阵和都使用来表示。

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

可见,矩阵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. 在 C# 里使用 F# 的 option 变量

    在使用 C# 与 F# 混合编程的时候(通常是使用 C# 实现 GUI,F#负责数据处理),经常会遇到要判断一个 option 是 None 还是 Some.虽然 Option module 里有 i ...

  2. 简单搭建 nuget 内部服务器

    搭建 nuget 内部服务器,最好的方式是使用 ProGet,参考博文<用 ProGet 搭建内部的 NuGet 服务器>,好处非常多,但需要使用 SQL Server 数据库,如果不想使 ...

  3. 使用NUnit为游戏项目编写高质量单元测试的思考

    0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...

  4. 纸箱堆叠 bzoj 2253

    纸箱堆叠 (1s 128MB) box [问题描述] P 工厂是一个生产纸箱的工厂.纸箱生产线在人工输入三个参数 n, p, a 之后,即可自动化生产三边边长为 (a mod P, a^2 mod p ...

  5. GOF23设计模式之单例模式

    ·核心作用: -保证一个类只有一个实例,并且提供一个访问该实例的全局访问点. ·常见应用场景: -Windows的Task Manager(任务管理器)就是很典型的单例模式 -Windows的Recy ...

  6. 解决IE8下不兼容rgba()的解决办法

    rgba()是css3的新属性,所以IE8及以下浏览器不兼容,这怎么办呢?终于我找到了解决办法. 解决办法 我们先来解释以下rgba rgba: rgba的含义,r代表red,g代表green,b代表 ...

  7. 【HTML】Html页面跳转的5种方式

    目录结构: // contents structure [-] html实现 javascript方式实现 结合了倒数的javascript实现(IE) 解决Firefox不支持innerText的问 ...

  8. iOS网络4——Reachability检测网络状态

    一.整体介绍 前面已经介绍了网络访问的NSURLSession.NSURLConnection,还有网页加载有关的webview,基本满足通常的网络相关的开发. 其实在网络开发中还有比较常用的就是网络 ...

  9. Kafka:主要参数详解(转)

    原文地址:http://kafka.apache.org/documentation.html ############################# System ############### ...

  10. 一键部署mono 免费空间支持ASP.NET MVC 再也不担心伙食费换空间了

    一直以来 部署mono 都是很头疼的事情 因为是我在是不熟悉非win环境,今天偶然发现这个项目,挺好的,分享下 https://github.com/wshearn/openshift-communi ...