实验六 支持向量机

Author:pingfan_yu
Data:2021.12.6

一、实验目的
使用Python实现支持向量机。

二、实验原理
支持向量机所作的事情其实非常容易理解。先来看看下面这一组数据的分布,这是一组两种标签的数据,两种标签分别由圆和方块代表。支持向量机的分类方法,是在这组分布中找出一个超平面作为决策边界,使模型在数据上的分类误差尽量接近于小,尤其是在未知数据集上的分类误差(泛化误差)尽量小。

三、Python包
(1)sklearn
(2)mglearn
(3)matplotlib
(4)numpy

四、问题描述
有如下数据集:
X :
[[-2.23 -1. ] [-2.06 -1.58] [ 0.22 -2.12] [-1.18 -2.82] [-1.44 -1.55] [-0.5 -1.76] [-0.92 -1.47][-0.71 -4.54] [-1.52 -2.22] [-2.45 -2.62] [-1.31 -2.07] [-3.81 -1.72] [-2.93 -1.88] [-1.19 -2.51] [-0.76 -0.79] [-4. -1.89] [-3.08 -1.99] [-1.96 -1.37] [-0.78 -2.87] [-2.87 -2.07] [ 1.62 3.05] [ 3.15 2.29] [ 1.58 2.45] [ 2.93 3.04] [ 1.13 2.5 ] [ 0.73 1.06] [ 1.22 2.91] [ 2.18 1.41] [ 2.12 2.2 ] [ 1.04 1.9 ] [-0.64 3.57] [ 1.6 3.34] [ 0.52 0.73] [ 4.25 1.86] [ 0.37 2.02] [ 1.95 1.74] [ 3.56 0.85] [ 3.19 1.37] [ 2.93 3.32] [ 1.82 1.68]]
Y:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
试采用sklearn 包使用SVM算法对其进行分类。

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import mglearn
import numpy as np
from sklearn.svm import LinearSVC
X = np.array(
    [[-2.23, - 1.0], [-2.06, -1.58], [0.22, -2.12], [-1.18, -2.82], [-1.44, -1.55], [-0.5, -1.76], [-0.92, -1.47],
     [-0.71, -4.54], [-1.52, -2.22], [-2.45, -2.62], [-1.31, -2.07], [-3.81, -1.72], [-2.93, -1.88], [-1.19, -2.51],
     [-0.76, -0.79], [-4., -1.89], [-3.08, -1.99], [-1.96, -1.37], [-0.78, -2.87], [-2.87, -2.07], [1.62, 3.05],
     [3.15, 2.29], [1.58, 2.45], [2.93, 3.04], [1.13, 2.5], [0.73, 1.06], [1.22, 2.91], [2.18, 1.41], [2.12, 2.2],
     [1.04, 1.9], [-0.64, 3.57], [1.6, 3.34], [0.52, 0.73], [4.25, 1.86], [0.37, 2.02], [1.95, 1.74], [3.56, 0.85],
     [3.19, 1.37], [2.93, 3.32], [1.82, 1.68]])
y = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1])
print(X)
print(y)
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")
plt.show()
linear_svm = LinearSVC().fit(X, y)
mglearn.plots.plot_2d_separator(linear_svm, X)
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")
plt.show()
w, b = linear_svm.coef_, linear_svm.intercept_
print(w, b)


在这里插入图片描述

  • 2
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pingfan_yu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值