一、原理:

以一个二分类为例(y = -1,1):希望支持向量间的距离尽可能远。

我们可以看到上面三个方法的效果:

分类 效果
H1 无法完成分类
H2 robost性较差(在新的数据集上健壮性较差)
H3 最稳健

1.SVM与其他分类器不同:
其他分类器将所有样本视为同样作用,而支持向量机仅重视几个支持向量(很少的样本)。

2.利用凸优化原理:

3.维数超过样本样本数是ok的
SVM支持高维分类

4.训练多个label的原理:
比如有1,2,3个类别,那么可以训练3个SVM模型

二、当两个类看似不一定可分时:

高维数据或者线性不可分数据利用核函数映射到高维,直观理解如图:

三、代码示例

1.简单示例

from sklearn import svmx = [[0, 0], [1, 1], [3, 3], [4, 4]]
y = [0, 1, 1, 1]clf = svm.SVC()  # 构造模型
clf.fit(x, y)  # 训练模型print(clf.predict([[2., 2.]]))  # 打印出预测结果
print(clf.support_vectors_)  # 打印出支持向量

2.SVM可视化

# SVM可视化
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs# we create 40 separable points   x为40*2的矩阵
x, y = make_blobs(n_samples=40, centers=2, random_state=6)  # random_state=6设置后相当于得到了同样的随机数据
print(np.concatenate((x, y.reshape(-1, 1)), axis=1))  # 按列拼接,np.concatenate是最快的函数# fit the model, don't regularize for illustration purposes
clf = svm.SVC(kernel="linear", C=1000)  # 设置了一个核函数
clf.fit(x, y)# 画出超平面,支持向量
plt.scatter(x[:, 0], x[:, 1], c=y, s=30, cmap=plt.cm.Spectral)# c=y设置不同label有不同颜色,s=30设置点的大小# plot the decision function
ax = plt.gca()  # 得到当前坐标轴
xlim = ax.get_xlim()  # 得到x轴最小、最大值
print(xlim)
ylim = ax.get_ylim()  # 得到y轴最小、最大值
print(ylim)# create grid to evaluate model
# np.linspace在指定的区间返回均匀间隔的数字
# 帮助计算每个点到超平面的距离 来评估这个模型的好坏
xx = np.linspace(xlim[0], xlim[1], 30)    # 从最大值到最小值平均切分30份
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)  # 拓展矩阵 得到两个30*30的矩阵# np .vstack按照竖直方向拼接,即行增加,列不变
# ravel将多维矩阵变成1维向量
xy = np.vstack([XX.ravel(), YY.ravel()]).T
# 得到的xy是900 * 2
z = clf.decision_function(xy).reshape(XX.shape)
# Z:30 * 30
# decision_function返回一个一维的向量,表示每个样本正负
# 样本的置信度,这里可以理解为距离超平面的距离# plot decision boundary and margins
# matplotlib.puplot.contour用于绘制等高线
# 这里以与超平面的距离来画等高线,只画三个层次的等高线
ax.contour(XX, YY, z, colors="k", levels=[-1, 0, 1], alpha=0.5, linestyles=["--", "-", "--"]
)
# plot support vectors
ax.scatter(clf.support_vectors_[:, 0],clf.support_vectors_[:, 1],s=100,linewidth=1,facecolors="none",edgecolors="k",
)plt.show()

3.具体实例:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_splitdata = pd.read_csv("D:\\university\\211term\\数据挖掘\\PDMBook\\第三章 分类模型\\3.8 SVM\\SVM.csv")
print(data.columns)
x = data[['Alcohol', 'Malic acid', 'Ash','Alcalinity of ash', 'Magnesium','Total phenols', 'Flavanoids','Nonflavanoid phenols','Proanthocyanins', 'Color intensitys','Hue', 'OD280/OD315 of diluted wines','Proline'
]]
y = data['label']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1
)from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCVsvc = SVC()
# 网格搜索,寻找最优参数
# 有很多种核函数
paramGrid = dict(kernel=['linear', 'poly', 'rbf', 'sigmoid']
)# 三折交叉验证
gridSearchCV = GridSearchCV(svc, paramGrid,cv=3, verbose=1, n_jobs=5,return_train_score=True
)
grid = gridSearchCV.fit(x_train, y_train)print('最好的得分是: %f' % grid.best_score_)
print('最好的参数是:')
for key in grid.best_params_.keys():print('%s=%s' % (key, grid.best_params_[key]))best_model = grid.best_estimator_
print(best_model.predict(x_test))s = pd . Series(best_model.predict(x_test),index=y_test.index)
print(s-y_test)
print(np.sum(s-y_test == 0))
print(best_model.score(x_test, y_test))

4.学习到的编程细节:
1.函数:np.concatenate,

2.网格搜索

支持向量机(SVM)原理及实现相关推荐

  1. 统计学习方法|支持向量机(SVM)原理剖析及实现

    欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...

  2. 机器学习:支持向量机SVM原理与理解

    引言 --"举牌子:Support Vector Machines " 一直在犹豫要不要写SVM,因为网上已经有很多详细的SVM原理的解释甚至详细推导,而这东西又庞大复杂,想了解的 ...

  3. 支持向量机SVM原理解析

    支持向量机(SVM) 支持向量机(support vector machine,SVM)使用训练集中的一个子集来表示决策边界,边界用于样本分类,这个子集称作支持向量(support vector). ...

  4. 支持向量机SVM原理及代码推导

    导包并创建数据 #导包 import numpy as np import matplotlib.pyplot as plt from sklearn.svm import SVC from mpl_ ...

  5. 支持向量机SVM原理(一)

    1 简介 支持向量机基本上是最好的有监督学习算法了.最开始接触SVM是去年暑假的时候,老师要求交<统计学习理论>的报告,那时去网上下了一份入门教程,里面讲的很通俗,当时只是大致了解了一些相 ...

  6. 支持向量机SVM原理

    1 简介 支持向量机基本上是最好的有监督学习算法了.最开始接触SVM是去年暑假的时候,老师要求交<统计学习理论>的报告,那时去网上下了一份入门教程,里面讲的很通俗,当时只是大致了解了一些相 ...

  7. 机器学习-分类之支持向量机(SVM)原理及实战

    支持向量机(SVM) 简介 支持向量机(Support Vector Machine,SVM),是常见的一种判别方法.在机器学习领域,是一个监督学习模型,通常用来进行模式识别.分类及回归分析.与其他算 ...

  8. 支持向量机——SVM原理

    SVM--Support Vector Machine 5.11 update:拉格朗日对偶问题的推导 5.15 update:SMO算法推导 5.17 update:sklearn实现 文章目录 S ...

  9. [机器学习算法]支持向量机SVM原理简介

    一.问题和超平面描述 给定训练集 分类学习最基本的想法就是基于训练集在样本空间中找到一个划分超平面,将不同类别的样本分开,但能将训练样本分开的划分超平面可能有很多,如下图所示: 直观来看,应该去找位于 ...

最新文章

  1. Fiddler抓包使用教程-断点调试
  2. 单自由度系统的振动的幅频特性曲线及相频特性曲线及matlab分析,实验四 线性系统的频域分析...
  3. matlab的精度变量,MatLab - 变量精度算术
  4. Ansible 安装
  5. es html标签,ES 6 Number
  6. ECS入门之Hello World
  7. python词组语义相似度_文本匹配,语义相似度,匹配相似短语/单词python语义wordNet模糊匹配...
  8. html div重叠上方,html – 将父div上方的子div对齐到右边,不要重叠
  9. gimp中文版教程_GIMP中文教程.pdf
  10. 用友U8案例教程委外管理前台操作
  11. 解决Rstudio打开空白
  12. 抗击奥密克戎回忆录:“旌旗十万斩阎罗”,我再一次杨康了
  13. Python攻城师的成长————css语法、伪元素选择器(部分)
  14. 色环电阻的识别和检测
  15. 使用ProcMon 输出调试信息
  16. 三种安装httpd的方法
  17. 如何实现shardSDK分享以及自定义图标实现
  18. ant中table组件全选选中所有行(ant design2.2.8)
  19. Survey of intrusion detection systems:techniques, datasets and challenges
  20. ZTree的选择性展开树节点

热门文章

  1. android闹钟设计的开题报告,电子闹钟设计开题报告.doc
  2. macOS上如何应对崩溃问题
  3. PHP 阿里云短信服务
  4. 10 行代码,实现写诗机器人
  5. 阿里云Redis 资源购买流程
  6. 《算法撕裂者》04 - 垃圾收集算法详解
  7. 靶机测试Connect-the-dots笔记
  8. 2022面试题CSS
  9. 走进两邻文化,全民禁种铲毒——禁毒公益大集活动
  10. Revit二次开发对于BIM正向设计的帮助