前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习-支持向量机(SVM:Support Vector Machine)案例

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

作者头像
XXXX-user
发布2019-09-25 11:14:49
9680
发布2019-09-25 11:14:49
举报
文章被收录于专栏:不仅仅是python不仅仅是python

背景介绍

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

什么是分类分析?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

代码语言:javascript
复制
'''
The following code is for Support Vector Machines
Created by - ANALYTICS VIDHYA
'''
# importing required libraries
import pandas as pd
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# read the train and test dataset
train_data = pd.read_csv('train-data.csv')
test_data = pd.read_csv('test-data.csv')

# shape of the dataset
print('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 data
train_x = train_data.drop(columns=['Survived'],axis=1)
train_y = train_data['Survived']

# seperate the independent and target variable on testing data
test_x = test_data.drop(columns=['Survived'],axis=1)
test_y = test_data['Survived']
model = SVC()

# fit the model with the training data
model.fit(train_x,train_y)

# predict the target on the train dataset
predict_train = model.predict(train_x)
print('Target on train data',predict_train)

# Accuray Score on train dataset
accuracy_train = accuracy_score(train_y,predict_train)
print('accuracy_score on train dataset : ', accuracy_train)

# predict the target on the test dataset
predict_test = model.predict(test_x)
print('Target on test data',predict_test)

# Accuracy Score on test dataset
accuracy_test = accuracy_score(test_y,predict_test)
print('accuracy_score on test dataset : ', accuracy_test)
上面代码运行结果:
代码语言:javascript
复制
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.8497191011235955
Target 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问题语句非常有用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yale记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是分类分析?
  • 什么是支持向量,什么是SVM?
  • 如何找到手头的支持向量机?
  • 如果我们找不到隔离类的干净边界怎么办?
    • 上面代码运行结果:
    • 结束笔记
    相关产品与服务
    TI-ONE 训练平台
    TI-ONE 训练平台(以下简称TI-ONE)是为 AI 工程师打造的一站式机器学习平台,为用户提供从数据接入、模型训练、模型管理到模型服务的全流程开发支持。TI-ONE 支持多种训练方式和算法框架,满足不同 AI 应用场景的需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档