学做网站用到哪些知识,织梦网站图标更换,做网站优化的价格,唐山玉田孤树做宣传上什么网站参数“kernel在sklearn中可选以下几种 选项#xff1a; 接下来我们 就通过一个例子#xff0c;来探索一下不同数据集上核函数的表现。我们现在有一系列线性或非线性可分的数据#xff0c;我们希望通过绘制SVC在不同核函数下的决策边界并计算SVC在不同核函数下分类准确…参数“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_samplesn_samples, noise0.2, random_state0),make_circles(n_samplesn_samples, noise0.2, factor0.5, random_state1),make_blobs(n_samplesn_samples, centers2, random_state5),#分簇的数据集make_classification(n_samplesn_samples,n_features 2,n_informative2,n_redundant0, random_state5)#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],cY,s50,cmaprainbow) 我们总共有四个数据集四种核函数我们希望观察每种数据集下每个核函数的表现。以核函数为列以图像分布 为行我们总共需要16个子图来展示分类结果。而同时我们还希望观察图像本身的状况所以我们总共需要20 个子图其中第一列是原始图像分布后面四列分别是这种分布下不同核函数的表现。
nrowslen(datasets)
ncolslen(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], cY, zorder10, cmapplt.cm.Paired,edgecolorsk)ax.set_xticks(())ax.set_yticks(())#第二层循环在不同的核函数中循环#从图像的第二列开始一个个填充分类结果for est_idx, kernel in enumerate(Kernel):#定义子图位置ax axes[ds_cnt, est_idx 1]#建模clf svm.SVC(kernelkernel, gamma2).fit(X, Y)score clf.score(X, Y)#绘制图像本身分布的散点图ax.scatter(X[:, 0], X[:, 1], cY,zorder10,cmapplt.cm.Paired,edgecolorsk)#绘制支持向量ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s50,facecolorsnone, zorder10, edgecolorsk)# facecolorsnone:透明的#绘制决策边界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, cmapplt.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), size15, bboxdict(boxstyleround, alpha0.8, facecolorwhite)#为分数添加一个白色的格子作为底色, transformax.transAxes #确定文字所对应的坐标轴就是ax子图的坐标轴本身, horizontalalignmentright #位于坐标轴的什么方向)plt.tight_layout()
plt.show() 由图可知我们可以观察到线性核函数和多项式核函数在非线性数据上表现会浮动如果数据相对线性可分则表现不错如果是像环形数据那样彻底不可分的则表现糟糕。在线性数据集上线性核函数和多项式核函数即便有扰动项也可以表现不错可见多项式核函数是虽然也可以处理非线性情况但更偏向于线性的功能。 Sigmoid核函数就比较尴尬它在非线性数据上强于两个线性核函数但效果明显不如rbf它在线性数据上完全 比不上线性的核函数们对扰动项的抵抗也比较弱所以它功能比较弱小很少被用到。