精华内容
下载资源
问答
  • 采用compactness先验得到初级显著图,并以初级显著图作为训练样本,采用多核学习方式得到次级显著图,而后基于贝叶斯公式以一定的比例融合初级和次级显著图,最终获得精确的显著性检测图。实验结果表明,算法在2个公开...
  • 基于邻域多核学习的后融合多视图聚类算法.pdf
  • 多核学习方法的一个调研,作为一个提纲挈领的文档,非常值得一读,尤其适合正在学习SVM,SVR的哦鞥有
  • 多核学习代码

    2019-03-05 22:42:54
    多核学习的MATLAB代码。适合于机器学习方面的应用,如建模,分类等。
  • 多核学习

    千次阅读 2018-03-24 12:10:34
    前期融合:后期融合:在看文章《On Feature Combination for Multiclass Object Classification》时,后期融合方法(MKL)时发现这两篇文章,很有启发:一、多核学习在图像分类中的应用 1摘要分类在搜索引擎中的...

    研究图像分类,在图像特征提取方面想做一些工作,从特征融合入手,特征融合手段主要分为前期融合与后期融合两种。

    前期融合:


    后期融合:


    在看文章《On Feature Combination for Multiclass Object Classification》时,后期融合方法(MKL)时发现这两篇文章,很有启发:


    一、多核学习在图像分类中的应用              

    1摘要

    分类在搜索引擎中的应用非常广泛,这种分类属性可以方便在rank过程中针对不同类别实现不同的策略,来更好满足用户需求。本人接触分类时间并不长,在刚用SVM做分类的时候对一个现象一直比较困惑,看到大家将各种不同类型特征,拼接在一起,组成庞大的高维特征向量,送给SVM,得到想要的分类准确率,一直不明白这些特征中,到底是哪些特征在起作用,哪些特征组合在一起才是最佳效果,也不明白为啥这些特征就能够直接拼在一起,是否有更好的拼接方式?后来了解到核函数以及多核学习的一些思想,临时抱佛脚看了点,对上面的疑问也能够作一定解释,正好拿来和大家一起探讨探讨,也望大家多多指点。本文探讨的问题所列举的实例主要是围绕项目中的图像分类展开,涉及SVM在分类问题中的特征融合问题。扩展开来对其他类型分类问题,理论上也适用。

    关键词: SVM  特征融合 核函数 多核学习

    2基本概念阐述

    SVM:支持向量机,目前在分类中得到广泛的应用

    特征融合:主要用来描述各种不同的特征融合方式,常见的方式有前期融合,就是前面所描述的将各个特征拼接在一起,后期融合本文后面会提到

    核函数:SVM遇到线性不可分问题时,可以通过核函数将向量映射到高维空间,在高维空间线性可分

    多核学习:在利用SVM进行训练时,会涉及核函数的选择问题,譬如线性核,rbf核等等,多核即为融合几种不同的核来训练。

    3应用背景

    在图片搜索中,会出现这样的一类badcase,图像的内容和描述图像的文本不一致,经常会有文本高相关,而图像完全不一致的情况。解决这类问题的一个思路就是综合利用图像的内容分类属性和文本的query分类属性,看两者的匹配程度做相应策略。

    4分类方法的选取

    下面就可以谈到本文的重点啦,那是如何对图像分类的呢?

    对分类熟悉的同学,马上可能要说出,这还不easy,抽取各种特征,然后一拼接,随便找个分类器,设定几个参数,马上分类模型文件就出来啦,80%准确率没问题。

    那这个方法确实不错也可行,但是有没有可以改进的地方呢?

    这里可能先要说明下图像分类的一些特殊性。

    图像的分类问题跟一般的分类问题方法本质上没太大差异,主要差异体现在特征的抽取上以及特征的计算时间上。

    图像特征的抽取分为两部分,一部分是针对通用图像的特征,还有一部分则是针对特定类别抽取的特征。这些特征与普通的文本特征不一致的地方在于,一个图像特征由于存在分块、采样、小波变换等,可能维度就已经很高。譬如常见的MPEG-7标准中提到的一些特征,边缘直方图150维,颜色自相关特征512维等。在分类过程中,如果将这些特征拼接在一起直接就可能过千维,但是实际在标注样本时,人工标注的正负样本也才几千张,所以在选择分类器时,挑选svm,该分类器由于可以在众多分类面中选择出最优分界面,以及在小样本的学习中加入惩罚因子产生一定软边界,可以有效规避overfitting。

    在特征的计算时间上,由于图像处理涉及的矩阵计算过多,一个特征的计算时间慢的可以达到0.3秒,所以如何挑选出既有效又快速的特征也非常重要。

    5两种特征融合方式的比较

    那刚才的方法有什么问题呢?

    仔细想想,大致存在以下几点问题:
    1. 你所提取的所有特征,全部串在一起,一定合适么?如果我想知道哪些特征组合在一起效果很好,该怎么办?
    2. 用svm进行学习时,不同的特征最适合的核函数可能不一样,那我全部特征向量串在一起,我该如何选择核函数呢?
    3. 参数的选取。不同的特征即使使用相同的核,可能最适合的参数也不一样,那么如何解决呢?
    4. 全部特征都计算,计算时间的花销也是挺大的

    对于刚才的问题,如果用前期融合,可能是用下面方式来解决:
    1. 根据经验,觉得在样本中可能表现不错的特征加进来,至于组合么,全部串在一起,或者选几个靠谱的串一起,慢慢试验,慢慢调,看哪些特征有改进就融合在一起
    2. 也是根据经验,选取普遍表现不错的RBF核,总之结果应该不会差
    3. 交叉验证是用来干嘛的?验证调优参数呗,全部特征融合在一起,再来调,尽管验证时间长,不要紧,反正模型是离线训练的,多调会也没关系。

    那是否有更好的选择方案呢?

    多核学习(MKL)可能是个不错的选择,该方法属于后期融合的一种,通过对不同的特征采取不同的核,对不同的参数组成多个核,然后训练每个核的权重,选出最佳核函数组合来进行分类。

    先看下简单的理论描述:

    普通SVM的分类函数可表示为:

    其中为待优化参数,物理意义即为支持向量样本权重,用来表示训练样本属性,正样本或者负样本,为计算内积的核函数,为待优化参数。

    其优化目标函数为:


    其中用来描述分界面到支持向量的宽度,越大,则分界面宽度越小。C用来描述惩罚因子,而则是用来解决不可分问题而引入的松弛项。
    在优化该类问题时,引入拉格朗日算子,该类优化问题变为:

    其中待优化参数在数学意义上即为每个约束条件的拉格朗日系数。
    而MKL则可认为是针对SVM的改进版,其分类函数可描述为:

    其中,表示第K个核函数,则为对应的核函数权重。
    其对应的优化函数可以描述为:

    在优化该类问题时,会两次引入拉格朗日系数,参数与之前相同,可以理解为样本权重,而则可理解为核函数的权重,其数学意义即为对每个核函数引入的拉格朗日系数。具体的优化过程就不描述了,不然就成翻译论文啦~,大家感兴趣的可以看后面的参考文档。
    通过对比可知,MKL的优化参数多了一层其物理意义即为在该约束条件下每个核的权重。
    Svm的分类函数形似上是类似于一个神经网络,输出由中间若干节点的线性组合构成,而多核学习的分类函数则类似于一个比svm更高一级的神经网络,其输出即为中间一层核函数的输出的线性组合。其示意图如下:

    在上图中,左图为普通SVM示例,而全图则为MKL示例。其中为训练样本,而为不同的核函数,为支持向量权重(假设三个训练样本均为支持向量),为核权重,y为最终输出分类结果。

    6实验过程:

    以实际对地图类别的分类为例,目前用于分类的特征有A,B,C,D,E,F,G(分别用字母代表某特征),这些特征每个的维数平均几百维。
    准备工作:
    1. 人工标注地图类别正负样本,本次标注正样本176张,负样本296张
    2. 提取正负训练样本图片的A~G各个特征
    3. 归一化特征
    4. 为每个特征配置对应的核函数,以及参数
    工具:

    Shogun工具盒:http://www.shogun-toolbox.org/,其中关于该工具的下载,安装,使用实例都有详细说明。该工具除了提供多核学习接口之外,几乎包含所有机器学习的工具,而且有多种语言源码,非常方便使用。

    结果测试:

    经过大约5分钟左右的训练,输出训练模型文件,以及包含的核函数权重、准确率。

    在该实例中,7个特征分别用七个核,其权重算出来为:

    0.048739 0.085657 0.00003 0.331335 0.119006 0.00000 0.415232,

    最终在测试样本上准确率为:91.6%

    为了节省特征抽取的时间,考虑去掉权重较小的特征A、C、F,

    拿剩下4个核训练,几分钟后,得到核函数权重如下:

    0.098070 0.362655 0.169014 0.370261,

    最终在测试样本上准确率为:91.4%

    在这次训练中,就可以节约抽取A、C、F特征的训练时间,并且很快知道哪些特征组合在一起会有较好的结果。

    实验的几点说明:
    1. 该类别的分类,因为样本在几百的时候就已经达到不错效果,所以选取数目较少。
    2. 该实验是针对每个特征选择一个核,且每个核配置固定参数,实际中如果时间允许,可以考虑每个特征选不同核,同一核可以选取不同参数,这样可以得到稍微更好的结果。
    参考文章:

    Large Scale Multiple Kernel Learning

    SimpleMKL

    Representing shape with a spatial pyramid kernel

    参考代码:http://www.shogun-toolbox.org/doc/cn/current/libshogun_examples.html

    7个人经验与总结:

    1. 多核学习在解释性上比传统svm要强。多核学习可以明显的看到各个子核中哪些核在起作用,哪些核在一起合作效果比较好。
    2. 关于参数优化。曾经做过实验,关于同一特征选用同一核,但是不同参数,组合成多个核,也可以提升分类准确率。
    3. 多核学习相比前期特征融合在性能上会有3%~5%左右的提升。
    4. 通过特征选择,可以节约特征计算时间。


    原文来源:http://stblog.baidu-tech.com/?p=1272




    二、多核学习总结


    什么是核:(核或正定核)  定义在上的函数是核函数,如果存在一个从到Hilbert空间的映射

                                                   (1.1)

    使得对任意的,

                                              (1.2)

    都成立。其中表示Hilbert空间中的内积。

    多核学习的本质就是用K个核函数凸组合代替上述的单个核函数且满足

    k≥O且 ,k=1,2,...,K。可用来理解样本的哪个特征能更有效地区分样本。

    多核学习的优点

    当样本特征含有异构信息(Heterogeneous information),样本规模很大, 多维数据的不规则(Unnormaliseddata)或数据在高维特征空间分布的不平坦, 采用单个简单核进行映射的方式对所有样本进行处理并不合理。

    多核学习的研究

    多核模型是一类灵活性更强的基于核的学习模型, 在多核框架下, 样本在特征空间中的表示问题转化成为基本核与权系数的选择问题。

    研究人员大都研究(1)核函数权系数的选择问题。如非平稳的多核学习方法, 局部多核学习方法,非稀疏多核学习方法等(2)多核学习理论。如早期的基于Boosting的多核组合模型学习方法, 基于半定规划(Semide¯nite programming, SDP) 的多核学习方法, 基于二次约束型二次规划(Quadratically constrained quadratic program, QCQP)的学习方法, 基于半无限线性规划(Semi-in¯nitelinear program, SILP)的学习方法, 基于超核(Hyperkernels)的学习方法, 以及近来出现的简单多核学习(Simple MKL)方法和基于分组Lasso思想的多核学习方法。

    多核学习的算法流程

    多核学习缺点:

    尽管多核学习在解决一些异构数据集问题上表现出了非常优秀的性能,但不得不说效率是多核学习发展的最大瓶颈。首先,空间方面,多核学习算法由于需要计算各个核矩阵对应的核组合系数,需要多个核矩阵共同参加运算。也就是说,多个核矩阵需要同时存储在内存中,如果样本的个数过多,那么核矩阵的维数也会非常大,如果核的个数也很多,这无疑会占用很大的内存空间。其次,时间方面,传统的求解核组合参数的方法即是转化为SDP优化问题求解,而求解SDP问题需要使用内点法,非常耗费时间,尽管后续的一些改进算法能在耗费的时间上有所减少,但依然不能有效的降低时间复杂度。高耗的时间和空间复杂度是导致多核学习算法不能广泛应用的一个重要原因。

     参考文献:多核学习方法

    基于多核学习的高性能核分类方法研究 

    展开全文
  • 基于多核学习的GIST全局和SIFT局部特征融合遥感图像检索方法.pdf
  • SMO-MKL(基于SMO的多核学习算法),内有可执行程序以及源代码,欢迎下载
  • 多核学习方法:经过多个核函数映射后的高维空间是由多个特征空间组合而成的组合空间,而显然组合空间可以组合各个子空间不同的特征映射能力,能够将异构数据中的不同特征分量分别通过最合适的单个核函数进行映射,...
  • 数据融合matlab代码无监督多核学习 这是一种用于降低维数的无监督多核学习(U-MKL)的实现,它基于Lin等人()的有监督MKL技术。 通过结合基于特征的内核,它可以最佳地融合异构信息并加权每个输入对最终结果的贡献...
  • MKL-Collection 多核学习与多层MKM的实现合集
  • 多核学习方法

    2014-12-03 21:51:46
    这是一份非常有效的多核学习程序,效率比较高
  • 多核学习方法根据不同的分类标准有不同的分类方式,按照多核函数的构造方法和特点的不同,可以将多核学习方法大致分成三大类别:合成核方法、多尺度核方法、无限核方法。
  • 基于多核学习的静态图像人体行为识别方法
  • 多核学习方法介绍

    千次阅读 2018-08-25 00:14:16
    本文为SVM多核学习方法简介的续篇。 通过上篇文章的学习,我们知道,相比于单个核函数,多核模型可以具有更高的灵活性。经过多个核函数映射后的高维空间是由多个特征空间组合而成的组合空间,而显然组合空间可以...

    作者 | Walker

    本文为SVM多核学习方法简介的续篇。

    通过上篇文章的学习,我们知道,相比于单个核函数,多核模型可以具有更高的灵活性。经过多个核函数映射后的高维空间是由多个特征空间组合而成的组合空间,而显然组合空间可以组合各个子空间不同的特征映射能力,能够将异构数据中的不同特征分量分别通过最合适的单个核函数进行映射,最终使得数据在新的组合空间中能够得到更加准确、合理的表达,进而提高样本数据的分类正确率或预测精度。

     

    多核学习方法根据不同的分类标准有不同的分类方式,按照多核函数的构造方法和特点的不同,可以将多核学习方法大致分成三大类别:合成核方法、多尺度核方法、无限核方法

     

    一、合成核方法

    把具有不同特性的多个核函数进行组合,就会得到包含各个单核函数的总体特性的多核函数。多核函数形成的方式本身就使得多核函数具有更加准确、更加强大的映射能力或者分类能力,特别是对于实际应用中样本数据具有比较复杂分布结构的分类、回归等学习问题,多核学习的优点非常明显。

     

    (1)多核线性组合合成方法

    多核线性组合方法是将基本核函数进行线性组合,用表达式可以如下所示描述:

    假设变量 x,z ∈X,其中 X 属于 R(n)空间,非线性函数Φ能够实现输入空间 X到特征空间 F 的映射,其中 F ∈R(m),m>>n。假设已知的基本核函数为k (x,z) ,再将其进行归一化为ˆk(x,z),则可以通过以下方式进行线性组合得到多核函数:

    直接求和核其中, 其中 ˆk(x,z) 为第 i 个基本核函数。

     

    加权求和核,其中βi为第 i 个核函数的权值。

    多项式加权扩展核,其中kp(x,z)是k (x,z) 的多项式扩展。

     

    (2)多核扩展合成方法

    上述描述的多核组合方法主要是基于将基本核函数直接求和或者加权求和的思想实现多个核函数的结合,但这样的方法最大的问题是可能丢失原始数据的某些特征信息,比如数据分布的某块区域包含很多信息并且是多变的,当使用平均或者加权平均的方式将该部分数据“平滑”之后,能够表示多变信息的数据很有可能被不用的核函数给平滑掉,有可能导致最终的特征信息不完整,降低分类器的分类能力和准确性,基于上述考虑,产生了将原有多核矩阵进行扩展合成的方法,也就是最终能够使用的多核矩阵是由原先的单个核矩阵和其核矩阵共同构成的。因此, 原始核函数的性质得以保留。该合成核矩阵的形式为:

     

    可以看出, 原始核矩阵位于新矩阵的对角线上. 其他所有元素是定义为 (Kp,p0 )i,j = Kp,p0 (xi , xj ) 的两个不同核矩阵的混合, 可由如下公式求得 (以两个 高斯核为例):

     

    很明显,当p = p 0 时, Kp,p ≡ Kp.实验结果显示,当数据集具有变化的局部数据分布时,这种合成核方法将是更好的选择.此外, 通常核组合方法在很大程度上依靠训练数据,并且必须通过学习获取一些权系数,以标识每个核的重要性.

     

    (3)非平稳多核学习

    前边的多核线性组合方法都是对核函数的平稳组合, 即对所有输入样本, 不同的核对应的权值是不变的, 无形中对样本进行了一种平均处理.Lewis 提出了一种多核的非平稳组合方法, 对每个输入样本配以不同的权值系数.如常规 SVM判别函数为:

    引入不同的加权系数, 典型的合成核 SVM 的判别函数可以改写为:

    在最大熵判别框架下, 通过使用一种大间隔隐变量生成模型, 使得隐参数估计问题可以通过变化边界和一个内点优化过程来表示, 并且相应的参数估计可以通过快速的序列最小优化算法实现。

     

    (4)局部多核学习

    针对多核学习在整个输入空间中对某个核都是分配相同权值的问题, 利用一种选通模型 (Gating model) 局部地选择合适核函数, 提出了一种局部多核学习算法. 在SVM 框架下, 其判别函数形如:

    这里的vm 和vm0 是选通模型参数, 可以在多核学习过程中通过梯度下降法获得.将局部选通模型和基于核的分类器相结合,优化问题可以用一种联合的方式加以解决。

     

    二、多个尺度的多核学习: 多尺度核方法

    合成核方法虽然有了一些成功应用,但都是根据简单核函数的线性组合, 生成满足Merce条件的新核函数;核函数参数的选择与组合没有依据可循,对样本的不平坦分布仍无法圆满解决,限制了决策函数的表示能力。在此情况下,出现了多核学习的一种特殊化情形,即将多个尺度的核进行融合。这种方法更具灵活性, 并且能比合成核方法提供更完备的尺度选择.此外,随着小波理论、多尺度分析理论的不断成熟与完善,多尺度核方法通过引入尺度空间,使其具有了很好的理论背景。

     

    多尺度核方法的基础就是要找到一组具有多尺度表示能力的核函数. 在被广泛使用的核函数中, 高斯径向基核是最受欢迎的, 因为它们具有通用普遍的近似能力,同时它也是一种典型的可多尺度化核. 以此核为例,将其多尺度化 (假设其具有平移不变性):

    其中, σ1 < · · · < σm. 可以看出, 当σ较小时, SVC可以对那些剧烈变化的样本进行分类; 而当σ较大 时, 可以用来对那些平缓变化的样本进行分类, 能得到更优的泛化能力. 具体实现时,σ的取值可以借鉴 小波变换中尺度变化的规律, σ可由下式定义:

    对多尺度核的学习方法:
    很直观的思路就是进行多尺度核的序列学习. 多尺度核序列合成方法。简单理解就是先用大尺度核拟合对应决策函数平滑区域的样本, 然后用小尺度核拟合决策函数变化相对剧烈区域的样本, 后面的步骤利用前面步骤的结果,进行逐级优化,最终得到更优的分类结果。考虑一个两尺度核 k1 和 k2 合成的分类问题. 我们要得到合成的决策函数:

    设想k1是一个大尺度的核函数(如σ较大的径 向基函数),相关的核项系数 αi 选择那些决策函数f(x)光滑区域对应的支持向量而k2是小尺度核函数,核项系数βi选择那些决策函数f(x)剧烈变化区域对应的支持向量.具体方法是: 首先通过大尺度的单核 k1 构造函数f1(x),这样,该函数可以很好地拟合光滑区域,但在其他地方存在显著误差,可以使用相对较小的松弛因子来求取αi;然后,在 f1(x)基础上使用小尺度的核 k2 构造 f2(x), 使得联合函数 f1(x) + f2(x)比f1(x) 具有更好的拟合性能.这种方法实际上是多次使用二次规划以实现参数的获取,运算复杂度较高, 同时支持向量的数量大量增加。

     

    三、从有限向无限核的扩展 : 无限核方法

    合成核与多尺度核方法都是在有限个核函数线性组合前提下加以讨论的。但对一些大规模问题,基于有限个核的多核处理方法不一定有效,多核融合的决策函数的表示能力也不能达到处处最优。 此外,在一个多尺度核函数族中, 有限个核函数的选 择并不唯一,并且其不能完备地表征这个核函数族.因此,将有限核向无限核的扩展也是一个重要的方向。

     

    无限核是从由多个基本核函数的合法集合所构成的一个凸壳中找到某个核,使其能最小化凸正则化函数.与其他方法相比,这个方法有一个独有的特征, 即上述基本核的个数可以是无限多个, 仅仅需要这些核是连续参数化的.此外,用半无限规划解决来自通用核类型的核函数学习问题。

     

    IKL 可以比SVM/MKL 大大提高分类正确率, 在这些情况下,IKL 能保持它的实用性, 而交叉验证和 MKL 都是不实用的。

     

     

    展开全文
  • 多核学习算法

    2015-05-15 10:14:51
    对当前支持向量机核函数中多核学习进行就介绍和综述
  • python MKL SVM(多核学习)

    千次阅读 2020-04-13 18:33:19
    python 实现MKL SVM(多核学习)+lasso降维处理 import math import pandas as pd from sklearn.linear_model import LassoCV from sklearn.feature_selection import SelectFromModel from sklearn import ...

    python 实现MKL SVM(多核学习)+lasso降维处理

    import math
    import pandas as pd
    from sklearn.linear_model import LassoCV
    from sklearn.feature_selection import SelectFromModel
    from sklearn import preprocessing
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import svm
    from sklearn.model_selection import train_test_split        
    import itertools
    import datetime
    from sklearn.model_selection import cross_val_score
    "定义核函数"
    "np.linalg.norm(求范数)"
    "范数的定义 eg向量x=[2,4,8]T(转至)的范数为:||x||=根号(2*2+4*4+8*8)=9.165"
    "math.exp(1)返回e的一次方"
    def rbf(gamma=1.0):
     def rbf_fun(x1,x2):
      return math.exp((np.linalg.norm(x1-x2))*(-1.0*gamma))
     return rbf_fun
    "x2.transpose()是对矩阵的转置"
    def lin(offset=0):
     def lin_fun(x1,x2):
      return x1.dot(x2.transpose())+offset
     return lin_fun
    "pow(x1.dot(x2.transpose())+offset,power)指的是对得到x1.dot(x2.transpose())+offset的power次方"
    def poly(power=2,offset=0):
     def poly_fun(x1,x2):
      return pow(x1.dot(x2.transpose())+offset,power)
     return poly_fun
     def sig(alpha=1.0,offset=0):
     def sig_fun(x1,x2):
      return math.tanh(alpha*1.0*x1.dot(x2.transpose())+offset)
     return sig_fun
    "根据输入X的大小构造核矩阵"
    def kernel_matrix(x,kernel):
     mat=np.zeros((x.shape[0],x.shape[0]))
     for a in range(x.shape[0]):
      for b in range(x.shape[0]):
       mat[a][b]=kernel(x[a],x[b])
     return mat
    ".trace()得到矩阵的迹eg a=[[a11,a12],[a21,a22]] a的迹就是a11+a22的值"
    "f_dot函数最后得到一个值"
    def f_dot(kernel_mat1,kernel_mat2):
     return (kernel_mat1.dot(kernel_mat2.transpose())).trace()
    def A(kernel_mat1,kernel_mat2):
     return (f_dot(kernel_mat1,kernel_mat2))/(math.sqrt(f_dot(kernel_mat1,kernel_mat1)*f_dot(kernel_mat2,kernel_mat2)))
    '''
    求betas
    1.形成一个y行y列的矩阵yyT,由y*yT得到
    2.通过kernel_matrix,得到对X数据进行核函数的映射后的矩阵,
    和X的行数列数相同,设为data
    3.通过f_dot函数,将data和y相乘,返回相乘得到的矩阵f_mat,再返回矩阵的迹,记为J
    4.通过A函数将f_mat和yyT相乘得到的迹,再除以根号下(f_mat*f_matT)*(yyT*yyTT)得到的矩阵的迹
    5.将不同核函数在第四步得到的值相加,得到deno值
    6.得到使用不同核函数情况下的betas值,
    通过A函数将f_mat和yyT相乘得到的迹,再除以根号下
    (f_mat*f_matT)*(yyT*yyTT)得到的矩阵的迹,最后除以deno
    就的到每个核函数的betas值了
    betas值是每个核函数的比重
    '''
    def beta_finder(x,y,kernel_list):
        y=np.matrix(y)
        yyT=y.dot(y.transpose())
        deno=sum([A(kernel_matrix(x,kernel),yyT) for kernel in kernel_list])
        betas=[A(kernel_matrix(x,kernel),yyT)/deno for kernel in kernel_list]
        print (betas)
        return betas
    "产生multi核"
    '''
    1.得到betas
    2.生成矩阵XxY维的矩阵
    3.得到不同核函数对X数据映射后的数据data,再乘以该核函数对应的beta值(比重),再
    4.将上述得到的矩阵相加得到最融合的矩阵
    '''
    def multi_kernel_maker(x,y,kernel_list):
     betas=[float(b) for b in beta_finder(x,y,kernel_list)]
     #print " ",betas
     def multi_kernal(x1,x2):
      mat=np.zeros((x1.shape[0],x2.shape[0]))
      for a in range(x1.shape[0]):
       for b in range(x2.shape[0]):
        mat[a][b]=sum([betas[i]*kernel(x1[a],x2[b]) for i,kernel in enumerate(kernel_list)])
      return mat
     return multi_kernal
    "制造多核"
    #kernels = [lin(),lin(2),poly(),poly(3),poly(4),rbf(),rbf(1.5),sig(),sig(1.5)]
    kernels = [lin(),poly(),rbf(),sig(),rbf(10)]
    kernel_numbers=5
    multi_kernels = [mult for mult in itertools.combinations(kernels, kernel_numbers)]#itertools.combinations迭代器eg。(combinations('ABC', 2))得到[('A', 'B'), ('A', 'C'), ('B', 'C')]      
    "训练模型"
    def mk_train(x_train,y_train,multi_kernels):
        y=[[t] for t in y_train[:]]
        #  y=[[t] for t in y_train[:,i]]
        for k_list in multi_kernels:
            mk_train_start_time=datetime.datetime.now()
            multi_kernel=multi_kernel_maker(x_train,y,k_list)
            print(k_list,'multi kernel maked! !')
            clf=svm.SVC(kernel=multi_kernel)
            results=cross_val_score(clf,x_train, y_train, scoring='accuracy',cv=10)
            print(results.mean())
            mk_train_end_time=datetime.datetime.now()
            print('mk_train_time:',(mk_train_end_time-mk_train_start_time).seconds,'seconds')
            "导入数据"       
    file_path=r'C:\\Users\\DengBY\\Desktop\\liver_Lasso_features\\ALL_V.csv'
    data = pd.read_csv(file_path)
    a=pd.DataFrame(data)
    X=a.values[:,1:597]
    y=a.values[:,598]
    min_max_scaler = preprocessing.MinMaxScaler()#范围0-1缩放标准化
    X=min_max_scaler.fit_transform(X)
    "基于Lasso的特征选择"
    lsvc=LassoCV().fit(X, y)
    model = SelectFromModel(lsvc, prefit=True)
    X_lsvc = model.transform(X)
    df_X_lsvc=pd.DataFrame(X_lsvc)
    y=pd.DataFrame(y)
    b=df_X_lsvc
    objs=[b,y]
    "features select 后的数据"
    data=pd.concat(objs, axis=1, join='outer', join_axes=None, ignore_index=False,
                   keys=None, levels=None, names=None, verify_integrity=False
    '打乱数据,重新排序'               
    data=data.sample(frac=1)
    X=data.values[:,:14]
    y=data.values[:,15]   
    X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=200)
    print('model training starting')
    mk_train(X_train,y_train,multi_kernels)
    print('model training finishing')
    #保存日志
    #import sys
    #f_handler=open('out.log', 'w')
    #sys.stdout=f_handler
    
    展开全文
  • 针对L1范数多核学习方法产生核权重的稀疏解时可能会导致有用信息的丢失和泛化性能退化、Lp范数多核学习方法产生核权重的非稀疏解时会产生很多冗余信息并对噪声敏感,提出了一种通用稀疏多核学习方法。该算法是基于L1...
  • 多核学习工具

    2016-04-12 10:04:32
    多核学习工具
  • 针对显著性检测中特征选择的主观片面性和预测过程中特征权重的难以协调性问题,提出了一种基于全卷积神经网络和多核学习的监督学习算法。首先通过MSRA10K图像数据库训练出的全卷积神经网络(FCNN),预测待处理图像...
  • 现有基础矩阵鲁棒估计方法存在精度不高、准确性较低等不足,基于此,提出一种利用多核学习改进密度峰值聚类的基础矩阵估计方法。首先,针对密度峰值算法需要选取参数和无法自动聚类等不足,引入多核学习和γ分布图进行...
  • 多核学习工具箱mkl

    2013-08-27 15:01:42
    多核学习的一个工具箱,可以通过该工具箱了解多核学习的思想。
  • 最近关于多核学习(MKL)的工作已经证明了积分半径信息是提高核学习性能的一种有前途的方法。 但是,将最小包围球(MEB)的半径直接集成到MKL中,不仅会导致计算量大,而且由于该半径对异常值的敏感性而导致的核学习...
  • 针对传统的分类器集成的每次迭代通常是将单个最优个体分类器集成到强分类器中,而其他可能有辅助作用的个体分类器被简单抛弃的问题,提出了一种基于Boosting框架的非稀疏多核学习方法MKL-Boost。利用分类器集成学习...
  • - 范数约束的最小二乘支持向量机多核学习算法. 该算法提供了两种求解方法, 均通过两重循环进行求解, 外循环用于更新核函数的权值, 内循环用于求解最小二乘支持向量机的拉格朗日乘数, 充分利用该多核学习算法, 有效...
  • 本文提出了一种基于群敏感的多核学习(GS-MKL)方法进行对象识别,以适应类内多样性和类间相关性。 通过在对象类别和单个图像之间引入“组”作为中间表示,GS-MKL尝试与相关的分类器一起学习组敏感的多内核组合。 ...
  • ~回顾了一种多核学习( multiple kernel learning,MKL) 方法-lp范数约束的多核Fisher 判别分析( lp regularizedmultiple kernel Fisher discriminant analysis,MK-FDA) ,研究了固定范数和p 范数下MKL 的性能对比,...
  • 多核学习既可以用在多任务学习,也可以用在多视图学习,也有研究同时对多任务和多视图同时采用多核的,目前已经有通用多任务多核学习方法。如果将多核用在多任务学习,相当于不同任务共享子空间的同时,还有各自特有...

           多核学习既可以用在多任务学习,也可以用在多视图学习,也有研究同时对多任务和多视图同时采用多核的,目前已经有通用多任务多核学习方法。如果将多核用在多任务学习,相当于不同任务共享子空间的同时,还有各自特有的一个空间,这个特有空间通过采用不同的核来表示。多任务中采用多核,由此强调任务个性。如果将多核用在多视图学习,不同视图的数据采用不同的核,相当于多源数据融合的一种方法,这些也早有研究。而无论是多任务,多视图还是多核,都是希望充分利用不同来源的数据,去提高模型的整体效果,知识在不同任务和视图之间互通有无,实现不同任务不同视图的知识迁移。

           而集成学习对数据的利用则更弱一些。某种程度上说,多任务和多视图,乃至多核,都是在模型设计阶段就考虑了数据融合的问题。而集成学习仅仅是在训练好分类器之后才做集成。集成学习用到的基学习器模型之间并没有知识的互通。所以多任务和多视图学习,更能有效利用不同来源的数据提高学习效果。若集成学习的基学习器本身能力不足,即使集成也不容易得到更好的效果。目前也有一些同时采用多任务和集成学习的方法。

    展开全文
  • 基于距离的多核ELM:一种快速的多核学习方法
  • 针对传统算法在外界环境及目标运动导致外形变化的影响下跟踪效果不稳定的问题,提出一种鲁棒的多核学习跟踪算法,将Boosting提升方法引入到多核学习框架中,用比传统多核学习算法更少的样本训练,构建出基于互补性...
  • 缺少多核学习

    2021-03-27 15:34:06
    缺少多核学习

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,499
精华内容 16,599
关键字:

多核学习