当前位置: 首页 > 原理解释

支持向量机原理matlab-SVM 原理 MATLAB

在讲 SVM 之前,先说说它的背景。
这玩意儿最早是为了解决分类难题,特别是在数据量不大但特征特别多的时候,比如那个经典的“两个垂直直线”要么“两个平行直线”的小例子。
这时候传统的线性分类器,也就是所谓的“超平面”,往往越靠中间越难切准,就连有时候根本分不开。 SVM 的核心思想,实际上是换个思路。它不忙着把线往外推,而是拼命往两边挤,找那种让两边数据点距离最远的直线。
这就好比你在拥挤的电梯里,别人都在往左挤,你如何可能往左走?你得往右挤,把空间留给左边的数据。
这就是所谓的“最大间隔”。为了找到这个间隔,它得利用“间隔向量”这个概念。每一个训练样本都代表一个点,而 SVM 要构造一个向量,表示这个点到分类边界有多远。
这个向量一旦算出来了,整个分类的规则就确定了,出于只要加了这个距离,加上这个规则,就能把任何新点都给分清楚。 那 MATLAB 里如何实现呢?实际上代码框子和其他框架挺像,核心策略就是迭代优化。算法一边算,一边猜,一边改。它会在每一个可能的超平面上跑一遍,看看能不能把数据分开。
要是分得不明显,就调整角度、调整距离,持续尝试,直到找到那个“间隔最大”的那个状态。 举个例子,假设我们有两个类别的点,一边全是红色的,一边全是蓝色的,中间还混着一些杂色。好的线性分类器应当能画出两条线,左边全是红,右边全是蓝,杂色点被完美分割。但 SVM 的目标不只是是画出线,而是让这两条线离红蓝点最远。想象一下,你站在一条线上,要是两边都有红点,那这条线就是错的。
故此它会把线拉得离红色的点尽可能远,拉得离蓝色的点也尽可能远。 在 MATLAB 里写代码,实际上就是把这个难题变成数学上的“凸优化”难题。我们定义一个目标函数,让距离最大化。
与此同时,我们还要加个正则化项,防止模型忒复杂,过度拟合那些噪声。
这就变成了求最小值的难题。算法会不断调整超平面的系数,直到知足所有约束条件。 在这个过程中,数据的功能挺关键。
要是数据忒少,模型挺好办过拟合,找到的间隔别看大,但可能把一局部正常数据挤出去了。
要是数据忒多,计算机内存可能扛不住,要么计算工夫忒长。
这时候就需求通过核函数来处理高维数据,比如把二维的点映射到三维就连更高维,然后在这些高维空间里找间隔最大的平面。 在实际应用中,SVM 的表现实际上挺让人惊喜的。
哪怕数据分布挺乱,要么类别重叠挺严重,只要加个核函数,调整一下超参数,往往能把它“驯服”。
有时候就连能直接找到一条直线,把几千个点的类别分清楚。 自然,SVM 也不是万能的。在某些情况下,比如数据极度不平衡,要么存有明显的噪声和 outliers,线性版 SVM 可能不够用,直接切换成其他算法或许更好。
还有,要是数据是连续的,比如要做回归,那分类器的逻辑就不适用了。SVM 更适合这种“二选一”的判断任务。 最终总结一下。SVM 之故此火,是出于它追求的是“最大间隔”这个几何直觉。它不关心数据内部复杂的分布细节,只关心把两类数据之间的界限划得充足宽。
这种好办而有力的策略,在大量实际工程难题里都能派上用场。
只要手柄调对了,它就能优雅地解决那些看似复杂的分类难题。
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站