龙空技术网

机器学习-支持向量机(SVM:Support Vector Machine)案例

无名无力 122

前言:

眼前你们对“支持向量机实例讲解”大概比较注重,同学们都需要知道一些“支持向量机实例讲解”的相关知识。那么小编也在网络上搜集了一些有关“支持向量机实例讲解””的相关资讯,希望你们能喜欢,咱们快快来学习一下吧!

微信公众号:yale记

关注可了解更多的教程问题或建议,请公众号留言。

背景介绍

我第一次听到“支持向量机”这个名字,我觉得,如果这个名字本身听起来那么复杂,那么这个概念的表述将超出我的理解范围。 幸运的是,我看到了一些大学讲座视频,并意识到这个工具是多么简单有效。 在本文中,我们将讨论支持向量机如何工作。 本文适合那些对此算法知之甚少且对学习新技术有好奇心的读者 。 在以下文章中,我们将详细探讨该技术,并分析这些技术比其他技术更强的案例。

什么是分类分析?

让我们考虑一个例子来理解这些概念。 我们的人口占50%-50%的男性和女性。 使用这个群体的样本,您想要创建一些规则,这些规则将指导我们其他人口的性别等级。 使用这种算法,我们打算建立一个机器人,可以识别一个人是男性还是女性。 这是分类分析的样本问题。 使用一些规则,我们将尝试将人口分为两个可能的部分。 为简单起见,我们假设确定的两个区别因素是:个体的身高和头发长度。 以下是样本的散点图。

图中的蓝色圆圈表示女性,绿色方块表示男性。 图中的一些预期见解是:

我们人口中的男性平均身高较高。

我们人口中的女性头皮较长。

如果我们看到一个身高180厘米,头发长度为4厘米的人,我们最好的猜测是将这个人归类为男性。 这就是我们进行分类分析的方法。

什么是支持向量,什么是SVM?

支持向量只是个别观察的坐标。 例如,(45,150)是对应于女性的支持向量。 支持向量机是一个最好的男性与女性隔离的边界。 在这种情况下,这两个类很好地相互分离,因此更容易找到SVM。

如何找到手头的支持向量机?

有许多可能的前沿可以对问题进行分类。 以下是三个可能的边界。

我们如何确定哪个是这个特定问题陈述的最佳前沿?

解释SVM中目标函数的最简单方法是找到边界与最近支持向量的最小距离(这可以属于任何类)。 例如,橙色边界最接近蓝色圆圈。 最近的蓝色圆圈距离边境2个单位。 一旦我们拥有所有边界的这些距离,我们只需选择具有最大距离的边界(距离最近的支持向量)。 在显示的三个边界中,我们看到黑色边界距离最近的支撑向量(即15个单位)最远。

如果我们找不到隔离类的干净边界怎么办?

在这个商业案例中,我们的工作相对容易找到SVM。 如果分发看起来如下所示怎么办?

在这种情况下,我们看不到直接在当前平面中的直线边界,它可以作为SVM。 在这种情况下,我们需要将这些矢量映射到更高维度的平面,以便它们彼此隔离。 一旦我们开始制定SVM,就会涵盖这些案例。 现在,您可以想象这种转换将导致以下类型的SVM。

原始分布中的每个绿色正方形都映射到变换后的比例尺上。 变换后的规模明显偏离了阶级。 已经提出了许多算法来进行这些变换,其中一些将在以下文章中讨论。

接下来看使用Python的Scikit-learn的SVM案例:

'''The following code is for Support Vector MachinesCreated by - ANALYTICS VIDHYA'''# importing required librariesimport pandas as pdfrom sklearn.svm import SVCfrom sklearn.metrics import accuracy_score# read the train and test datasettrain_data = pd.read_csv('train-data.csv')test_data = pd.read_csv('test-data.csv')# shape of the datasetprint('Shape of training data :',train_data.shape)print('Shape of testing data :',test_data.shape)# Now, we need to predict the missing target # variable in the test data# target variable - Survived# seperate the independent and target variable on training datatrain_x = train_data.drop(columns=['Survived'],axis=1)train_y = train_data['Survived']# seperate the independent and target variable on testing datatest_x = test_data.drop(columns=['Survived'],axis=1)test_y = test_data['Survived']model = SVC()# fit the model with the training datamodel.fit(train_x,train_y)# predict the target on the train datasetpredict_train = model.predict(train_x)print('Target on train data',predict_train)# Accuray Score on train datasetaccuracy_train = accuracy_score(train_y,predict_train)print('accuracy_score on train dataset : ', accuracy_train)# predict the target on the test datasetpredict_test = model.predict(test_x)print('Target on test data',predict_test)# Accuracy Score on test datasetaccuracy_test = accuracy_score(test_y,predict_test)print('accuracy_score on test dataset : ', accuracy_test)

上面代码运行结果:

Shape of training data : (712, 25)Shape of testing data : (179, 25)Target on train data [0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 1 0 1 1 1 1 0 1 0 11 0 0 0 0 0 0 1 1 0 0 1 0 0 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 11 0 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 0 0 00 1 0 1 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 00 0 1 0 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 01 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 1 10 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 10 0 1 0 0 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 1 1 1 01 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 0 0 1 1 0 1 0 1 1 00 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 1 10 0 0 0 1 0 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 10 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 1 1 11 0 1 0 0 0 0 0 0 1 1 0 0 1 0 0 1 0 1 1 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 11 0 1 1 1 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 1 0 1 1 0 0 10 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 1 0 1 0 0 01 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 10 0 1 0 1 0 1 0 1 1 1 0 0 1 0]accuracy_score on train dataset : 0.8497191011235955Target on test data [0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 00 0 0 1 0 0 1 0 1 1 0 1 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 1 0 0 1 1 1 0 1 1 1 0 0 1 00 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 1 1 0 1 01 0 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0 1 0 0 1 1 0 0 1 0 0 0 0 1 1 0 1 1 0 1 01 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 0 1 1 1 1 0 0 0 0 0]accuracy_score on test dataset : 0.7206703910614525

结束笔记

支持向量机是非常强大的分类算法。 当与随机森林和其他机器学习工具结合使用时,它们为集合模型提供了非常不同的维度。 因此,它们对于需要非常高的预测能力的情况变得非常重要。 由于配方的复杂性,这些算法稍微难以可视化。 您会发现这些算法对于解决一些Kaggle问题语句非常有用。

关注公号

下面的是我的公众号二维码,欢迎关注:

标签: #支持向量机实例讲解