【问题标题】:custom kernel function in R for SVM model based on RBFR中基于RBF的SVM模型的自定义核函数
【发布时间】:2017-07-22 19:57:00
【问题描述】:

目前我正在使用R中的e1071库来训练一个带有RBF内核的SVM模型,例如调用带有以下参数的SVM函数:

这里的问题是是否有可能在 R 中进一步定制 RBF 内核?我想要做的是在原始 RBF 内核中添加一个额外的计算,例如: [![在此处输入图片说明][2]][2]

Xi 和 Xj 是表示绝对时间戳 Ti 和 Tj 的时间序列的两个对象:

欢迎任何想法,谢谢:)


*嗨,感谢@lejlot的回答,这里我只是根据他的解决方案编辑公式,对吗:)

denote ai = (xi,ti) and bi = (xi, 1/sqr(g)*ti)

K(ai, aj) = exp(-g*||xi-xj||^2) exp(-(ti-tj)^2) =
      = exp(-g*||xi-xj||^2 -(ti-tj)^2) =
      = exp(-g*||xi-xj||^2 -g(1/sqr(g)*ti-1/sqr(g)*tj)^2) =
      = exp(-g*(||xi-xj||^2 + (1/sqr(g)*ti-1/sqr(g)*tj)^2)) =
      = exp(-g*(||xi-xj||^2 + (1/sqr(g)*ti-1/sqr(g)*tj)^2)) =
      = exp(-g*(||bi-bj||^2)) = RBF(bi, bj)*

*但是,这里的另一个问题是您说将 ti(乘以 1/gamma)连接到数据表示,但是如何?

假设X的矩阵包含4个特征,如下:

x1 x2 x3 x4
3  5  6  7  
4  3  2  4
8  5  2  2
3  2  1  0
9  9  3  2

关于时间戳值,由于每一行都有相同的值,响应矩阵可以是:

t1 t2 t3 t4
1  1  1  1  
2  2  2  2
3  3  3  3
4  4  4  4
5  5  5  5

在 e1071 的包中,svm 函数只包含 x 作为输入矩阵,我们如何还包含用于建模的时间戳矩阵?我不知道这是一个简单还是愚蠢的问题,但现在它让我疯狂:(

谢谢你:)

【问题讨论】:

  • 这不是一个有效的内核。也许你的意思是... x exp( -(ti-tj)^2 ) ?
  • 嗨,谢谢,是的!你是对的,我刚刚更正了描述:),你有什么建议吗?

标签: r kernel svm


【解决方案1】:

所以这不是通用解决方案,但在您的特定情况下,不需要自定义内核,让我们表示 ai = (xi,ti) 和 bi = (xi, 1/sqrt(g)*ti)

K(ai, aj) = exp(-g*||xi-xj||^2) exp(-(ti-tj)^2) =
          = exp(-g*||xi-xj||^2 -(ti-tj)^2) =
          = exp(-g*||xi-xj||^2 -g(1/sqrt(g)*ti-1/sqrt(g)*tj)^2) =
          = exp(-g*(||xi-xj||^2 + (1/sqrt(g)*ti-1/sqrt(g)*tj)^2)) =
          = exp(-g*(||xi-xj||^2 + (1/sqrt(g)*ti-1/sqrt(g)*tj)^2)) =
          = exp(-g*(||bi-bj||^2)) = RBF(bi, bj)

因为

||bi-bj||^2 = SUM_k (bik-bjk)^2 = SUM_k (xik-xjk)^2 + (ti-tj)^2

所以您所要做的就是将 ti(乘以 1/sqrt(gamma))连接到您的数据表示并应用常规 RBF 内核。

【讨论】:

  • 嗨,谢谢你的回答,如果我理解你的想法正确,bi = (xi, 1/g*ti) 应该是 bi = (xi, 1/sqr(g)*ti) :),
  • 您好,感谢您的回复,但根据您的想法,我们如何在 R 中实现它?你的意思是把ti的值加到原矩阵xi上,比如(x1,x2,x3,x4,1/sqrt(g)*t1,1/sqrt(g)*t2,1/sqrt( g)*t3,1/sqrt(g‌​)*t4,这里甚至认为t1=t2=t3=t4。然后正常应用带 RBF 的 svm 模型:非常期待您的回答,谢谢!
  • 您所要做的就是将 T 连接为一个新列。我不知道你为什么要复制它,没有意义 - 只需将相应的 t 附加到每个向量。你有你的数据 X,它是 N x D(N 个样本,D 特征),你有 T,它是 N x 1(每个数据点一个时间戳),只需将它连接起来得到 N x (D+1)矩阵(记得将 T 重新缩放 1/sqrt(gamma))并运行常规 rbf。
  • 您好,非常感谢您提供的详细信息:)
猜你喜欢
  • 2021-12-24
  • 2018-03-07
  • 2015-08-06
  • 2017-07-26
  • 2015-08-21
  • 2020-05-18
  • 2021-10-15
  • 2014-05-08
  • 2012-09-28
相关资源
最近更新 更多