首页 > 其他分享 >支持向量机上的核函数对比

支持向量机上的核函数对比

时间:2023-04-24 21:33:46浏览次数:33  
标签:plt 函数 机上 make XX set samples ax 向量

探索核函数在不同数据集上的表现

导入模块

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import svm
from sklearn.datasets import make_circles, make_moons, make_blobs,make_classification

创建数据集,定义核函数的选择

n_samples = 100

# 创建数据列表
datasets = [
    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=0), 
    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)
    ]

# 创建核函数列表
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")


开始进行子图循环

#   构建子图
nrows = len(datasets)
ncols = len(Kernel) + 1
fig, axes = plt.subplots(nrows, ncols, figsize=(20, 16))

#   enumerate(datasets)结构 = (index,(X, Y))
#   第一层循环:在不同的数据集中循环
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')
        #   绘制决策边界
        x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
        y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
        #   一次性使用最大值和最小值来生成网格
        #   表示为[起始值:结束值:步长]
        #   如果步长是复数,则其整数部分就是起始值和结束值之间创建的点的数量,并且结束值被包含在内
        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), size=15
                , bbox=dict(boxstyle='round', alpha=0.8, facecolor='white')
                #   为分数添加一个白色的格子作为底色
                , transform=ax.transAxes #  确定文字所对应的坐标轴,就是ax子图的坐标轴本身 
                , horizontalalignment='right'#  位于坐标轴的什么方
                ) 
plt.tight_layout()
plt.show()
/var/folders/rd/3p75tbv52n57f69fdxmzbdvc0000gn/T/ipykernel_1566/1017815882.py:42: UserWarning: No contour levels were found within the data range.
  ax.contour(XX, YY, Z, colors=['k', 'k', 'k'], linestyles=['--', '-', '--'], levels=[-1, 0, 1])

标签:plt,函数,机上,make,XX,set,samples,ax,向量
From: https://www.cnblogs.com/thankcat/p/17350972.html

相关文章

  • Vue关于beforeRouteEnter以及beforeRouteLeave函数的运用
    先上代码beforeRouteEnter:(to,from,next)=>{console.log("进入路由之前")next(vm=>{vm.getData();});},beforeRouteLeave:(to,from,next)=>{console.log("进入路由之后")next();},methods:{getData:f......
  • 一些可能不知道或不熟悉的有用但冷门的库函数
    提取自洛谷日报从C++98到C++20,寻觅甜甜的语法糖们中C++98到C++14的部分。这是菜鸡作者写给自己看的,你认为有缺失可以在评论区说,但是不一定会添加。函数所位于的库就不写了,反正都#include<bits/stdc++.h>了。__lg(x):GNU私货。返回\(\lfloor\log_2x\rfloor\)。__b......
  • 【C/C++】 可变参数函数
    #include<stdio.h>#include<stdarg.h>/***按自定义格式符解析数据*/voidprocess(constchar*fmt,va_listargs){for(;*fmt;fmt++){if(*fmt=='%'){continue;}switch(*fmt){ca......
  • PHP中的引用参数的函数
    前言php的引用(就是在变量或者函数、对象等前面加上&符号)在PHP中引用的意思是:不同的名字访问同一个变量内容。与C语言中的指针是有差别的。C语言中的指针里面存储的是变量的内容在内存中存放的地址,函数的引用返回多用在对象中引用参数的函数格式说明如下代码所示:voidfunName(array......
  • recv函数具有包的提前预读
    #include<sys/types.h>#include<sys/socket.h>ssize_trecv(intsockfd,void*buf,size_tlen,intflags);1.具有紧急指针功能2.具有带外数据3.数据包提前预读ssize_trecvfrom(intsockfd,void*buf,size_tlen,intflags,......
  • 第六章 重新组织函数
    6.1提炼函数 一个过长的函数或者一段,需要注释才能理解用途的代码,将这段代码放入一个独立的函数。每个函数的粒度很小,复用的机会就会很大。高层函数可读性就很高,看起来就是再读一堆注释。函数都是细粒度,复写也会更容易。提炼出的函数,根据这个函数的意图来命名(以它做什么命名,......
  • 构造函数私有化或保护化
    构造函数私有化或保护化摘自:https://blog.csdn.net/caoyangxiaoyao/article/details/81184786构造函数私有化/保护化可以将构造函数设置为私有函数,但是这样做就无法从外部直接调用构造函数,因此就无法直接构造这个类的对象。1.如果你不想让外面的用户直接构造一个类(类A)的对象,而是......
  • 13、c++使用单例模式实现命名空间函数
    本案例实现一个test命名空间,此命名空间内有两个函数,分别为getName()和getNameSpace();声明命名空间及函数namespacetest{conststd::string&getName()和();conststd::string&getNameSpace();}命名空间内实现单例类实现一个单例类,构造函数要为private,自身对......
  • 箭头函数
    箭头函数提供了一种更加简洁的函数书写方式。基本语法是:参数=>函数体箭头函数多用于匿名函数的定义//传统方式定义函数varf1=function(a){returna}//console.log(f1(3))//es6使用箭头函数定义//参数=>函数体varf2=a=>a//console.log(f2(4)) 使......
  • 05 第一个c函数
    hal_start函数:执行板级初始化,初始化hal层:就是硬件抽象层,分离硬件特性,向上提供接口,让内核不在关注硬件相关的细节,也能方便以后的移植和扩展;Cosmos是x86平台下的,其他平台替换hal层即可;init_hal函数,初始化平台、初始化内存、初始化中断;初始化平台:init_halplatform两个任务:......