支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行的广义线性分类器(generalized linear classifier),其是对学习样本求解的最大边距超平面(maximum-margin hyperplane) 。

SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器   。SVM可以通过核方法(kernel method)进行非线性分类,是常见的核学习(kernel learning)方法之一   。

支持向量机的分类问题

(1)线性SVM分类

通过建立一个超平面,优化模型使最靠近超平面的点的间隔最大,称之为大间隔分类。由于SVM对特征的缩放特别敏感,对函数间隔影响较大,所以要对特征先进行标准化,用于特征的缩放。

如果将实例严格的分类,让所有的实例都处于正确的一方,称之为硬间隔分类;反之,称之为软间隔分类。

import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
iris = datasets.load_iris()
X = iris['data'][:,(2,3)]
Y =(iris['target']==2).astype(np.float64)
svm_scaler = Pipeline([('std_scaler',StandardScaler()),('svm',LinearSVC(C=1,loss = "hinge")),])
svm_scaler.fit(X,Y)

LinearSVC的超参数中C为惩罚项,C越大对错误实例的惩罚越大。loss为损失函数。

接着使用另两种方法来实现

##使用svc与线性内核
from sklearn.svm import SVC
svm_scaler = Pipeline([('std_scaler',StandardScaler()),('svm',SVC(kernel = 'linear',C=1))])
svm_scaler.fit(X,Y)
##使用随机梯度下降求解
from sklearn.linear_model import SGDClassifier
sgd_scaler = Pipeline([('std_scaler',StandardScaler()),('sgd',SGDClassifier(loss='hinge',alpha=1))])##aplha为惩罚系数
sgd_scaler.fit(X,Y)

发现效果差不多

(2)非线性SVM分类

处理方法1:使用PolynomialFeatures让高维的特征变成新的特征

from sklearn.datasets import make_moons
from sklearn.preprocessing import PolynomialFeatures##将高维的特征变成一个新的特征
X,Y = make_moons(n_samples=100,noise=0.15)
polynomial_svm_scaler = Pipeline([('polynomial',PolynomialFeatures(degree=3)),('std_scaler',StandardScaler()),('svm',LinearSVC(C=10,loss='hinge'))])
polynomial_svm_scaler.fit(X,Y)
import matplotlib.pyplot as plt
def plot_dataset(X, y, axes):plt.plot(X[:, 0][y==0], X[:, 1][y==0], "bs")plt.plot(X[:, 0][y==1], X[:, 1][y==1], "g^")plt.axis(axes)plt.grid(True, which='both')plt.xlabel(r"$x_1$", fontsize=20)plt.ylabel(r"$x_2$", fontsize=20, rotation=0)plot_dataset(X, Y, [-1.5, 2.5, -1, 1.5])
plt.show()
def plot_predictions(clf, axes):x0s = np.linspace(axes[0], axes[1], 100)x1s = np.linspace(axes[2], axes[3], 100)x0, x1 = np.meshgrid(x0s, x1s)X = np.c_[x0.ravel(), x1.ravel()]y_pred = clf.predict(X).reshape(x0.shape)y_decision = clf.decision_function(X).reshape(x0.shape)plt.contourf(x0, x1, y_pred, cmap=plt.cm.brg, alpha=0.2)plt.contourf(x0, x1, y_decision, cmap=plt.cm.brg, alpha=0.1)plot_predictions(polynomial_svm_scaler, [-1.5, 2.5, -1, 1.5])
plot_dataset(X, Y, [-1.5, 2.5, -1, 1.5])

效果图

处理方法2:使用支持向量机中的核技巧

##多项式内核
poly_kernel_svm_clf = Pipeline([('scaler',StandardScaler()),('svm_clf',SVC(kernel="poly",degree=3,coef0=1,C=5))])##参数coef0控制的是模型受高阶多项式影响多还是低阶的
poly_kernel_svm_clf.fit(X,Y)
plot_predictions(poly_kernel_svm_clf, [-1.5, 2.5, -1, 1.5])
plot_dataset(X, Y, [-1.5, 2.5, -1, 1.5])

高斯RBF内核

通过建立样本上的相似特征,使样本有多重特征,最简单的方法就是对每一个实例的位置创建一个地标,这样子可以创建许多维度

rbf_kernel_svm_clf =Pipeline([('std_scaler',StandardScaler()),('svm_clf',SVC(kernel='rbf',gamma=5,C=0.001))])
rbf_kernel_svm_clf.fit(X,Y)
plot_predictions(poly_kernel_svm_clf, [-1.5, 2.5, -1, 1.5])
plot_dataset(X, Y, [-1.5, 2.5, -1, 1.5])

对参数的解读:gamma是控制钟形曲线的大小,就是影响单个特征的影响范围,而C为惩罚项,kernel为核函数的选择

SVM回归

使用LinearSVR

##SVM回归
np.random.seed(42)
m = 50
X = 2 * np.random.rand(m, 1)
Y = (4 + 3 * X + np.random.randn(m, 1)).ravel()
from sklearn.svm import LinearSVR
svm_reg = LinearSVR(epsilon=1.5)
svm_reg.fit(X,Y)

使用SVR

from sklearn.svm import SVR
svm_poly_reg =SVR(kernel='poly',degree=2,C=100,epsilon=0.1)
svm_poly_reg.fit(X,Y)

支持向量机学习笔记(1)相关推荐

  1. 统计学习导论(九)支持向量机——学习笔记

    1. 最大间隔分类器 1.1 超平面(hyperplane) p维空间中,超平面是p-1维的平面仿射子空间. 对一个p维的超平面: β 0 + β 1 X 1 + β 2 X 2 + - + β p ...

  2. 支持向量机学习笔记1

    1.支持向量机是一种二类分类模型.它的模型基本定义是特征空间上间隔最大的线性分类器. 2.核函数的引入,使得支持向量机可以进行非线性分类. 3.支持向量机也可以完成多类别分类(将在后面介绍) 4.支持 ...

  3. 从感知机到支持向量机—学习笔记

    step 1 用高斯分布生成两类点 1 class Point3: 2 def __init__(self): 3 self.x = random.gauss(50, 10) 4 self.y = r ...

  4. 影像组学视频学习笔记(11)-支持向量机(SVM)(理论)、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(11)主要介绍: SVM支持向量机(理论) 支持向量机 (support vector machine, SVM) 号称是鲁棒性(rob ...

  5. 统计学习方法 学习笔记(五):支持向量机(下)

    通过支持向量机(上)和支持向量机(中)的介绍,对支持向量机应该有点感性的认识啦!在这个学习笔记中,来继续探寻带核函数的支持向量机(解决如下图所示的问题) 对解线性分类问题,线性分类支持向量机是一种非常 ...

  6. 机器学习篇01:在线学习的支持向量机算法学习笔记

    在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...

  7. Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM

    原 Python3<机器学习实战>学习笔记(八):支持向量机原理篇之手撕线性SVM 置顶 2017年09月23日 17:50:18 阅读数:12644 转载请注明作者和出处: https: ...

  8. 机器学习之支持向量机(SVM)学习笔记-Datawhale Task05

    Author Bryce230 e-mail 2540892461@qq.com Software win10,Pycharm2019.3.3,Python3.7.7 SVM笔记-Datawhale ...

  9. 支持向量机-《统计学习方法》学习笔记

    支持向量机-<统计学习方法>学习笔记 1 概述 2 线性可分支持向量机 2.1 线性可分支持向量机简介 2.2 寻找最优分离超平面 2.3 函数间隔 2.4 几何间隔 2.5 (硬)间隔最 ...

最新文章

  1. xml文件上传服务器读取不了,本地读取服务器Xml文件及本地读本地的xml
  2. svn使用经验---不断总结
  3. 20、21_链式法则、MLP(多层感知器模型)反向传播
  4. 即插即用的轻量注意力机制ECA--Net
  5. freecodecamp_freeCodeCamp的新编码课程现已上线,其中包含1,400个编码课程和6个开发人员认证
  6. bootstrap中的模态框(modal,弹出层)
  7. 获取当前网页的绝对URL地址
  8. 上网行为审计产品对比(2008版)
  9. SLAM:计算机对世界的感知与理解
  10. 郝斌java教程下载_郝斌Java自学教程全集打包,视频教程下载
  11. Win32多语言IME开发概述
  12. log4j不打印日志的问题解决方式一
  13. 典型ASIC设计流程
  14. c语言点餐系统测试总结报告,数据结构实训报告c语言点餐系统net
  15. 2.5亿人背后的生发市场,蔓迪怎么创造4亿年GMV
  16. Eureka的限流算法类RateLimiter源码解读
  17. Mysql中数据类型括号中的数字代表的含义
  18. euclidea4攻略_Euclidea几何构建9.4通关攻略
  19. 置信区间(已知样本均值和样本的方差,求总体均值的置信区间)(n 30)
  20. POJ 3133 Manhattan Wiring

热门文章

  1. easypoi导出word文档(文本,表格)
  2. 5-3 区块链与供应链金融
  3. 最好的android智能手表,安卓智能手表推荐?十款好用的安卓智能手表排行榜
  4. 征服微信小程序视频教程-李宁-专题视频课程
  5. 74HC595驱动2位数码管代码实现和注意事项
  6. 企业邮件网关首选:TurboGate反垃圾邮件网关
  7. 运放基本结构及频响(一)
  8. c语言nba球星信息系统,NBA:超神控卫
  9. 论文中写伪代码的工具
  10. 波波:App Store改版深入测评,生态改变,行业大洗牌