基于 RBF 的 SVM 模型在 R 中的自定义核函数
custom kernel function in R for SVM model based on RBF
目前我正在使用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作为输入矩阵,我们如何也包含一个时间戳矩阵来建模?我不知道这是一个简单的问题还是愚蠢的问题,但现在它让我抓狂:(
谢谢:)
所以这不是通用解决方案,但在您的特定情况下不需要自定义内核,让我们表示 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 内核。
目前我正在使用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作为输入矩阵,我们如何也包含一个时间戳矩阵来建模?我不知道这是一个简单的问题还是愚蠢的问题,但现在它让我抓狂:(
谢谢:)
所以这不是通用解决方案,但在您的特定情况下不需要自定义内核,让我们表示 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 内核。