支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使训练集上正负样本间隔最大。SVM既可以用来解决线性可分的训练数据,也可以利用核函数解决线性不可分的训练数据。下面利用两张图片直观的表示数据是否线性可分:


图1 线性可分


图2 线性不可分

针对图2在二维平面上线性不可分的数据,是否有办法找出一个模型从而正确的分类数据呢?答案就是投影到更高维的空间中!以图2为例,令

可得到这些数据在三维空间中的分布,如图3所示:

图3 3维空间中的数据

我们能够很直观的找出一个平面区分这两种数据。SVM的原理将数据从低维空间投影到更高维的空间,在该高维空间下,用一个超平面分割这些数据,其核心就是利用核函数。常用的核函数如表1所示:

表1 常用核函数

在本文中,给定一些3特征训练数据,利用高斯核 (RBF) 训练模型。其中有两个非常重要的参数: C和gamma。C表示模型对误差的惩罚系数,gamma反映了数据映射到高维特征空间后的分布;C越大,模型越容易过拟合;C越小,模型越容易欠拟合。gamma越大,支持向量越多,gamma值越小,支持向量越少。gamma越小,模型的泛化性变好,但过小,模型实际上会退化为线性模型;gamma越大,理论上SVM可以拟合任何非线性数据。下面给出3特征训练数据的代码:


令gamma=0.1,运行代码,得出图4的模型:

 

图4 gamma=0.1时的模型

其中粉色点代表训练数据,红点代表测试数据 (其实际背景为异常点),绿色为正常点。再令gamma=4,我们可以得出如下模型:

图5 gamma=20时的模型

虽然采用相同的核函数,在参数的选择上,gamma过高过低都不利于建立准确的模型。图4由于gamma太低,导致模型欠拟合;而图5又因为gamma值太高,导致模型过拟合,就像以为只会背题而不会做题的学生,泛化能力差。利用SVM能够较好地分类数据,在核函数的选择、参数的调整上,需要针对不同的训练集做出适当的模型。对数据的处理过程也是一个需要考虑的因素,通常只给定训练数据,我们需要将这些训练数据分成训练集和测试集,一般训练数据占2/3,测试集占1/3。同时,尽量随机的选择这些训练集和测试集,否则也会造成训练模型的不正确。例如,给定99个数据,其中正例有66个,负例33个,如果将66个正例全部用作训练集,剩余的33个为测试集,其模型的精确度可想而知。


©著作权归作者所有:来自51CTO博客作者mob604756f3c518的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Row size too large Changing some columns to TEXT o
  2. Redis高可用集群搭建,配置,运维与应用!
  3. 什么是增强分析?增强分析如何改善传统BI工具?
  4. Redis 高可用篇:你管这叫主从架构数据一致性同步
  5. 报表分析软件有哪些呢?不急不急,给你推荐几款好用的
  6. AWS 大数据实战 Lab1 - 流数据处理(二)
  7. 数据中心
  8. Linux运维必会的100道MySql面试题之(一)
  9. Mongodb数据库基础入门(一)

随机推荐

  1. Android: PowerManager.WakeLock
  2. android ListView 显示在底部
  3. Android7.0中文文档(API)-- RemoteViews
  4. Android开发---为按钮添加事件的三种方法
  5. Android 面试题及答案(英文)
  6. android的ExpandableListView
  7. i.MX android 2.3 R10.3.1 环境( at ubun
  8. android > Android 音频均衡器,可通过拖动
  9. Android Activity 启动详解
  10. Android欢迎界面引导页