针对SVM算法初步研究

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝

心态决定高度,细节决定成败!

  

初识SVM算法:

        支持向量机(Support Vector Machine, SVM)是一种监督学习算法,主要用于分类和回归分析。SVM的基本模型是定义在特征空间上的间隔最大的线性分类器,其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。在分类任务中,SVM试图找到一个超平面来区分不同类别的数据,这个超平面不仅需要正确地分类训练数据,而且还要确保两类数据到这个超平面的距离最大化,这样可以使得模型具备更好的泛化能力。

        SVM能够执行线性或非线性分类、回归,甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一。SVM特别适用于中小型复杂数据集的分类。

超平⾯最⼤间隔

下面左图显示了三种可能的线性分类器的决策边界,虚线代表的模型表现⾮常糟糕,甚⾄都⽆法正确实现分类。

其余两个模型(红线和紫线)在训练集上表现比较完美,但是它们的决策边界与实例过于接近,导致在⾯对新实例时,表现可能不会太好。

而下面右图中的实线代表不仅分离了两个类别,且尽可能远离最近的训练实例

硬间隔和软间隔:

硬间隔分类:

        在上面我们使用超平面进行分割数据的过程中,如果我们严格地让所有实例都不在最大间隔之间,并且位于正确的一边,这就是硬间隔分类。

        硬间隔分类有两个问题,首先,它只在数据是线性可分离的时候才有效;其次,它对异常值非常敏感。

软间隔分类:

        要避免这些问题,最好使用更灵活的模型。目标是尽可能在保持最大间隔宽阔和限制间隔违例(即位于最大间隔之上,甚至在错误的一边的实例)之间找到良好的平衡,这就是软间隔分类。

下面我们来用python写一个简单的SVM模型:

使用Python实现一个简单的SVM算法,可以使用scikit-learn库,这是一个非常流行的机器学习库,它提供了SVM的支持。

首先,需要安装scikit-learn,可以通过pip来安装:

pip install scikit-learn

# 导入必要的库
from sklearn import svm  # SVM分类器
from sklearn.datasets import make_blobs  # 生成模拟数据
import numpy as np  # 数值计算库

# 生成一些随机数据点,分成两组
X, y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)

# 创建一个线性核函数的SVM分类器
# kernel='linear' 指定使用线性核函数
# C=1.0 是惩罚参数C的倒数,表示对误分类的容忍度
clf = svm.SVC(kernel='linear', C=1.0)

# 使用生成的数据训练SVM模型
# fit方法接受特征矩阵X和目标向量y
clf.fit(X, y)

# 生成两个新的数据点,准备用于预测
new_data = np.array([[0, 0], [1, 1]])

# 使用训练好的模型对新数据点进行预测
predictions = clf.predict(new_data)

# 打印预测结果
print("Predictions:", predictions)

代码解释:

  1. 导入必要的库

    • sklearn:Scikit-Learn库,提供了各种机器学习算法。
    • numpy:用于数值运算的库。
  2. 生成数据

    • make_blobs函数用于生成一组模拟的聚类数据点。
    • n_samples参数指定要生成的数据点数量。
    • centers参数指定中心点的数量,本例中为2,意味着生成的数据将大致分为两组。
    • random_state用于设置随机种子,保证每次运行生成相同的数据。
    • cluster_std参数指定了簇的标准差,用来控制生成数据的分散程度。
  3. 创建SVM分类器

    svm.SVC()创建一个支持向量分类器对象。kernel='linear'参数指定使用线性核函数,即寻找一个线性决策边界。C=1.0参数控制了对误分类的惩罚程度,较大的C值意味着模型对误分类的容忍度更低。
  4. 训练模型

    fit(X, y)方法用于训练模型,其中X是特征矩阵,y是目标向量。
  5. 预测新数据

    predict(new_data)方法用于对新的数据点进行分类预测。
  6. 输出结果

    最后,打印出对新数据点的预测结果。

        这个示例展示了如何使用scikit-learnSVC类创建并训练一个简单的线性SVM分类器,并使用该分类器对新的数据点进行预测。这种类型的SVM非常适合处理线性可分的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梵豪

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值