我正在使用机器学习库开发软件,使用的库是https://www.npmjs.com/package/machine_learning
根据SVM的示例:
svm.train({ C : 1.1, // 默认值 : 1.0. SVM中的C值 tol : 1e-5, // 默认值 : 1e-4. 更高的容忍度意味着更高的精度 max_passes : 20, // 默认值 : 20. 更高的最大通过次数意味着更高的精度 alpha_tol : 1e-5, // 默认值 : 1e-5. 更高的alpha容忍度意味着更高的精度 kernel : { type: "polynomial", c: 1, d: 5} // 默认值 : {type : "gaussian", sigma : 1.0} // {type : "gaussian", sigma : 0.5} // {type : "linear"} // x*y // {type : "polynomial", c : 1, d : 8} // (x*y + c)^d // 或者你可以使用自己的核函数 // kernel : function(vecx,vecy) { return dot(vecx,vecy);} });
参数C告诉SVM优化算法你希望避免错误分类每个训练样本的程度。
我对其他参数不太理解。
回答:
只需查看软边界C-SVM的方程:
它指出C定义了错误分类和边界之间的权衡。这必须根据你的数据选择足够大的值。你还会在这里看到eps>0参数。这可能是你的tolerance参数,它定义了目标函数中由C参数加权的误差。
对于kernel parameters,查看SVM的对偶问题:
你会看到术语K(x_i,x_j)。这被称为Kernel-Function(核函数)。这个函数允许SVM学习非线性决策边界。因此,如果你的数据不是线性可分的,你可以使用这样的函数来转换你的数据,实际上是dot-product(点积),将其转换到更高维度的特征空间中,以便在那里进行分离。只需查看这个指南,它将教你SVM训练过程的基础知识和一些最佳实践:

