一个简单的案例带你了解支持向量机算法(Python代码

一个简单的案例带你了解支持向量机算法(Python代码

2023年6月29日发(作者:)

⼀个简单的案例带你了解⽀持向量机算法(Python代码介绍掌握机器学习算法并不是⼀个不可能完成的事情。⼤多数的初学者都是从学习回归开始的。是因为回归易于学习和使⽤,但这能够解决我们全部的问题吗?当然不⾏!因为,你要学习的机器学习算法不仅仅只有回归!把机器学习算法想象成⼀个装有斧头,剑,⼑,⼸箭,⼔⾸等等武器的军械库。你有各种各样的⼯具,但你应该学会在正确的时间和场合使⽤它们。作为⼀个类⽐,我们可以将“回归”想象成⼀把能够有效切割数据的剑,但它⽆法处理⾼度复杂的数据。相反,“⽀持向量机”就像⼀把锋利的⼑—它适⽤于较⼩的数据集,但它可以再这些⼩的数据集上⾯构建更加强⼤的模型。现在,我希望你现在已经掌握了随机森林,朴素贝叶斯算法和模型融合的算法基础。如果没有,我希望你先抽出⼀部分时间来了解⼀下他们,因为在本⽂中,我将指导你了解认识机器学习算法中关键的⾼级算法,也就是⽀持向量机的基础知识。如果你是初学者,并且希望开始你的数据科学之旅,那么我希望你先去了解⼀些基础的机器学习算法, ⽀持向量机相对来说对于数据科学的初学者来讲的确有⼀点难了。0.什么是分类分析让我们⽤⼀个例⼦来理解这个概念。假如我们的⼈⼝是按照50%-50%分布的男性和⼥性。那么使⽤这个群体的样本,就需要创建⼀些规则,这些规则将指导我们将其他⼈的性别进⾏分类。如果使⽤这种算法,我们打算建⽴⼀个机器⼈,可以识别⼀个⼈是男性还是⼥性。这是分类分析的样本问题。我们将尝试使⽤⼀些规则来划分性别之间的不同。为简单起见,我们假设使⽤的两个区别因素是:个体的⾝⾼和头发长度。以下是样本的散点图。图中的蓝⾊圆圈表⽰⼥性,绿⾊⽅块表⽰男性。图中的⼀些预期见解是:我们⼈⼝中的男性的平均⾝⾼较⾼。我们⼈⼝中的⼥性的头发较长。如果我们看到⼀个⾝⾼180厘⽶,头发长度为4厘⽶的⼈,我们最好的分类是将这个⼈归类为男性。这就是我们进⾏分类分析的⽅法。1.什么是⽀持向量机“⽀持向量机”(SVM)是⼀种有监督的机器学习算法,可⽤于分类任务或回归任务。但是,它主要适⽤于分类问题。在这个算法中,我们将每个数据项绘制为n维空间中的⼀个点(其中n是你拥有的是特征的数量),每个特征的值是特定坐标的值。然后,我们通过找到很好地区分这两个类的超平⾯来执⾏分类的任务(请看下⾯的演⽰图⽚)。⽀持向量只是个体观测的坐标。⽀持向量机是⼀个最好地隔离两个类(超平⾯或者说分类线)的前沿算法。在我第⼀次听到“⽀持向量机”这个名字,我觉得这个名字听起来好复杂,如果连名字都这么复杂的话,那么这个名字的概念将超出我的理解。幸运的是,在我看了⼀些⼤学的讲座视频,才意识到这个算法其实也没有那么复杂。接下来,我们将讨论⽀持向量机如何⼯作。我们将详细探讨该技术,并分析这些技术为什么⽐其他技术更强。2.它是如何⼯作的?上⾯,我们已经习惯了⽤超平⾯来隔离两种类别的过程,但是现在最迫切的问题是“我们如何识别正确的超平⾯?”。关于这个问题不⽤急躁,因为它并不像你想象的那么难!让我们⼀个个的来理解如何识别正确的超平⾯:选择正确的超平⾯(场景1):这⾥,我们有三个超平⾯(A、B、C)。现在,让我们⽤正确的超平⾯对星形和圆形进⾏分类。你需要记住⼀个经验的法则来识别正确的超平⾯:“选择更好的可以隔离两个类别的超平⾯”。在这种情况下,超平⾯“B”就⾮常完美的完成了这项⼯作。选择正确的超平⾯(场景2):在这⾥,我们有三个超平⾯(A,B,C),并且所有这些超平⾯都很好地隔离了类。现在,我们如何选择正确的超平⾯?在这⾥,在这⾥,将最近的数据点(任⼀类)和超平⾯之间的距离最⼤化将有助于我们选择正确的超平⾯。该距离称为 边距 。让我们看⼀下下⾯的图⽚:上⾯,你可以看到超平⾯C的边距与A和B相⽐都很⾼。因此,我们将正确的超平⾯选择为C。选择边距较⾼的超平⾯的另⼀个决定性因素是稳健性。如果我们选择⼀个低边距的超平⾯,那么很有可能进⾏错误分类。选择正确的超平⾯(场景3):提⽰: 使⽤我们前⾯讨论的规则来选择正确的超平⾯你们中的⼀些⼈可能选择了超平⾯B,因为它与A相⽐具有更⾼的边距。但是SVM选择超平⾯是需要在最⼤化边距之前准确地对类别进⾏分类。这⾥,超平⾯B有⼀个分类的错误,⽽且A进⾏了正确的分类。因此,正确的超平⾯应该是A.我们可以对这个两个类进⾏分类吗?(场景4):下⾯这张图⽚中,我们⽆法使⽤直线来分隔这两个类,因为其中⼀个星星位于圆形类别的区域中作为⼀个异常值。正如我刚刚已经提到的,另⼀端的那⼀颗星星就像是⼀个异常值。SVM具有忽略异常值并找到具有最⼤边距的超平⾯的功能。因此,我们可以说,SVM对异常值有很强的稳健性找到⼀个超平⾯⽤来隔离两个类别(场景5):在下⾯的场景中,我们不能在两个类之间有线性的超平⾯,那么SVM如何对这两个类进⾏分类?到⽬前为⽌,我们只研究过线性超平⾯。SVM可以解决这个问题。并且是轻松就可以做到!它通过引⼊额外的特征来解决这个问题。在这⾥,我们将添加⼀个新特征现在,让我们绘制轴x和z上的数据点:在上图中,要考虑的问题是:z的所有值都是正的,因为z是x和y的平⽅和在原图中,红⾊圆圈出现在靠近x和y轴原点的位置,导致z值⽐较低。星形相对远离原点,导致z值较⾼。在SVM中,很容易就可以在这两个类之间建⽴线性超平⾯。但是,另⼀个需要解决的问题是,我们是否需要⼿动添加⼀个特征以获得超平⾯。不,并不需要这么做,SVM有⼀种称为 核技巧 的技术。这些函数把低维度的输⼊空间转换为更⾼维度的空间,也就是它将不可分离的问题转换为可分离的问题,这些函数称为内核函数。它主要⽤于⾮线性的分离问题。简⽽⾔之,它执⾏⼀些⾮常复杂的数据转换,然后根据你定义的标签或输出找出分离数据的过程。当SVM找到⼀条合适的超平⾯之后,我们在原始输⼊空间中查看超平⾯时,它看起来像⼀个圆圈:现在,让我们看看在数据科学中应⽤SVM算法的⽅法。3.如何在Python中实现SVM?在Python中,scikit-learn是⼀个⼴泛使⽤的⽤于实现机器学习算法的库,SVM也可在scikit-learn库中使⽤并且遵循相同的结构(导⼊库,创建对象,拟合模型和预测)。我们来看下⾯的代码:导⼊库from sklearn import svmPYthon学习企鹅裙:88198-2657 领取python⾃动化编程资料教程假设您有⽤于训练数据集的X(特征数据)和Y(⽬标),以及测试数据的x_test(特征数据)创建SVM分类对象model = (kernel='linear', c=1, gamma=1)与之相关的选项有很多,⽐如更改kernel值(内核)、gamma值和C值。下⼀节将对此进⾏更多讨论。使⽤训练集训练模型,并检查成绩(X, y)(X, y)预测输出predicted= t(x_test)4.如何调整SVM的参数?对机器学习算法进⾏调整参数值可以有效地提⾼模型的性能。让我们看⼀下SVM可⽤的参数列表。(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False,tol=0.001,cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None)下⾯将讨论⼀些对模型性能影响较⼤的重要参数,如“kernel”,“gamma”和“C”。kernel:我们之间已经简单的讨论过了。在算法参数中,我们可以为kernel值提供各种内核选项,如“linear”,“rbf”,“poly”等(默认值为“rbf”)。其中“rbf”和“poly”对于找到⾮线性超平⾯是很有⽤的。让我们看⼀下这个例⼦,我们使⽤线性内核函数对iris数据集中的两个特性进⾏分类。⽰例:使⽤linear的内核import numpy as npimport as pltfrom sklearn import svm, datasets导⼊数据iris = _iris()X = [:, :2] #我们可以只考虑前两个特征我们可以使⽤双数据集来避免丑陋的切⽚y = 我们创建了⼀个SVM实例并对数据进⾏拟合。不进⾏缩放是因为我们想要画出⽀持向量C = 1.0 #SVM正则化参数svc = (kernel='linear', C=1,gamma=0).fit(X, y)创建⼀个⽹格来进⾏可视化x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1h = (x_max / x_min)/100xx, yy = id((x_min, x_max, h),(y_min, y_max, h))t(1, 1, 1)Z = t(np.c_[(), ()])Z = e()rf(xx, yy, Z, cmap=, alpha=0.8)r(X[:, 0], X[:, 1], c=y, cmap=)('Sepal length')('Sepal width')((), ())('SVC with linear kernel')()⽰例:使⽤RBF内核将内核类型更改为下⾯的代码⾏中的rbf并查看影响。svc = (kernel ='rbf',C = 1,gamma = 0).fit(X,y)](如果你有⼤量的特征数据(> 1000),那么我建议你去使⽤线性内核,因为数据在⾼维空间中更可能是线性可分的。此外,你也可以使⽤RBF,但不要忘记交叉验证其参数,以避免过度拟合。gamma:'rbf','poly'和'sigmoid'的内核系数。伽马值越⾼,则会根据训练数据集进⾏精确拟合,也就是泛化误差从⽽导致过拟合问题。⽰例:如果我们使⽤不同的伽玛值,如0,10或100,让我们来查看⼀下不同的区别。svc = (kernel ='rbf',C = 1,gamma = 0).fit(X,y)C:误差项的惩罚参数C. 它还控制了平滑决策边界与正确分类训练点之间的权衡。我们应该始终关注交叉验证的分数,以便更有效地组合这些参数并避免过度拟合。的优缺点优点:它⼯作的效果很明显,有很好的分类作⽤它在⾼维空间中同样是有效的。它在尺⼨数量⼤于样本数量的情况下,也是有效的。它在决策函数(称为⽀持向量)中使⽤训练点的⼦集,因此它的内存也是有效的缺点:当我们拥有⼤量的数据集时,它表现并不好,因为它所需要的训练时间更长当数据集具有很多噪声,也就是⽬标类重叠时,它的表现性能也不是很好SVM不直接提供概率估计,这些是使⽤昂贵的五重交叉验证来计算的。它是Python scikit-learn库的相关SVC⽅法。实践问题找到⼀个正确的超平⾯⽤来将下⾯图⽚中的两个类别进⾏分类结语在本⽂中,我们详细介绍了机器学习算法中的⾼阶算法,⽀持向量机(SVM)。我们讨论了它的⼯作原理,python中的实现过程,通过调整模型的参数来提⾼模型效率的技巧,讨论了SVM的优缺点,以及最后留下的⼀个要你们⾃⼰解决的问题。我建议你使⽤SVM并通过调整参数来分析此模型的能⼒。⽀持向量机是⼀种⾮常强⼤的分类算法。当与随机森林和其他机器学习⼯具结合使⽤时,它们为集合模型提供了⾮常不同的维度。因此,在需要⾮常⾼的预测能⼒的情况下,他们就显得⾮常重要。由于公式的复杂性,这些算法可能稍微有些难以可视化。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687977747a62905.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信