开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2024.02.10辽宁
本文要点:聊聊支持向量机SVM的5大重点!
哈喽,我是cos大壮~
咱们今儿再来聊聊关于SVM的知识点。
SVM在很多人印象中,内心的感觉是一个不太一样的算法、同时也是一个非常非常重要的算法。也是每个人必须要理解的算法!
今天尽可能从最重要、最关键的几方面知识点来进行描述。
大概想了一下,最重要的莫过于这几个点:
咱们先来大概聊聊~
有了大概的印象后,咱们下面再详细的好好说道说道这几种算法的细节,有助于更好地理解和应用SVM算法。
在SVM中,最大间隔分类器的目标是找到一个能够最好地分隔不同类别数据的超平面。在二维空间中,这个超平面实际上是一条线。
最大间隔分类器的关键思想是选择一个超平面,它不仅能够正确地分类数据点,而且在这个超平面两侧的间隔(即最近的数据点到超平面的距离)是最大的。
这种方法的优势在于它提供了一种泛化能力更强的决策边界。
对于一个线性可分的二分类问题,假设我们有训练样本集,其中是特征向量,是类标签(+1或-1)。
SVM试图找到一个分隔超平面,可以表示为,其中是权重向量,是偏置。
目标是最大化间隔,即最小化的同时,确保所有数据点正确分类。这可以表述为以下优化问题:
理解最大间隔分类器的一个好方法是将其视为在两类数据点之间找到最宽的“街道”。街道的边界就是由支持向量定义的,而街道本身就是间隔。SVM的目标是最大化这个“街道”的宽度。
下面是一个简单的Python示例,使用Scikit-learn库来训练一个SVM模型,并用matplotlib库绘制出最大间隔分类器。给出代码,大家可以用来练手。
我们用一些简单的二维数据点进行展示:
这段代码将生成SVM的决策边界、间隔以及支持向量。这是最大间隔分类器在二维空间中的直观展示。
接下来咱们聊聊支持向量的部分。
直观理解呢,就是支持向量是最靠近决策边界的点,它们在确定这个边界时起到了关键作用。在SVM中,只有支持向量会影响分割超平面的位置和方向,其他的点不会对其产生影响。
这样用代码画出来的图,更直观地理解支持向量在SVM中的作用。
importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.svmimportSVCfromsklearn.datasetsimportmake_blobs#创建一个简单的数据集X,y=make_blobs(n_samples=50,centers=2,random_state=6)#训练一个SVM模型clf=SVC(kernel='linear',C=1000)clf.fit(X,y)#绘制数据点和分割超平面plt.scatter(X[:,0],X[:,1],c=y,s=30,cmap=plt.cm.Paired)#绘制决策边界ax=plt.gca()xlim=ax.get_xlim()ylim=ax.get_ylim()#创建网格来评估模型xx=np.linspace(xlim[0],xlim[1],30)yy=np.linspace(ylim[0],ylim[1],30)YY,XX=np.meshgrid(yy,xx)xy=np.vstack([XX.ravel(),YY.ravel()]).TZ=clf.decision_function(xy).reshape(XX.shape)#绘制决策边界和边界ax.contour(XX,YY,Z,colors='k',levels=[-1,0,1],alpha=0.5,linestyles=['--','-','--'])#绘制支持向量ax.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=100,linewidth=1,facecolors='none',edgecolors='k')plt.show()示例中,有两类数据点(用不同颜色标记),SVM的目标是找到一个最优的分割超平面(这里是一条直线),将这两类数据点尽可能分开。
支持向量定义了这两个边界超平面,而边界超平面之间的距离即为SVM模型尝试最大化的间隔。这个间隔对于模型的泛化能力和性能至关重要。通过这种方式,SVM确保了对于新数据的健壯分类性能。
核技巧(KernelTrick)允许我们在高维空间中有效地进行计算,而无需直接在这个高维空间中进行运算,这通常会涉及到高昂的计算成本。
核函数计算的是在高维空间中两个点的内积,而不需要显式地计算这些点在高维空间中的坐标。
常见的核函数包括:
在低维空间中线性不可分的数据,在映射到高维空间后,可能变得线性可分。核技巧允许我们在不直接处理高维数据的情况下,实现这种映射的效果。
接下来,使用Python来演示使用径向基函数(RBF)核的SVM如何处理一个非线性可分的数据集。
这幅图展示了如何使用径向基函数(RBF)核的支持向量机(SVM)来处理一个非线性可分的数据集。
在这个示例中,数据以两个同心圆的形式呈现,这是一个典型的非线性可分问题。
这个例子展示了核技巧如何使SVM能够有效处理非线性问题。通过将数据映射到高维空间(在这个高维空间中,数据是线性可分的),RBF核使模型能够找到复杂的非线性决策边界,而无需直接在高维空间中进行计算。这种方法大大提高了SVM在各种数据集上的适用性和效率。
当数据不是完美可分时,我们需要使用软间隔。软间隔允许一些数据点违反最大间隔原则,以此提高模型的泛化能力。
这里引入了两个关键概念:
我们可以使用Python来创建一个简单的可视化,展示不同正则化参数对软间隔SVM的影响。
通过这些图,咱们可以看到:
通过调整正则化参数C,我们可以控制SVM模型的复杂度,找到间隔宽度和分类误差之间的最佳平衡点。
SVM的优化问题是其核心机制,它涉及寻找一个决策边界(在最简单的情况下是一个超平面),这个边界既能正确分类数据,又能最大化类别之间的间隔。
咱们下面从不同角度对SVM的优化问题进行阐述:
SVM的目标是找到一个分割超平面,使得正负样本间隔最大。
数学上,这可以表述为一个优化问题:
在现实世界数据中,完美的线性可分是罕见的。为了处理这种情况,SVM引入了软间隔的概念,允许一些数据点违反上述间隔约束。
这通过引入松弛变量(slackvariables)实现:
为了解决这个带约束的优化问题,SVM使用了拉格朗日乘子法。通过引入拉格朗日乘子,我们可以将原始问题转化为其对偶问题,这通常更易于求解:
核方法允许SVM在更高维空间中有效地处理非线性问题。通过引入核函数,我们可以在原始特征空间中创建非线性决策边界,而无需显式地映射数据到高维空间。
解决SVM优化问题的常见算法包括序列最小优化(SMO)算法和梯度下降方法。SMO算法通过分解大的优化问题为一系列小问题来高效地求解SVM的对偶问题。
总之,SVM的优化问题是一个寻找最佳决策边界的复杂过程,涉及数学优化、正则化处理、拉格朗日对偶性,以及核技巧等多个方面。通过这些机制,SVM能够有效处理各种线性和非线性分类问题。
本项目通过SVM算法对鸢尾花数据集进行分类。我们将使用支持向量机(SVM)和半监督学习技术(标签传播和自训练)来处理这一分类问题。
项目的重点是展示如何在存在部分未标记数据的情况下训练和优化模型。
鸢尾花数据集是机器学习中常用的一个分类数据集。它包含150个样本,分为3个类别,每类50个样本。每个样本有4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。
在本项目中,我们只使用前两个特征(花萼长度和宽度)。
通过在二维空间中可视化决策边界和训练点,我们可以评估每种方法的分类性能。未标记的点以白色显示,而不同类别的标记点以不同颜色显示。
我们首先加载了鸢尾花数据集,并只使用了前两个特征。
然后,创建了不同比例的未标记数据,并应用了标签传播和自训练算法来处理这些半监督学习情况。
最后,我们使用带有RBF核的SVM作为基础分类器,并在二维空间中绘制了每种方法的决策边界。
通过这些可视化,我们可以直观地比较不同方法在处理部分未标记数据时的性能。
通过生成的图形,我们可以直观地看到每种方法的分类效果。对于每种方法,决策边界以及不同类别的数据点都被清晰地展示出来。这种可视化有助于理解不同模型在处理部分标记数据时的表现差异。
本项目展示了如何使用SVM和半监督学习技术来处理部分未标记的数据集。通过实验,我们可以发现在一定比例的未标记数据下,半监督学习方法如标签传播和自训练可能提供与完全监督学习方法相当或更好的性能。这种方法特别适用于那些难以获取完全标记数据的实际应用场景。
给大家准备了《机器学习学习面试册》PDF版本,亮色和暗色!