2017-03-02 40 views
0

目前我使用e1071的库中的R一起训练RBF内核的SVM模型,例如,要求具有以下参数的SVM功能:定制的内核函数

这里的问题是有没有可能在R中进一步定制RBF内核?我想要做的是增加一个额外的计算到原始的RBF内核,例如: [![2]] [2]

Xi和Xj是代表时间序列的两个对象在绝对timestampts 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作为输入矩阵,我们如何还可以包含用于建模的时间戳矩阵?我不知道这是一个简单的或愚蠢的问题,但现在它让我疯狂:(

谢谢:)

+1

这不是一个有效的内核。也许你的意思是...... x exp( - (ti-tj)^ 2)? – lejlot

+0

嗨,谢谢,是的!你是对的,我只是纠正了描述:),你有什么建议吗? – ZAWD

+2

[在R中为svm编写自定义内核]的可能的重复(http://stackoverflow.com/questions/42633265/write-custom-kernel-for-svm-in-r) – ZAWD

回答

1

因此,这不是一个通用的解决方案,但在你的特定情况下没有必要对于定制的内核,让分别表示AI =(十一,TI)和Bi =(十一,1 /开方(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))至d ata表示并应用常规的RBF内核。

+0

嗨,谢谢你的回答,如果我正确理解你的想法,bi =(xi,1/g * ti)应该是bi =(xi,1/sqr(g)* ti):), – ZAWD

+0

yes,我输了^ 2 :) – lejlot

+0

嗨,谢谢回复,但基于你的想法,我们如何在R中实现它? (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模型:真的很期待你的回答,并且谢谢你! – ZAWD