Scikit-learn-06.支持向量机算法

文章介绍了支持向量机(SVM)的基本概念,作为一种分类算法,SVM通过构建最大间距的决策边界来提高分类准确性。文中以红蓝球数据集为例,解释了支持向量和间距的概念,并展示了使用Python的scikit-learn库,用线性、多项式和高斯核函数对数据进行分类的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列文章介绍人工智能的基础概念和常用公式。由于协及内容所需的数学知识要求,建议初二以上同学学习。 运行本系统程序,请在电脑安装好Python、matplotlib和scikit-learn库。相关安装方法可自行在百度查找。

支持向量机简称SVM,是Support Vector Machine的缩写。SVM是一种分类算法,在工业界和学术界都有广泛的应用。特别是针对数据集较小的情况下,往往其分类效果比神经网络好。

SVM的最大特点是能构造出最大间距的决策边界,从而提高分类算法的准确性。

如上图,有红球和蓝球的一个数据集进行分类。可以构造一条分隔线把红色和蓝色的球最大限度的分开。这个分隔线就叫分隔超平面。图点,最近圆点到分隔超平面的距离m2比到垂直分隔线的距离m1要大。这个距离就叫间距。

那些离分隔超平面最近的点,称为支持向量。为了达到最好的分类结,SVM的算法原理就是要找到一个分隔超平面,它能把数据集正确的分类,并且不同类别间间距最大。


示例说明

这个例子将在屏幕上随机选3个中心点,并在中心点周围一共随机画100个点。然后分别用线性、多项式和高斯三种核函数似合方式对屏幕上的点进行分类。其中高斯核函数采用两个不同的参数。(核函数是两个向量的内积,它的物理含义是衡量两个向量的相似性。)


示例程序

from sklearn import svm
from sklearn.datasets import make_blobs
from matplotlib import pyplot as plt
import numpy as np
  
#负责画出样本点
def plot_hyperplane(clf, X, y,
                    h=0.02,
                    draw_sv=True,
                    title='hyperplan'):
  
    #根据100个点坐标的范围生成一组网络数据
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                         np.arange(y_min, y_max, h))
  
    plt.title(title)
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())
    plt.xticks(())
    plt.yticks(())
  
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
       
    # 给不同范围的点上色
    Z = Z.reshape(xx.shape)
    plt.contourf(xx, yy, Z, cmap='hot', alpha=0.5)
  
    markers = ['o', 's', '^']
    colors = ['b', 'r', 'c']
    labels = np.unique(y)
    for label in labels:
        plt.scatter(X[y==label][:, 0],
                    X[y==label][:, 1],
                    c=colors[label],
                    marker=markers[label])
  
    if draw_sv:
        sv = clf.support_vectors_
        plt.scatter(sv[:, 0], sv[:, 1], c='y', marker='x')
  
  
  
if __name__ == '__main__':
    #在三个随机中心点周围生成100个随机点
    X,Y = make_blobs(n_samples=100, centers=3,random_state=0, cluster_std=0.8)
  
    #用不同的核函数计算结果。
    #参数C表示对不符合最大间距规则样本的惩罚力度。
    clf_linear = svm.SVC(C=1.0, kernel='linear')
    clf_poly = svm.SVC(C=1.0, kernel='poly', degree=3)
    clf_rbf = svm.SVC(C=1.0, kernel='rbf', gamma=0.5)
    clf_rbf2 = svm.SVC(C=1.0, kernel='rbf', gamma=0.1)
  
    plt.figure(figsize=(10, 10), dpi=144)
  
    clfs = [clf_linear, clf_poly, clf_rbf, clf_rbf2]
    titles = ['Linear Kernel',
              'Polynomial Kernel with Degree=3',
              'Gaussian Kernel with $\gamma=0.5$',
             'Gaussian Kernel with $\gamma=0.1$']
  
    for clf, i in zip(clfs, range(len(clfs))):
       clf.fit(X,Y)
       plt.subplot(2, 2, i+1)
       plot_hyperplane(clf,X,Y, title=titles[i])
  
    plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sun zi chao

你的鼓励是我最大的动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值