python机器学习-chapter2_13
•核技巧(kernel trick)
所要解决的问题:向原始数据中添加非线性特征,可以让线性模型变得更强大,但不知道要添加哪些特征,若添加过多的特征。计算开销会很大
原理:直接计算扩展特征表示中数据点之间的距离,而不用实际对扩展进行计算
方法:
①多项式核,在一定阶数内计算原始特征所有可能的多项式;
②高斯核,也成为径向基函数核(RBF),考虑所有阶数的所有可能的多项式,但阶数也高,特征重要性越小
•SVC(kernel = 'rbf', C = 10, gamma = 0.1)
C: float参数 默认值为1.0,C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低
kernel: str参数 默认为‘rbf’,算法中采用的核函数类型,可选参数有:
‘linear’:线性核函数
‘poly’:多项式核函数
‘rbf’:径像核函数/高斯核
‘sigmod’:sigmod核函数
‘precomputed’:核矩阵
gamma:float参数 默认为auto
核函数系数,只对‘rbf’,‘poly’,‘sigmod’有效。
如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features.
更多SVC参数见:https://www.cnblogs.com/xiaotan-code/p/6700290.html
•SVM的表现通常很好,但对参数的设定和数据的缩放非常敏感,要求所有特征有相似的变化范围
重要参数:正则化参数C;核;核相关的系数
在RBF核中只有一个参数gamma,是高斯核宽度的倒数,gamma和C同时控制模型复杂度,较大的gamma或C都将增大模型的复杂度,应同时调节
优点:
①模型强大,在各种数据集的表现都很好
②即使在特征很少的情况下,都可以使得决策边界很复杂
③当所有特征的测量单位相似、范围相差不多时,效果很好(比如像素密度)
缺点:
①在样本个数的放缩表现不好,当样本个数超过10000个时,运行的时间和内存都会出现问题
②需要谨慎地数据预处理和调参