sklearn中的支持向量机SVM(上)(二)

核函数能够帮助我们解决三个问题:

第一,有了核函数之后,我们无需去担心究竟应该是什么样,因为非线性SVM中的核函数都是正定核函数(positive definite kernel functions),他们都满足美世定律(Mercer's theorem),确保了高维空间中任意两个向量的点积一定可以被低维空间中的这两个向量的某种计算来表示(多数时候是点积的某种变换)。

clf = SVC(kernel = "rbf").fit(X,y)
plt.scatter(X[:,0],X[:,1],c=y,s=50, cmap="rainbow")
plot_svc_decision_function(clf)

对比其他:

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

除了"linear"以外的核函数都能够处理非线性情况,那究竟什么时候选择哪一个核函数呢?遗憾的是,关于核函数在不同数据集上的研究甚少,谷歌学术上的论文中也没有几篇是研究核函数在SVM中的运用的,更多的是关于核函数在深度学习,神经网络中如何使用。在sklearn中,也没有提供任何关于如何选取核函数的信息。

但无论如何,我们还是可以通过在不同的核函数中循环去找寻最佳的核函数来对核函数进行一个选取。接下来我们就通过一个例子,来探索一下不同数据集上核函数的表现。我们现在有一系列线性或非线性可分的数据,我们希望通过绘制SVC在不同核函数下的决策边界并计算SVC在不同核函数下分类准确率来观察核函数的效用。

1. 导入所需要的库和模块

#1. 导入所需要的库和模块
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

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

#2. 创建数据集,定义核函数的选择
n_samples = 100#样本总量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=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)#两个特征
    #需要被舍弃的特征是0
    ]
Kernel = ["linear","poly","rbf","sigmoid"]#核函数4个,需要4*4个图
#四个数据集分别是什么样子呢?

#画图的循环
for X,Y in datasets:
    plt.figure(figsize=(5,4))
    plt.scatter(X[:,0],X[:,1],c=Y,s=50,cmap="rainbow")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值