“为SVM插入自定义内核”
你好,
我正在为JMySVMLearner编写一个自定义内核函数,并且有一些问题。不幸的是,论坛搜索不提供任何提示。
据我所知,没有简单的方法来添加一个新的内核函数到JMySVMLearner,所以我做了一个子类TreeJMySVMLearner,我覆盖createKernel(int)方法来初始化我自己的内核。然而,我需要设置内核参数,我不能在createKernel中这样做,因为它是一个静态方法。在原始的JMySVMLearner内核参数在“学习”方法中设置正确,但我不想触摸它。
作为一种解决方案,我在TreeJMySVMLearner(在createKernel函数中使用)中为内核参数制作了静态字段,并覆盖“learn”方法,首先初始化这些参数,然后调用父实现。这是可行的,但远非最佳。有人知道更好的解决方案吗?
作为一个建议:我认为将内核参数初始化块与学习方法分离在一个单独的受保护方法中会使实现新内核的过程更容易,因为应该只覆盖createKernel和这个方法。
我正在为JMySVMLearner编写一个自定义内核函数,并且有一些问题。不幸的是,论坛搜索不提供任何提示。
据我所知,没有简单的方法来添加一个新的内核函数到JMySVMLearner,所以我做了一个子类TreeJMySVMLearner,我覆盖createKernel(int)方法来初始化我自己的内核。然而,我需要设置内核参数,我不能在createKernel中这样做,因为它是一个静态方法。在原始的JMySVMLearner内核参数在“学习”方法中设置正确,但我不想触摸它。
作为一种解决方案,我在TreeJMySVMLearner(在createKernel函数中使用)中为内核参数制作了静态字段,并覆盖“learn”方法,首先初始化这些参数,然后调用父实现。这是可行的,但远非最佳。有人知道更好的解决方案吗?
作为一个建议:我认为将内核参数初始化块与学习方法分离在一个单独的受保护方法中会使实现新内核的过程更容易,因为应该只覆盖createKernel和这个方法。
0
答案
你完全正确。我曾经打算用类似于distancemmeasures类的方式在快速矿机中交换所有这些代码块,但直到现在我才找到时间。
问候,
塞巴斯蒂安。