使用自定义内核的 LIBSVM 复杂性

问题描述

我正在使用 cppLIBSVM 接口。我正在使用以下函数生成内核:

template <>
double 
jaccard_coeff(const std::vector<double>& x1,const std::vector<double>& x2) {
    // R >= 0
    assert(x1.size() == x2.size());
    size_t min_vsize = std::min(x1.size(),x2.size());
    assert(x1.size() == x2.size());
    double min_sum{0},max_sum{0};
    for (size_t i{0}; i < min_vsize; i++) {
        min_sum += std::min(x1[i],x2[i]);
        max_sum += std::max(x1[i],x2[i]);
    }
    assert(max_sum > 0);
    return min_sum / max_sum;
}

并将结果保存为 LIBSVM 需要的格式。

使用位于 grid.pytools 文件夹中的 LIBSVM,我计算了数据集的最佳参数。该数据集由具有 17,766 特征的 357 行和 3 类组成。 使用 Cgamma认参数(我不应该包括,因为我的内核没有使用 gamma...)我有几个结果小时。

然而,当我为 RBF 中包含的 LIBSVM 内核尝试相同的参数时,它已经计算了 3 天。 我想知道为什么会发生这种情况,如何更快地提供我的内核矩阵。

生成我的内核矩阵不会超过 10 秒,所以我真的很好奇这个。 关于为什么会发生这种情况,我有两个可能的想法:

  1. 也许使用 min-max 内核有助于更快地收敛
  2. 也许内核的实现有点慢

谁能详细说明一下?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...