如何调整SVM Rank的参数?

我正在使用SVM Rank,它有多个参数,调整这些参数会得到不同的结果。是否有某种机制可以根据验证集上的最佳结果来调整并获得最佳参数?

以下是不同的参数:

Learning Options:     -c float    -> C: 训练误差与边界之间的权衡(默认值 0.01)     -p [1,2]    -> 用于松弛变量的L范数。使用1为L1范数,使用2为平方松弛。(默认值 1)     -o [1,2]    -> 用于损失的重新缩放方法。                    1: 松弛重新缩放                    2: 边界重新缩放                    (默认值 2)     -l [0..]    -> 要使用的损失函数。                    0: 零/一损失                    ?: 请参见下面的特定应用选项                    (默认值 1)Optimization Options (see [2][5]):     -w [0,..,9] -> 结构学习算法的选择(默认值 3):                    0: 在[2]中描述的n-slack算法                    1: 带有收缩启发式的n-slack算法                    2: 在[5]中描述的1-slack算法(原始形式)                    3: 在[5]中描述的1-slack算法(对偶形式)                    4: 在[5]中描述的1-slack算法(对偶形式)带有约束缓存                    9: svm_struct_learn_custom.c中的自定义算法     -e float    -> epsilon: 允许的终止标准容差                    (默认值 0.001000)     -k [1..]    -> 在重新计算QP解之前累积的新约束数量                    (默认值 100)                    (仅用于-w 0和1)     -f [5..]    -> 为每个示例缓存的约束数量                    (默认值 5)(与-w 4一起使用)     -b [1..100] -> 当无法从当前缓存构建违反epsilon的约束时,                    用于刷新缓存的训练集百分比                    (默认值 100%)(与-w 4一起使用)SVM-light Options for Solving QP Subproblems (see [3]):     -n [2..q]   -> 在每次svm-light迭代中进入工作集的新变量数量                    (默认值 n = q)。                    将n设置为小于q以防止锯齿状移动。     -m [5..]    -> 用于内核评估的svm-light缓存大小(以MB为单位)                    (默认值 40)(仅用于-w 1与内核)     -h [5..]    -> 变量需要在多少次svm-light迭代中保持最优状态                    才能被考虑收缩(默认值 100)     -# int      -> 如果在该数量的迭代后没有进展,                    终止svm-light QP子问题优化。                    (默认值 100000)Kernel Options:     -t int      -> 内核函数类型:                    0: 线性(默认值)                    1: 多项式 (s a*b+c)^d                    2: 径向基函数 exp(-gamma ||a-b||^2)                    3: 双曲正切函数 tanh(s a*b + c)                    4: 从kernel.h中定义的用户自定义内核     -d int      -> 多项式内核中的参数d     -g float    -> rbf内核中的参数gamma     -s float    -> 双曲正切/多项式内核中的参数s     -r float    -> 双曲正切/多项式内核中的参数c     -u string   -> 用户定义内核的参数

回答:

这被称为网格搜索。我不知道你是否熟悉python和scikit-learn,但无论如何,我认为他们的描述和示例非常好,且与语言无关。

基本上,你为每个参数指定一些你感兴趣的值(或从中随机抽样的区间,参见随机搜索),然后对于每种设置组合,使用交叉验证(通常是k折交叉验证)来计算模型在这些设置下的表现。表现最佳的组合会被返回(scikit-learn实际上可以返回组合的排名)。

请注意,这可能需要很长时间。你应该根据你的问题对一些参数有相当的把握。例如,对于文本分类,你应该只选择线性内核,对于其他问题,你可能会想要rbf等。不要将所有参数都交给网格搜索,尽可能根据你对算法和手头问题的了解来决定更多的参数。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注