2401_83355215 2024-05-13 18:53 采纳率: 50%
浏览 4

svm在python中实现

刚开始接触支持向量机,不是很懂是什么问题直接上图吧,求解答,

img

img

  • 写回答

3条回答 默认 最新

  • 关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    支持向量机(Support Vector Machine,简称SVM)是一种经典的二分类模型,其基本思想是在特征空间中找到一个最优的超平面,使得不同类别的样本点到超平面的距离之和最大。在Python中,可以使用Scikit-learn库实现SVM模型。

    具体实现步骤如下:

    1. 导入必要的库和数据集:
    from sklearn import svm
    from sklearn.datasets import make_blobs
    import numpy as np
    
    X, y = make_blobs(n_samples=100, centers=2, random_state=6)
    
    1. 创建SVM模型,并对数据进行训练:
    clf = svm.SVC(kernel='linear', C=1000)
    clf.fit(X, y)
    

    其中,kernel参数指定核函数,这里使用的是线性核函数;C参数是惩罚系数,如果C越大,则会强调分类的正确性,但容易过拟合。

    1. 画出决策边界和数据点:
    import matplotlib.pyplot as plt
    plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
    
    ax = plt.gca()
    xlim = ax.get_xlim()
    ylim = ax.get_ylim()
    
    xx = np.linspace(xlim[0], xlim[1], 10)
    yy = np.linspace(ylim[0], ylim[1], 10)
    YY, XX = np.meshgrid(yy, xx)
    xy = np.vstack([XX.ravel(), YY.ravel()]).T
    Z = clf.decision_function(xy).reshape(XX.shape)
    
    ax.contour(XX, YY, Z, colors='r', levels=[-1, 0, 1], alpha=0.5,
               linestyles=['--', '-', '--'])
    
    ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,
               linewidth=1, facecolors='none', edgecolors='k')
    
    plt.show()
    

    其中,clf.support_vectors_表示支持向量,即在最优超平面上的点。

    整个实现过程可参考下面的完整代码:

    from sklearn import svm
    from sklearn.datasets import make_blobs
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 导入数据集
    X, y = make_blobs(n_samples=100, centers=2, random_state=6)
    
    # 创建SVM模型
    clf = svm.SVC(kernel='linear', C=1000)
    
    # 拟合数据
    clf.fit(X, y)
    
    # 绘制数据点
    plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
    
    # 绘制超平面和支持向量
    ax = plt.gca()
    xlim = ax.get_xlim()
    ylim = ax.get_ylim()
    
    xx = np.linspace(xlim[0], xlim[1], 10)
    yy = np.linspace(ylim[0], ylim[1], 10)
    YY, XX = np.meshgrid(yy, xx)
    xy = np.vstack([XX.ravel(), YY.ravel()]).T
    Z = clf.decision_function(xy).reshape(XX.shape)
    
    ax.contour(XX, YY, Z, colors='r', levels=[-1, 0, 1], alpha=0.5,
               linestyles=['--', '-', '--'])
    
    ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,
               linewidth=1, facecolors='none', edgecolors='k')
    
    plt.show()
    

    最后可以获得如下图所示的决策边界和支持向量。

    SVM决策边界示意图

    评论

报告相同问题?

问题事件

  • 创建了问题 5月13日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见