【机器学习】【支持向量机】Python使用Sklearn实战支持向量机模型与决策边界可视化

本文介绍了如何使用scikit-learn中的SVC类,以线性核函数为例,对鸢尾花数据集进行二分类,并展示了支持向量机的决策边界。同时讨论了C参数对过拟合的影响。
摘要由CSDN通过智能技术生成

 API文档:sklearn.svm.SVC-scikit-learn中文社区

import numpy as np
import os
# %matplotlib inline
import matplotlib
import matplotlib.pyplot as plt

plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warnings

warnings.filterwarnings('ignore')

'''导入库与数据集(鸢尾花数据集)'''
from sklearn.svm import SVC
from sklearn import datasets

iris = datasets.load_iris()
X = iris["data"][:, (2, 3)]  ##选择全部样本 仅选择两个特征是便于展示。
y = iris["target"]
###为了演示方便,将三分类问题转化为二分类问题便于决策边界的展示
setosa_or_versicolor = (y == 0) | (y == 1)  ##获得y为1与0值的索引值
X = X[setosa_or_versicolor]
y = y[setosa_or_versicolor]

svm_clf = SVC(kernel="linear", C=1e12)
##使用线性核函数举例  先不管C值参数(控制过拟合)
svm_clf.fit(X, y)

'''绘制支持向量机决策边界'''


def plot_decision_boundary(svm_clf, xmin, xmax, sv=True):
    w = svm_clf.coef_[0]  # 权重参数  得到的为二维数据
    b = svm_clf.intercept_[0]  # 偏置参数
    x0 = np.linspace(xmin, xmax, 200)
    decision_boundary = -w[0] / w[1] * x0 - b / w[1]  ##此处是求解x1  需要根据求解公式解出
    margin = 1 / w[1]
    gutter_up = decision_boundary + margin  ##边界上
    gutter_down = decision_boundary - margin  # 边界下
    if sv:
        svs = svm_clf.support_vectors_  ##得到支持向量 点数据
        plt.scatter(svs[:, 0], svs[:, 1], s=180, facecolors="#FFAAAA")
    plt.plot(x0, decision_boundary, 'k-', linewidth=2)
    plt.plot(x0, gutter_up, 'k--', linewidth=2)
    plt.plot(x0, gutter_down, 'k--', linewidth=2)


'''绘制SVM决策边界'''
plt.figure(figsize=(7, 4))
plot_decision_boundary(svm_clf, 0, 5.5, sv=True)
###绘制数据点
plt.plot(X[:, 0][y == 1], X[:, 1][y == 1], 'bs')
plt.plot(X[:, 0][y == 0], X[:, 1][y == 0], 'ys')
plt.axis([0, 5.5, 0, 2])
plt.show()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值