当前位置: 首页 > news >正文

如何选择SVM中最佳的【核函数】

参数“kernel"在sklearn中可选以下几种 选项:

            接下来我们 就通过一个例子,来探索一下不同数据集上核函数的表现。我们现在有一系列线性或非线性可分的数据,我们希望通过绘制SVC在不同核函数下的决策边界并计算SVC在不同核函数下分类准确率来观察核函数的效果。

         我们先来导入相应的模块:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import svm#from sklearn.svm import SVC  两者都可以
from sklearn.datasets import make_circles, make_moons, make_blobs,make_classification # 生成数据集,make_classification生成分类数据集,make_blobs生成聚类数据集,make_moons生成半月形数据集,make_circles生成环形数据集,make_moons生成月牙形数据集

导入模块后,我们先来用以下代码绘制四种不同类型的分类图:

n_samples = 100datasets = [make_moons(n_samples=n_samples, noise=0.2, random_state=0),make_circles(n_samples=n_samples, noise=0.2, factor=0.5, random_state=1),make_blobs(n_samples=n_samples, centers=2, random_state=5),#分簇的数据集make_classification(n_samples=n_samples,n_features = 2,n_informative=2,n_redundant=0, random_state=5)#n_features:特征数,n_informative:带信息的特征数,n_redundant:不带信息的特征数]Kernel = ["linear","poly","rbf","sigmoid"]#四个数据集分别是什么样子呢?
for X,Y in datasets:plt.figure(figsize=(5,4))plt.scatter(X[:,0],X[:,1],c=Y,s=50,cmap="rainbow")

          我们总共有四个数据集,四种核函数,我们希望观察每种数据集下每个核函数的表现。以核函数为列,以图像分布 为行,我们总共需要16个子图来展示分类结果。而同时,我们还希望观察图像本身的状况,所以我们总共需要20 个子图,其中第一列是原始图像分布,后面四列分别是这种分布下不同核函数的表现。

nrows=len(datasets)
ncols=len(Kernel) + 1
fig, axes = plt.subplots(nrows, ncols,figsize=(20,16))

子图画好后,我们通过循环语句观察在不同的核函数不同的分类情况:

#第一层循环:在不同的数据集中循环
for ds_cnt, (X,Y) in enumerate(datasets):#在图像中的第一列,放置原数据的分布ax = axes[ds_cnt, 0]if ds_cnt == 0:ax.set_title("Input data")ax.scatter(X[:, 0], X[:, 1], c=Y, zorder=10, cmap=plt.cm.Paired,edgecolors='k')ax.set_xticks(())ax.set_yticks(())#第二层循环:在不同的核函数中循环#从图像的第二列开始,一个个填充分类结果for est_idx, kernel in enumerate(Kernel):#定义子图位置ax = axes[ds_cnt, est_idx + 1]#建模clf = svm.SVC(kernel=kernel, gamma=2).fit(X, Y)score = clf.score(X, Y)#绘制图像本身分布的散点图ax.scatter(X[:, 0], X[:, 1], c=Y,zorder=10,cmap=plt.cm.Paired,edgecolors='k')#绘制支持向量ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=50,facecolors='none', zorder=10, edgecolors='k')# facecolors='none':透明的#绘制决策边界x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5#np.mgrid,合并了我们之前使用的np.linspace和np.meshgrid的用法#一次性使用最大值和最小值来生成网格#表示为[起始值:结束值:步长]#如果步长是复数,则其整数部分就是起始值和结束值之间创建的点的数量,并且结束值被包含在内XX, YY = np.mgrid[x_min:x_max:200j, y_min:y_max:200j]#np.c_,类似于np.vstack的功能Z = clf.decision_function(np.c_[XX.ravel(), YY.ravel()]).reshape(XX.shape)#填充等高线不同区域的颜色ax.pcolormesh(XX, YY, Z > 0, cmap=plt.cm.Paired)#绘制等高线ax.contour(XX, YY, Z, colors=['k', 'k', 'k'], linestyles=['--', '-', '--'],levels=[-1, 0, 1])#设定坐标轴为不显示ax.set_xticks(())ax.set_yticks(())#将标题放在第一行的顶上if ds_cnt == 0:ax.set_title(kernel)#为每张图添加分类的分数   ax.text(0.95, 0.06, ('%.2f' % score).lstrip('0'), size=15, bbox=dict(boxstyle='round', alpha=0.8, facecolor='white')#为分数添加一个白色的格子作为底色, transform=ax.transAxes #确定文字所对应的坐标轴,就是ax子图的坐标轴本身, horizontalalignment='right' #位于坐标轴的什么方向)plt.tight_layout()
plt.show()

         由图可知,我们可以观察到,线性核函数和多项式核函数在非线性数据上表现会浮动,如果数据相对线性可分,则表现不错,如果是像环形数据那样彻底不可分的,则表现糟糕。在线性数据集上,线性核函数和多项式核函数即便有扰动项也可以表现不错,可见多项式核函数是虽然也可以处理非线性情况,但更偏向于线性的功能。 Sigmoid核函数就比较尴尬,它在非线性数据上强于两个线性核函数,但效果明显不如rbf,它在线性数据上完全 比不上线性的核函数们,对扰动项的抵抗也比较弱,所以它功能比较弱小,很少被用到。

http://www.lryc.cn/news/222365.html

相关文章:

  • RT-Thread的构建与配置系统
  • 合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(一)
  • Git的简介以及基本使用
  • django安装数据库
  • springboot--外部环境配置
  • 『MySQL快速上手』-④-表的操作
  • 2023年10月Web3行业月度发展报告区块链篇 |陀螺研究院
  • 【TES745D】青翼自研基于复旦微的FMQL45T900全国产化ARM核心模块(100%国产化)
  • 初次给外贸客户发邮件范文
  • C语言中的多种形式的循环结构
  • 7天入门python系列之第二天python 基础语法
  • 【星海出品】flask 与docker
  • Oracle的to_date()函数解决sql语句日期格式问题
  • Vue实现面经基础版案例(路由+组件缓存)
  • uniapp打开外部链接方式
  • SecureCRT安装、注册教程
  • 音乐免费下载mp3格式+音频格式转换+剪辑音频+合并音频教程
  • 腾讯云16核服务器配置有哪些?CPU型号处理器主频性能
  • 什么是屏蔽机房?
  • wsl2 ubuntu22.04安装docker
  • 【Java SE】详解数组
  • windows下直接把文件夹打包成war包
  • 搭建嵌入式GDB调试环境以及VSCode+gdbserver 图形化调试
  • 深入理解 Django 模板系统
  • Flutter:安装依赖报错doesn‘t support null safety
  • MS2111多点低压差分(M-LVDS)线路驱动器和接收器
  • flink的起源、概念、特点、应用
  • 11月第1周榜单丨飞瓜数据B站UP主排行榜榜单(B站平台)发布!
  • Modbus入门
  • Sysmon 日志监控