分类(四)—— 支持向量机

主要内容
分类概述
决策树归纳
K近邻算法
支持向量机
朴素贝叶斯分类
模型评估与选择
组合分类
小结

四、支持向量机

支持向量机(Support Vetor Machine,SVM)由Vapnik等人于1995年首先提出,在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并推广到人脸识别、行人检测和文本分类等其他机器学习问题中。

SVM建立在统计学习理论的VC维理论和结构风险最小原理基础上,根据有限的样本信息在模型的复杂性和学习能力之间寻求最佳平衡,以求获得最好的推广能力。SVM可以用于数值预测和分类。

算法原理

支持向量机是一种对线性和非线性数据进行分类的方法。它使用一种非线性映射,把原始训练数据映射到较高的维上,在新的维上搜索最佳分离超平面。

分类(四)—— 支持向量机

SVM可分类为三类:线性可分的线性SVM、线性不可分的线性SVM、非线性SVM。
如果训练数据线性可分,则通过硬间隔最大化学习得到一个线性分类器即线性可分支持向量机,也称为硬间隔支持向量机;
如果训练数据近似线性可分,则通过软间隔最大化学习得到一个线性分类器即线性支持向量机,也称为软间隔支持向量机;
对于数据非线性可分的情况,通过扩展线性SVM的方法,得到非线性的SVM,即采用非线性映射把输入数据变换到较高维空间,在新的空间搜索分离超平面。

1.数据线性可分的情况

SVM的主要目标是找到最佳超平面,以便在不同类的数据点之间进行正确分类。超平面的维度等于输入特征的数量减去1。图7-5显示了分类的最佳超平面和支持向量(实心的数据样本)。

分类(四)—— 支持向量机
分类(四)—— 支持向量机
分类(四)—— 支持向量机
分类(四)—— 支持向量机
分类(四)—— 支持向量机
分类(四)—— 支持向量机
点 x 到超平面的距离:
分类(四)—— 支持向量机
分类(四)—— 支持向量机
从分离超平面到到H1上任意点的距离是
分类(四)—— 支持向量机
因此最大边缘是
分类(四)—— 支持向量机
分类(四)—— 支持向量机
分类(四)—— 支持向量机
分类(四)—— 支持向量机
分类(四)—— 支持向量机
分类(四)—— 支持向量机
2.数据非线性可分的情况

在某些情况下,训练数据甚至连近似的线性划分也找不到,线性超平面无法有效划分正类与负类,而是需要超曲面等非线性划分。然而,非线性的优化问题很难求解。通常的做法是将输入向量从输入的空间投射到另一个空间,如图7-6所示。在这个特征空间中,投射后的特征向量线性可分或者近似线性可分,然后通过线性支持向量机的方法求解。

分类(四)—— 支持向量机
然而这样做也带来一个新的问题,即使得投射后的特征向量(近似)线性可分的特征空间维度往往比原输入空间的维度高很多,甚至具有无限个维度。为了解决新特征空间维度高的问题,引入 核方法(Kernal Method),在计算中不需要直接进行非线性变换,从而避免由计算高维度向量带来的问题。

常用的核函数:

分类(四)—— 支持向量机
python算法实现

在sklearn中SVM的算法库分为两类,一类是 分类的算法库,包括SVC、NuSVC和LinearSVC 3个类。另一类是 回归算法库,包括SVR、NuSVR和LinearSVR 3个类。相关的类都包括在sklearn.svm模块之中。

利用SVM对Iris数据集分类。

import numpy as np
from sklearn import svm
from sklearn import datasets
from sklearn import metrics
from sklearn import model_selection
import matplotlib.pyplot as plt
iris = datasets.load_iris()
x,y = iris.data,iris.target
x_train,x_test,y_train,y_test = model_selection.train_test_split(x,y,random_state=1,test_size=0.2)
classifier=svm.SVC(kernel='linear',gamma=0.1,decision_function_shape='ovo',C=0.1)
classifier.fit(x_train,y_train.ravel())
print("SVM-输出训练集的准确率为:",classifier.score(x_train,y_train))
print("SVM-输出测试集的准确率为:",classifier.score(x_test,y_test))
y_hat=classifier.predict(x_test)
classreport=metrics.classification_report(y_test,y_hat)
print(classreport)

分类(四)—— 支持向量机

Original: https://blog.csdn.net/shi_jiaye/article/details/119797087
Author: shi_jiaye
Title: 分类(四)—— 支持向量机

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/664112/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球