机器学习-支持向量机 SVM

 

目录

一、支持向量机介绍

支持向量

二、算法分析

1、线性可分情况

2、线性不可分情况

① 线性不可分的理解

  ② 核函数

 三、算法代码

1. 实现一个简单的线性SVM模型

 结果展示:​编辑

  2. 实现一个带核函数的SVM模型

 结果展示:

四、应用分析

1、适用场景

2、优缺点

一、支持向量机介绍


支持向量机是有监督学习中最有影响力的机器学习算法之一。

SVM 是一种非常优雅的算法,有着非常完善的数学理论基础,其预测效果,在众多机器学习模型中“出类拔萃”。在深度学习没有普及之前,“支持向量机”可以称的上是传统机器学习中的“霸主”。

支持向量机是一种二分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。支持向量机的学习算法是求解凸二次规划的最优化算法。

基础的SVM算法是一个二分类算法,至于多分类任务,可以通过多次使用SVM进行解决。

支持向量

样本中距离超平面最近的一些点,叫做支持向量,由于较远的点与不影响超平面的建立,其主要通过支持向量建立而来。如下图所示:

二、算法分析


下面分两种不同的情况来介绍此算法

1、线性可分情况


线性可分的理解
线性可分就是可以用一个线性函数把两类样本分开,比如二维空间中的直线、三维空间中的平面以及高维空间中的线性函数。用二维空间举例,如下图就是一个线性可分的两类样本(蓝色球和红色球),我们可以找到一条直线,将两个类别分开:

2、线性不可分情况

① 线性不可分的理解

在现实世界的问题中,样本往往不是完全线性可分的,简单来说就是你一个数据集不可以通过一个线性分类器(直线、平面)来实现分类,例如如下图所示的情况,我们从二维空间,很难找到一个超平面,能将下图的红色方框和绿色小球分开

  ② 核函数


作用:
往往在低维空间中,样本是线性不可分问题,但在高维空间中,样本可能是线性可分的。根据这一思想,我们就可提升空间的维度。核函数可以将数据映射到一个更高维的特征空间,使得在这个新的空间中,数据可能变得线性可分。这样,我们就可以在这个新的空间中构建一个超平面来进行分类。

 三、算法代码

1. 实现一个简单的线性SVM模型

        下面,我们将使用Python的SVM库,实现一个简单的线性SVM模型。在这个模型中,我们将使用鸢尾花数据集(Iris dataset)来进行分类。

from sklearn import svm, datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import numpy as np

# 加载数据集
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target
 
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42)
 
# 创建模型
clf = svm.SVC(kernel='linear')
 
# 训练模型
clf.fit(X_train, y_train)
 
# 预测
y_pred = clf.predict(X_test)
 
# 计算准确率
acc = accuracy_score(y_test, y_pred)
print("Accuracy: ", acc)

 结果展示:
  2. 实现一个带核函数的SVM模型

        下面,我们将使用Python来实现一个带有核函数的SVM模型。

from sklearn import svm, datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import numpy as np

# 加载数据集
X, y = datasets.make_circles(n_samples=300, factor=.3, noise=.05)
 
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, 
                        test_size=0.3, random_state=42)
 
# 创建模型
clf = svm.SVC(kernel='rbf', gamma=0.7)
 
# 训练模型
clf.fit(X_train, y_train)
 
# 预测
y_pred = clf.predict(X_test)
 
# 计算准确率
acc = accuracy_score(y_test, y_pred)
print("Accuracy: ", acc)
 结果展示:

四、应用分析


1、适用场景


通过上述介绍可知,SVM适用于线性可分问题和非线性可分问题,可以应用在许多实际场景中,以下是几个具体的实际应用场景,以及相应的数据说明:

文本分类:SVM可用于将文本数据进行分类,例如将电子邮件分类为垃圾邮件或非垃圾邮件。数据集可以包含已标记的电子邮件,每个电子邮件都有一些特征(如词频、词向量等)和相应的标签(垃圾邮件或非垃圾邮件)。


图像分类:SVM可用于图像分类任务,例如将图像分为不同的类别,如动物、车辆、建筑等。数据集可以包含图像样本及其相应的特征向量,这些特征向量可以是从图像中提取的特征,如颜色直方图、纹理特征等。


生物医学数据分析:SVM在生物医学领域中也有广泛应用,例如基因表达数据的分类和预测。数据集可以包含基因表达数据样本及其对应的分类标签(如肿瘤类型)。基因表达数据通常以基因表达水平的数值表示,可以是来自基因芯片或测序技术的数据。


金融风险评估:SVM可用于金融领域中的风险评估,例如将信贷申请进行分类,判断是否接受或拒绝申请。数据集可以包含申请人的各种特征,如收入、信用历史、债务情况等,以及相应的标签(接受或拒绝)。


这些是仅举几个例子,实际上SVM在许多领域中都有应用,包括图像处理、自然语言处理、生物信息学、推荐系统等。根据具体的应用领域和问题,数据的特征和标签会有所不同,但SVM的基本原理和方法都可以应用于这些领域。

2、优缺点


优点: SVM在处理高维数据和样本量较小的情况下表现良好,具有较强的泛化能力;通过使用核函数,SVM可以解决非线性分类问题;通过间隔最大化,SVM对噪声数据具有较好的鲁棒性。
缺点: SVM在处理大规模数据时计算复杂度较高;对于大规模数据集,训练时间较长;SVM对于参数的选择和核函数的选择比较敏感,需要进行调优。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值