Python机器学习分类算法(四)-- 支持向量机(Support Vector Machine,SVM)

支持向量机原理

        支持向量机(SVM)是一种基于统计学习理论和结构风险最小原理的有监督学习方法,主要用于数据分类问题。其原理是寻找一个能够将不同类别的样本划分开来的超平面(在二维空间为直线,三维空间为平面,高维空间为超平面),同时要求这个超平面到各个类别样本集的最近点的距离最大化,也就是使得间隔(margin)最大。这些距离超平面最近的样本点被称为支持向量(Support Vectors),它们对模型的构建起着决定性作用。

使用场景

        SVM广泛应用于文本分类、图像识别、生物信息学、医学诊断等领域。特别地,对于高维数据和非线性问题,SVM通过引入核函数(Kernel Function)技巧,将原始数据映射到高维空间,使其在高维空间中线性可分,从而扩展了SVM的适用范围。

优缺点

优点

  1. 在高维空间有效:SVM可以处理高维数据,因为它只与少数支持向量相关,而与数据的维数无关。
  2. 泛化能力强:由于SVM寻找的是间隔最大的超平面,因此其泛化能力通常较强。
  3. 对噪声数据不敏感:SVM只关心支持向量,对远离超平面的噪声数据不敏感。

缺点

  1. 对参数和核函数选择敏感:SVM的性能受到所选参数(如C值、γ值等)和核函数的影响,需要仔细选择。
  2. 训练时间长:对于大规模数据集,SVM的训练时间可能较长。
  3. 不适用于多分类问题:原始的SVM算法只适用于二分类问题,对于多分类问题需要进行扩展。

示例代码(使用Python的scikit-learn库)

        这里以鸢尾花数据集为例,直接使用Python的scikit-learn库,简单的代码如下,如果要使用此方法,可以自行调整参数:

from sklearn import datasets  
from sklearn.model_selection import train_test_split  
from sklearn import svm  
from sklearn.metrics import accuracy_score  
  
# 加载鸢尾花数据集  
iris = datasets.load_iris()  
X = iris.data  
y = iris.target  
  
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  
  
# 创建SVM分类器  
clf = svm.SVC(kernel='linear', C=1.0)  
  
# 训练模型  
clf.fit(X_train, y_train)  
  
# 预测测试集  
y_pred = clf.predict(X_test)  
  
# 计算准确率  
accuracy = accuracy_score(y_test, y_pred)  
print("Accuracy:", accuracy)

        这个示例使用了鸢尾花数据集(Iris dataset),是一个常用的多类分类问题的数据集,我们使用SVM进行二分类问题的扩展,即一对多(one-vs-rest)策略来处理多类分类问题。在这个例子中,我们使用了线性核('linear' kernel)和默认的C值(C=1.0)来训练SVM分类器,然后,我们使用训练好的模型对测试集进行预测,并计算了预测的准确率。

 

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值