主要内容
- 运行使用支持向量机SVM需要做的步骤
- 选择SVM或逻辑回归的基本准则
- SVM 与神经网络对比
- 其他核函数 kernel
一、运行使用支持向量机SVM需要做的步骤
1.1、参数
- 一般情况下我们需要自己写软件来求解参数,但是不建议自己写核函数,建议直接使用现有的软件包(如 liblinear,libsvm 等)(关于liblinear\libsvm 的介绍可以参考我的另一个文章) 来最小化 SVM 代价函数
- 强烈建议使用高优化软件库中的一个,而不是尝试自己实现
1.2 参数设置
- 尽管有现成的库,但是我们也需要做几件事:
- 1、参数C的选择
- 2、选择内核参数或你想要使用的相似函数 (注:如果选择不需要任何内核参数,还称为使用了线性核函数 SVM)
1.3、SVM的两种选择
- SVM的选择之一:是选择不带任何内核参数,也叫线性核函数(linear kernel),
- 如果有人说他使用了线性核的SVM(支持向量机),这就意味这他使用了不带有核函数的SVM(支持向量机)。
- SVM的选择之二:使用kernel f(比如高斯核函数Gaussian Kernel),,这里需要选择方差参数σ2
- 注意:如果使用高斯核函数,需要进行特征缩放
二、选择SVM或逻辑回归的基本准则
- 为特征数,为训练样本数
- (1) 如果相较于而言,要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机
- (2) 如果**较小,而且大小中等**,例如在 1-1000 之间,而在10-10000之间,使用高斯核函数的支持向量机
- (3)如果**较小,而较大**,例如在1-1000之间,而大于50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机
- 注意:
- 如果训练集非常大,高斯核函数的SVM 会非常慢。 通常Andrew会尝试手动创建特征,然后用逻辑回归或者不带核函数的 SVM
- (注: 逻辑回归和不带核函数的SVM 非常相似。但是根据实际情况,其中一个可能会更有效。随着 SVM 的复杂度增加、特征数量相当大时,不带核函数的SVM 就会表现得相当突出。)
三、SVM 与神经网络对比
- 神经网络 在第二点上面的三种情况下都可能会有较好的表现 ,但是训练神经网络可能非常慢,
- 选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值
- SVM是一种凸优化,不用担心局部最优;好的SVM优化软件包总是会找到全局最小值,或者接近它的值
- SVM比神经网络快,它是一种体系,一个有效的方法去学习复杂的非线性函数
四、其他核函数 kernel
- 在高斯核函数之外,还有其他一些选择,如:
- 多项式核函数(Polynomial Kernel),
- 字符串核函数(String kernel),
- 卡方核函数( chi-square kernel) ,
- 直方图交集核函数(histogram intersection kernel)
- 它们的目标也都是根据训练集和地标之间的距离来构建新特征。
- 一个核函数需要满足 Mercer’s 定理,才能被 SVM 的优化软件正确处理
- Mercer’s 定理: 任何半正定的函数都可以作为核函数。
- 所谓半正定的函数:是指拥有训练数据集合,我们定义一个矩阵的元素,这个矩阵式nn的,如果这个矩阵是半正定的,那么就称为半正定的函数。
.xn),我们定义一个矩阵的元素,这个矩阵式nn的,如果这个矩阵是半正定的,那么就称为半正定的函数。 - Mercer定理是核函数的充分条件,只要函数满足Mercer定理的条件,那么这个函数就是核函数。