zoukankan      html  css  js  c++  java
  • RBF高斯径向基核函数【转】

    XVec表示X向量。||XVec||表示向量长度。
    r表示两点距离。r^2表示r的平方。
    k(XVec,YVec) = exp(-1/(2*sigma^2)*(r^2))
    = exp(-gamma*r^2)...... 公式-1
    这里, gamma=1/(2*sigma^2)是参数, r=||XVec-YVec||
    实际上,可看作是计算2个点X与Y的相似性。很多参考书上,把YVec写作XVec',即 k(XVec, XVec'),也是一样的含义:两点相似性。由于Matlab上面XVec'代表XVec的转置向量(XVec)T,所以,为规避歧义,我记作k(XVec,YVec)。如:LibSVM代码,机器学习经典教材《Pattern Recognition and Machine Learning -Bishop》P312.(三大牛人巨著: Michael I. Jordan,加州大学伯克利分校计算机系/Jon Kleinberg,康奈尔大学计算机系/Bernhard Schlkopf德国蒂宾根马普所)。
    r是半径(radial),这也是径向基核函数(radial basis function)名称的由来。

    很容易,写出高斯RBF matlab代码:
    r = norm(XVec-YVec, 2); % L2范数嘛
    或者: r = sum((XVec-YVec).^2)^(1/2);
    k = exp(-gamma*r^2);

    假设X与Y矩阵的每一行是一个样本,如何求得K(X,Y)?
    假若X = train_data是训练数据, K(X,X)是训练核矩阵,可拿去LibSVM做自定义核训练。当然,这里只是童鞋们的一个练习。LibSVM svmtrain有RBF核(-t 2)。
    假若X = test_data 是测试数据, Y = train_data 是训练数据, 那么 K(X,Y)是测试核矩阵了。(svmpredict)

    MatLab下,核矩阵怎么求更高效?去掉for循环!
    推导下。
    MatLab下,X'代表X的转置矩阵。
    r^2 = ||XVec - YVec||^2
    = ||XVec||^2 + ||YVec||^2 - 2*XVec*YVec'
    = XVec*XVec' + YVec*YVec' - 2*XVec*YVec'
    r^2 = repmat( sum(X.^2,2), 1, size(Y,1) ) ...
    + repmat( sum(Y.^2,2), 1, size(X,1) )' ...
    - 2*X*Y' ;
    代入公式-1, 得到高斯径向基RBF核矩阵KRBF = K(X, Y):
    KRBF = exp(-gamma*r^2); % RBF核矩阵
    在LibSVM中,gamma默认是:1/num_features , 即X与Y的列数。
    假若X是m×d矩阵, Y是n×d矩阵,则KRBF = K(X, Y)是m×n矩阵;
    则KRBF = K(Y, Y)是n×n矩阵。
    例如:Corel5k图片库,提取出Gist全局视觉特征,训练数据4500×512矩阵Y,测试数据499×512矩阵X,特征数num_features = 512,那么 默认值 gamma = 1/512;

    高斯径向基RBF核矩阵KRBF 写成MatLab函数:
    function KMatrix = getKRBF(X, Y, gamma)
    r2 = repmat( sum(X.^2,2), 1, size(Y,1) ) ...
    + repmat( sum(Y.^2,2), 1, size(X,1) )' ...
    - 2*X*Y' ; % r^2(r的平方)
    KMatrix = exp(-gamma*r2);

  • 相关阅读:
    扩展的friend语法
    常量表达式
    字符串过滤,排序输出数字的问题
    decltype类型声明- 现代C++新特性总结
    auto类型-现代C++新特性
    指针相关总结2
    指针相关总结1
    发现XMind一个超级牛逼的功能
    空类指针为什么可以调用类的成员函数 以及 A(){}和A();
    SSAS父子层次结构的增强-UnaryOperatorColumn属性
  • 原文地址:https://www.cnblogs.com/tec-vegetables/p/4506964.html
Copyright © 2011-2022 走看看