三亚网站建设兼职网站怎样做反向链接
news/
2025/10/5 0:50:28/
文章来源:
三亚网站建设兼职,网站怎样做反向链接,桂林人论坛网,建设网络平台的核心竞争力支持向量机 一、概述1.1 介绍1.2 工作原理1.3 三层理解 二、sklearn.svm.SVC2.1 查看数据集2.2 contour函数2.3 画决策边界#xff1a;制作网格2.4 建模画图 三、非线性情况推广3.1 查看数据集3.2 线性画图3.3 为非线性数据增加维度并绘制3D图像 四、核函数 一、概述
1.1 介绍… 支持向量机 一、概述1.1 介绍1.2 工作原理1.3 三层理解 二、sklearn.svm.SVC2.1 查看数据集2.2 contour函数2.3 画决策边界制作网格2.4 建模画图 三、非线性情况推广3.1 查看数据集3.2 线性画图3.3 为非线性数据增加维度并绘制3D图像 四、核函数 一、概述
1.1 介绍 1. 支持向量机SVM也称为支持向量网络最擅长分类问题。 2.1从实际应用来看SVM在各种实际问题中都表现非常优秀。它在手写识别数字和人脸识别中应用广泛在文本和超文本的分类中举足轻重因为SVM可以大量减少标准归纳standard inductive和转换设置transductivesettings中对标记训练实例的需求。 2从学术的角度来看SVM是最接近深度学习的机器学习算法。线性SVM可以看成是神经网络的单个神经元虽然损失函数与神经网络不同非线性的SVM则与两层的神经网络相当非线性的SVM中如果添加多个核函数则可以模仿多层的神经网络。
1.2 工作原理 1. 超平面在几何中超平面是一个空间的子空间它是维度比所在空间小一维的空间。 如果数据空间本身是三维的则其超平面是二维平面而如果数据空间本身是二维的则其超平面是一维的直线。在二分类问题中如果一个超平面能够将数据划分为两个集合其中每个集合中包含单独的一个类别我们就说这个超平面是数据的“决策边界”。 2. 先来看看下面这一组数据的分布这是一组两种标签的数据两种标签分别由圆和方块代表。支持向量机的分类方法是在这组分布中找出一个超平面作为决策边界使模型在数据上的分类误差尽量接近于小尤其是在未知数据集上的分类误差泛化误差尽量小。 3. 决策边界一侧的所有点在分类为属于一个类而另一侧的所有点分类属于另一个类。如果我们能够找出决策边界分类问题就可以变成探讨每个样本对于决策边界而言的相对位置。比如上面的数据分布我们很容易就可以在方块和圆的中间画出一条线并让所有落在直线左边的样本被分类为方块在直线右边的样本被分类为圆。如果把数据当作我们的训练集只要直线的一边只有一种类型的数据就没有分类错误我们的训练误差就会为0。 4. 但是对于一个数据集来说让训练误差为0的决策边界可以有无数条。在此基础上我们无法保证这条决策边界在未知数据集测试集上的表现也会优秀。对于现有的数据集来说我们有B1和B2两条可能的决策边界。我们可以把决策边界B1向两边平移直到碰到离这条决策边界最近的方块和圆圈后停下形成两个新的超平面分别是b11和b12。并且我们将原始的决策边界移动到b11和b12的中间确保B1到b11和b12的距离相等。在b11和b12中间的距离叫做 这条决策边界的边际(margin)通常记作d。 对B2也执行同样的操作然后我们来对比一下两个决策边界。现在两条决策边界右边的数据都被判断为圆左边的数据都被判断为方块两条决策边界在现在的数据集上的训练误差都是0没有一个样本被分错。 5. 我们引入和原本的数据集相同分布的测试样本红色所示平面中的样本变多了此时我们可以发现对于B1而言依然没有一个样本被分错这条决策边界上的泛化误差也是0。但是对于B2而言却有三个方块被误分类成了圆二有两个圆被误分类成了方块这条决策边界上的泛化误差就远远大于B1了。这个例子表现出拥有更大边际的决策边界在分类中的泛化误差更小这一点可以由结构风险最小化定律来证明SRM。如果边际很小则任何轻微扰动都会对决策边界的分类产生很大的影响。边际很小的情况是一种模型在训练集上表现很好却在测试集上表现糟糕的情况所以会“过拟合”。所以我们在找寻决策边界的时候希望边际越大越好。 6. 支持向量机就是通过找出边际最大的决策边界来对数据进行分类的分类器。也因此支持向量分类器又叫做最大边际分类器。这个过程在二维平面中看起来十分简单但将上述过程使用数学表达出来就不是一件简单的事情了。
1.3 三层理解 二、sklearn.svm.SVC
2.1 查看数据集
from sklearn.datasets import make_blobs #生成聚类数据集
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import numpy as npx,ymake_blobs(n_samples100,centers2,random_state0,cluster_std0.6)
plt.scatter(x[:,0],x[:,1],cy,s50,cmaprainbow)
plt.show()2.2 contour函数 1. 函数matplotlib.axes.Axes.contour([X, Y,] Z, [levels], **kwargs)。 2. Contour是我们专门用来绘制等高线的函数。等高线本质上是在二维图像上表现三维图像的一种形式其中两维X和Y是两条坐标轴上的取值而Z表示高度。Contour就是将由X和Y构成平面上的所有点中高度一致的点连接成线段的函数在同一条等高线上的点一定具有相同的Z值。我们可以利用这个性质来绘制我们的决策边界。
参数含义X和Y选填。两维平面上所有的点的横纵坐标取值一般要求是二维结构并且形状需要与Z相同往往通过numpy.meshgrid()这样的函数来创建。如果X和Y都是一维则Z的结构必须为(len(Y), len(X))。如果不填写则默认X range(Z.shape[1])Y range(Z.shape[0])。Z必填。平面上所有的点所对应的高度。levels可不填不填默认显示所有的等高线填写用于确定等高线的数量和位置。如果填写整数n则显示n个数据区间即绘制n1条等高线。水平高度自动选择。如果填写的是数组或列表则在指定的高度级别绘制等高线。列表或数组中的值必须按递增顺序排列。
2.3 画决策边界制作网格
ax plt.gca()
xlim ax.get_xlim() # 返回上面图的x轴的最小值和最大值
ylim ax.get_ylim() # 返回上面图的y轴的最小值和最大值# print(xlim,ylim) #(-0.7425578984849813, 3.3721920271976598) (-0.41872382476349596, 5.754870487889891)axisx np.linspace(xlim[0], xlim[1], 30) # 根据xlim和ylim绘制网格点
axisy np.linspace(ylim[0], ylim[1], 30)
print(axisx, axisy)axisx, axisy np.meshgrid(axisx, axisy) # 将axisx和axisy分别向y轴和x轴进行扩充广播xy np.vstack([axisx.ravel(), axisy.ravel()]).T # 扩充为30*30的坐标点,后面基于这900个点绘制决策边界plt.scatter(xy[:, 0], xy[:, 1], s1, cmaprainbow)
plt.show()2.4 建模画图
clfSVC(kernellinear).fit(x,y) #建模
zclf.decision_function(xy).reshape(axisx.shape) #每个样本所对应的到决策边界的距离def plot_svc_decision_funtion(model, axNone):if ax is None:ax plt.gca()xlim ax.get_xlim()ylim ax.get_ylim()x np.linspace(xlim[0], xlim[1], 30)y np.linspace(ylim[0], ylim[1], 30)y, x np.meshgrid(y, x)xy np.vstack([x.ravel(), y.ravel()]).TP model.decision_function(xy).reshape(x.shape)ax.contour(x, y, P, colorsk,levels[-1, 0, 1],alpha0.5,linestyles[--, -, --])ax.set_xlim(xlim)ax.set_ylim(ylim)plt.show()
plt.scatter(x[:,0],x[:,1],cy,s50,cmaprainbow)
plot_svc_decision_funtion(clf)三、非线性情况推广
3.1 查看数据集
from sklearn.datasets import make_circles
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import numpy as np
X,y make_circles(100, factor0.1, noise.1)
plt.scatter(X[:,0],X[:,1],cy,s50,cmaprainbow)
plt.show()3.2 线性画图 明显现在线性SVM已经不适合于我们的状况了我们无法找出一条直线来划分我们的数据集让直线的两边分别是两种类别。这个时候如果我们能够在原本的X和y的基础上添加一个维度r变成三维我们再可视化这个数据来看看添加维度让我们的数据如何变化。
def plot_svc_decision_function(model, axNone):if ax is None:ax plt.gca()xlim ax.get_xlim()ylim ax.get_ylim()x np.linspace(xlim[0], xlim[1], 30)y np.linspace(ylim[0], ylim[1], 30)y, x np.meshgrid(y, x)xy np.vstack([x.ravel(), y.ravel()]).TP model.decision_function(xy).reshape(x.shape)ax.contour(x, y, P, colorsk,levels[-1, 0, 1],alpha0.5,linestyles[--, -, --])ax.set_xlim(xlim)ax.set_ylim(ylim)plt.show()
clf SVC(kernel linear).fit(X,y)
plt.scatter(X[:,0],X[:,1],cy,s50,cmaprainbow)
plot_svc_decision_function(clf)3.3 为非线性数据增加维度并绘制3D图像
r np.exp(-(X**2).sum(1))
rlim np.linspace(min(r),max(r),1)
def plot_3D(elev30,azim30,XX,yy):ax plt.subplot(projection3d)ax.scatter3D(X[:,0],X[:,1],r,cy,s50,cmaprainbow)ax.view_init(elevelev,azimazim)ax.set_xlabel(x)ax.set_ylabel(y)ax.set_zlabel(r)plt.show()plot_3D()四、核函数 1. 是一种能够使用数据原始空间中的向量计算来表示升维后的空间中的点积结果的数学方式。具体表现为 2. 核函数确保了高维空间中任意两个向量的点积一定可以被低维空间中的这两个向量的某种计算来表示多数时候是点积的某种变换。选用不同的核函数就可以解决不同数据分布下的寻找超平面问题。在SVC中这个功能由参数“kernel”和一系列与核函数相关的参数来进行控制。之前的代码中我们一直使用这个参数并输入linear。参数“kernel在sklearn中可选以下几种选项 3. 使用其它的核函数画决策边界
clf SVC(kernel rbf).fit(X,y)
plt.scatter(X[:,0],X[:,1],cy,s50,cmaprainbow)
plot_svc_decision_function(clf)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927736.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!