SVM
- 对数据进行归一化 (simple scaling)
- 使用RBF kernel
- 使用cross_validation 和 grid_search得到最佳参数gamma和C
- 使用得到的最优C和gamma训练训练数据
- 测试
svm的C
C是惩罚系数,即对误差的宽容度。一般可以选择为:10^t , t=[- 4,4]就是0.0001 到10000。c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差
常用核函数
核函数参数设置
- 线性核函数:没有专门需要设置的参数
- 多项式核函数:有三个参数。
-d用来设置多项式核函数的最高次项次数,也就是公式中的d,默认值是3,一般选择1-11:1 3 5 7 9 11,也可以选择2,4,6…。
-g用来设置核函数中的gamma参数设置,也就是公式中的gamma,默认值是1/k(特征数)。
-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。 - RBF核函数:有一个参数。-g用来设置核函数中的gamma参数设置,也就是公式中gamma,默认值是1/k(k是特征数)。
- **sigmoid核函数又叫做S形内核 **:有两个参数。
-g用来设置核函数中的gamma参数设置,也就是公式中gamma,默认值是1/k(k是特征数)。一般可选1 2 3 4
-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。一般可选 0.2 0.4 0.6 0.8 1
rbf核函数gamma :
gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。
需要注意的就是gamma的物理意义,RBF的幅宽会影响每个支持向量对应的高斯的作用范围,从而影响泛化性能。如果gamma设的太大,方差会很小,方差很小的高斯分布长得又高又瘦, 会造成只会作用于支持向量样本附近,对于未知样本分类效果很差,存在训练准确率可以很高,(如果让方差无穷小,则理论上,高斯核的SVM可以拟合任何非线性数据,但容易过拟合)而测试准确率不高的可能,就是通常说的过训练;而如果设的过小,则会造成平滑效应太大,无法在训练集上得到特别高的准确率,也会影响测试集的准确率。
使用grid Search调参比较简单,详见交叉验证与网格搜索算法,而且看起来很naïve。有两个优点:
可以得到全局最优,(C,gamma)相互独立,便于并行化进行。缺点:耗时!!!
KNN
超参数为:n_neighbors /weight/p/algorithm(只有当weight=distance的时候,p值才有意义)
- n_neighbors:取邻近点的个数k。k取1-9测试
- weight:距离的权重,uniform:一致的权重;distance:距离的倒数作为权重
- p:闵可斯基距离的p值; p=1:即欧式距离;p=2:即曼哈顿距离;p取1-6测试
- algorithm: ‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’
在实践中,选择较小的邻居个数(例如3或5个)效果较好,
sklearn中默认使用欧氏距离构建KNN模型速度很快,若训练集很大(特征数多或样本数多),预测速度可能较慢.
对于稀疏数据集(大多数特征值为0),KNN效果很不好.