1.支持向量机定义

在机器学习领域,支持向量机 SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别、分类、以及回归分析。给出一个简单的线性分类问题,要用一条直线,将下图 13.13 中圆形的点和三角形的点分开,这样的直线有无数条,例如图中画出的两条线都能进行分类。这些将类别分离的曲线称为超平面。已有的训练数据中,每个元素距离分离超平面都有一个距离。在添加超平面的时候,尽可能的使最靠近分离超平面的那个元素与超平面的距离变大。这样,加入新的数据的时候,分的准的概率会最大化,这便是 SVM 的主要思想。如下图所示。

最大化间隔的流程主要如下:首先进行归一化,归一化的目的是除掉取值尺度的影响;其次,对所有元素求到超平面的欧氏距离,给定一个超平面 P,计算所有样本与超平面 P 的欧式距离,这其中最小的距离记为DP,SVM 的作用就是找到DP最大的超平面。下图中的虚线画出了最大间隔,那么在这两条虚线上的样本点就称为支持向量。

上面介绍的是线性可分的情形,而在实际中,编程者经常会遇到线性不可分的样例,如下图中的一维数轴上的叉形和菱形点,无法简单地找到一个超平面将其分类。

此时常用的做法是样本特征映射到高维空间去。如果将原始的一维特征空间映射到二维特征空间,那么就可以找到分离超平面,小于0时,就可以判别类别为1。当大于0时,就可以判别类别为0,如下图所示。

线性不可分映射到高维空间,可能会导致维度非常高,计算复杂。核函数的价值在于它虽然也是讲特征进行从低维到高维的转换,但核函数事先在低维上进行计算,而将实质上的分类效果表现在高维上,也避免了直接在高维空间中的复杂计算。

2.支持向量机优缺点

支持向量机算法的优点主要如下:
  (1) 在高维空间有效;
  (2) 在特征维数高于样本数的时候仍然有效;
  (3) 增、删非支持向量样本对模型没有影响;
  (4) 有些成功的应用中,SVM 方法对核的选取不敏感。当然,支持向量机算法也存在一些缺陷,例如对于每个高维空间在此空间的映射 F,如何确定 F 映射,现在还没有合适的方法,所以对于一般的问题,SVM 只是把高维空间的复杂性的困难转为了求核函数的困难。而且即使确定核函数以后,在求解问题分类时,也要求解函数的二次规划,这就需要大量的存储空间。这也是 SVM 的一个问题。

3.操作系统

  操作机:Linux_Ubuntu
  操作机默认用户:root

4.实验工具

Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。

由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。

众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。

5.Numpy

NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。

NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。

6.scikit-learn

scikit-learn,Python 中的机器学习,简单高效的数据挖掘和数据分析工具,可供大家使用,可在各种环境中重复使用,建立在 NumPy,SciPy 和 matplotlib 上开放源码,可商业使用 - BSD license。

7.Matplotlib

Matplotlib 是一个 Python 的 2D绘**,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

8.pandas

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

9.导入所需要的库:numpy,matplotlib.pyplot,pandas

代码如下:

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd10.加载数据集

代码如下:

# Importing the dataset
dataset = pd.read_csv('/mnt/dataset_29/Social_Network_Ads_82e4aa0627105a2d22b70d7ad0bfeda0.csv')   注意:数据集以实际位置为准
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values

注意:实验中以数据集的具体为准。

如下给出数据,可将数据创建响相应的数据集用于字日常训练,也可在实验平台中数据集模块下的的“社交网络数据集”中进行查看。

数据集如下:(见附件)

11.将数据集分割为训练集和测试集

代码如下:

# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

12.特征缩放

代码如下:

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

13.使用Kernel SVM对数据进行处理

代码如下:

# Fitting Kernel SVM to the Training set
from sklearn.svm import SVC
classifier = SVC(kernel = 'rbf', random_state = 0)
classifier.fit(X_train, y_train)

14.对测试集进行分类

代码如下:

# Predicting the Test set results
y_pred = classifier.predict(X_test)

15.制作混淆矩阵来评估模型性能

代码如下:

# Making the Confusion Matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

16.绘制训练数据分类结果

# Visualising the Training set results
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],c = ListedColormap(('orange', 'blue'))(i), label = j)
plt.title('Classifier (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

训练数据分类结果如下:

17.绘制测试数据分类结果

代码如下:

# Visualising the Test set results
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],c = ListedColormap(('orange', 'blue'))(i), label = j)
plt.title('Classifier (Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

测试数据分类结果如下:

社交网络测试数据集.csv.zip

作者:Micker

【华为云技术分享】【Python算法】分类与预测——支持向量机相关推荐

  1. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  2. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  3. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  4. 【华为云技术分享】直播回顾丨激发数据裂变新动能,HDC.Cloud云数据库前沿技术解读

    3月24日14:00-17:00,HDC.Cloud开发者沙龙系列云数据库专场直播线上开启,此次华为云数据库通过三场直播从NoSQL数据库新技术.数据库迁移.行业解决方案等方面对云端数据库进行深度解读 ...

  5. 【华为云技术分享】【Python算法】分类与预测——决策树

    1.决策树定义 决策树方法在分类.预测.规则提取等领域有着广泛的应用.20 世纪 70 年代后期和 80 年代初期,机器学习研究者 J.Ross Quinlan 提出了 ID3 算法以后,决策树就在机 ...

  6. 【华为云技术分享】基于ModelArts AI市场算法MobileNet_v2实现花卉分类,支持CPU、GPU、Ascend推理

    概述 MobileNetsV2是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网,此模型基于 MobileNetV2: Inverted Residuals and Linear ...

  7. 【华为云技术分享】Python大神编程常用4大工具,你用过几个?

    摘要:Python是一种跨平台的编程语言,能够在所有主要的操作系统上,运行你编写的任何Python程序.今天介绍几款常见的工具:Python自带的解释器.文本编辑器(Geany.Sublime Tex ...

  8. 【华为云技术分享】深度理解AI概念、算法及如何进行AI项目开发

    莫衷一是的AI 做了多年的业务工作,一直希望能够用机器代替人力,把人从繁琐的具体工作中解放出来,从技术发展看AI或许可以支撑实现这个愿景. 但最近关于AI的讨论和争论比较多,学术上,纽约大学的Gary ...

  9. 华为python有必要学吗_【华为云技术分享】这个 Python 库有必要好好学学

    这里看一个最基本的例子,这里给到一个 User 的 Class 定义,再给到一个 data 数据,像这样: 1 class User(object):2 def __init__(self, name ...

  10. 【华为云技术分享】AI 开发路漫漫,什么才是真正的极客精神?

    摘要:AI开发看上去很美,实践起来却不是一件容易的事.一个聪明的开发者知道借助工具提升开发效率,一个智能的平台则会站在开发者的立场,为用户提供贴心服务. "理想很丰满,现实很骨感." ...

最新文章

  1. Gitlab CI更多内容学习(二)
  2. android studio 跳转后保留原页面数据_Intent详解以及Activity的跳转与数据传递
  3. centos安装python3小白_Centos7 安装Python3
  4. 【解题报告】Leecode 807. 保持城市天际线——Leecode每日刷题系列
  5. 我们为什么要做数据分析?
  6. STM32F4 串口DMA
  7. 利用继承和组合实现软件复用
  8. JSK-61 二进制加法【大数】(废除!!!)
  9. eclipse运行java快捷键,eclipse常用快捷键
  10. 如何用VB开发游戏外挂
  11. Presto 即席查询
  12. 下拉菜单Spinner用法
  13. 2020-10-19 进制转换
  14. 所有用户账户被禁用该怎么办?
  15. 你连《Android高级UI与FrameWork源码》都搞不懂学什么Android?还敢面试阿里P7!
  16. 金庸小说人物知识图谱构建——获取共现关系
  17. 【MediaWiki之windows安装】MediaWiki创建与基础使用指南
  18. Makefile中=, :=, ?=和+=的含义
  19. 抖音拍摄脚本怎么写,掌握这几点快速拍摄爆款视频丨国仁网络资讯
  20. 微服务框架搭建(网关路由)

热门文章

  1. Git笔记(19) 生成SSH公钥
  2. ufei pe安装linux,制作UEFI(64位)下的WinPE + Ubuntu + Acronis多启动U盘
  3. destroy意思中文翻译_destroy是什么意思_ destroy的翻译_音标_读音_用法_例句_爱词霸在线词典...
  4. java 不显示imageicon_Java ImageIcon 不能显示问题
  5. 在Linux中切换用户的命令是set,Linux基础命令---切换用户su
  6. bzoj1013 [JSOI2008]球形空间产生器sphere
  7. Cloud-init的安装和使用 --以ubuntu-server-14.04-amd64为例
  8. C# 对文本文件的几种读写方法
  9. ASP.NET MVC 2.0 AsyncController(转)
  10. 用VS编译出可独立运行的程序