Python高级--支持向量机SVM

scikit-learn笔记5 SKLearn模型选择与评估 超参数优化方法 超参数优化方法 1.什么是超参数(hyper-parameters)? 2.网格搜索穷举式超参数优化方法 3.随机采样式超参数优化方法 4.超参数空间的搜索技巧 5.暴力参数搜索方法的替代办法 什么是超参数(hyper-parameters)? 学习器模型中一般有两类参数:一类参数可以从数据中学习估计得到,还有一类参数无法从数据中估计,只能靠人的经验进行设计指定。后一类参数就叫超参数。 比如,支持向量机里的C,Kernel,gama,朴素贝叶斯里的alpha 在学习器模型的设计中,我们要搜索超参数空. 阅读详情

一、支持向量机原理

1)支持向量机基本概念

Support Vector Machine

支持向量机,其含义是通过支持向量运算的分类器。
其中“机”的意思是机器,可以理解为分类器。 那么什么是支持向量呢?在求解的过程中,会发现只根据部分数据就可以确定分类器,这些数据称为支持向量。

见下图,在一个二维环境中,其中点R,S,G点和其它靠近中间黑线的点可以看作为支持向量,它们可以决定分类器,也就是黑线的具体参数。
这里写图片描述

2)举例说明

在很久以前的七夕,大侠要去救他的女神,但魔鬼和他玩了一个游戏。

魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你能不能分开它们?要求:尽量在放更多球之后,仍然适用。”

这里写图片描述

于是大侠这样放,干的不错?这里写图片描述

然后魔鬼,又在桌上放了更多的球,似乎有一个球站错了阵营这里写图片描述

SVM就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙这里写图片描述

现在即使魔鬼放了更多的球,棍仍然是一个好的分界线这里写图片描述

魔鬼看到大侠已经学会了一个trick,于是魔鬼给了大侠一个新的挑战

这里写图片描述

现在,大侠没有棍可以很好帮他分开两种球了,现在怎么办呢?当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起一张纸,插到了两种球的中间

这里写图片描述

现在,从魔鬼的角度看这些球,这些球看起来像是被一条曲线分开了这里写图片描述

愚蠢的人类,把球叫做 「data」
把棍子叫做 「classifier」
最大间隙的技巧叫做「optimization (最优化)」
几种划分方式叫做「kernelling内核」
那张纸叫做「hyperplane超平面」

3)三种内核的效果比较

1、Linear核

线性函数
其实就是画直线(一次方)

主要用于线性可分的情形。参数少,速度快,适用于一般数据
这里写图片描述

2、RBF核

径向基函数 (Radial Basis Function 简称 RBF)
基于半径的函数
其实就是画曲线(二次方)

主要用于线性不可分的情形。参数多,分类结果非常依赖于参数的情况。

这里写图片描述

3、polynomial model

参数较多,在另外两种都不适用的时候选择
(多项式 n次方)(一般来说什么都画不好)
这里写图片描述

4)优缺点

1、论效果

svm不像knn那样容易过拟合 有很好的泛化能力
svm是找两类之间的最大距离 所以不像线性回归那样容易欠拟合

2、论效果

论效率 svm和knn一样,每个点都要计算距离,计算量比较大,所以一般针对小样本数据

3、总结

总结: SVM是一种主要针对小样本数据进行学习、分类和回归的方法

二、使用SVM画出决策边界

对两堆数据进行分类,并画出

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt

支持向量机导包

from sklearn.svm import SVC

1)创造数据

产生两堆数据 20个样本,每个样本有两个特征

## 以0为中心 标准差是1的 一堆正太分布的数据
# 分开两堆数据的中心
dot1 = np.random.randn(20,2)-[1,4]  # 将中心向左下移动
dot2 = np.random.randn(20,2)+[2,3]  # 将中心向 右上移动

将产生的数据绘制查看

plt.scatter(dot1[:,0],dot1[:,1])
plt.scatter(dot2[:,0],dot2[:,1])

这里写图片描述

2)合并数据作为训练集并创建目标值

X_train = np.concatenate((dot1,dot2))
# dot1的目标值是0 dot2的目标值是1
# 则y_train中前面20个是0 后面20个是1
y_train = [0]*20 + [1]*20

根据训练集和目标值绘图

plt.scatter(X_train[:,0],X_train[:,1],c=y_train)

这里写图片描述

3)使用内核为linear的支持向量机模型绘制超平面分隔线

1、创建内核为linear的模型并训练

svc = SVC(kernel='linear')
svc.fit(X_train,y_train)

4)超平面

f(x) = w*x + b

1、提取系数获取分隔线斜率

svc.coef_

array([[0.22671513, 0.56914011]])

这两个分别是两个特征的权重,但这并不是我们想要的
第一个权重:w0 是 y_train/X_train[:,0]
第二个权重:w1 是 y_train/X_train[:,1]

现在要求的是将x0作为横轴,x1作为纵轴
这条线的斜率为 x1 / x0
w = w1 / w0
w = y_train/X_train[:,1] / y_train/X_train[:,0]

svc.coef_
svc.coef_[0,0]
svc.coef_[0,1]
w = -svc.coef_[0,0]/svc.coef_[0,1]

2、提取系数获取分隔线截距

svc.intercept_ 

array([0.00599865])

这里的截距是目标值上面的截距,但是我们现在要找的是x1上的截距
X_train[:,1]和y_train的 斜率是 w1 svc.coef_[0,1]
w1已知 在y_train上的截距也是已知的 求在X_train[:,1]上的截距
svc.intercept_/-??? = svc.coef_[0,1]
??? = -svc.intercept_/svc.coef_[0,1]
求出这条分隔线的斜率

b = -svc.intercept_[0]/svc.coef_[0,1]

-0.010539844074062357

5)画出这条分割线

1、创建分割线的x值

x = np.linspace(-4,4,100)

2、算出分割线的y值并绘图显示

y = w*x+b

plt.scatter(X_train[:,0],X_train[:,1],c=y_train)
plt.plot(x,y)

这里写图片描述

6)支持向量

使用svc.support_vectors_找出支持向量,即离分割线最近的点集合,绘制出支持向量的所有点

1、找出支持向量的点

svevtor = svc.support_vectors_
svevtor

array([[-0.02126202, -1.7591068 ],
       [ 1.18685372,  1.2737174 ]])

2、绘制出支持向量的点

plt.scatter(svevtor[:,0],svevtor[:,1],c='r',alpha=0.3,s=100)  # 支持向量
plt.scatter(X_train[:,0],X_train[:,1],c=y_train)  # 所有点
plt.plot(x,y)

这里写图片描述

7)绘制经过两个支持向量的点

已知 斜率 和 经过的点 画线
把两个直线的 b求出来 即可 b1 b2

# 第一个支持向量点
p1 = svevtor[0]
p1
#
p2 = svevtor[1]
p2
#已知k,x,y 求b
y = k*x+b
b = y-k*x

b1 = p1[1]-w*p1[0]
b1

b2 = p2[1]-w*p2[0]
b2

求出y1 y2 画出两条经过支持向量的线

y1 = w*x+b1
y2 = w*x+b2

plt.scatter(svevtor[:,0],svevtor[:,1],c='r',alpha=0.3,s=100)  # 支持向量
plt.scatter(X_train[:,0],X_train[:,1],c=y_train)  # 所有点
plt.plot(x,y)  # 分类的中心线
# 分类的上边界 和 下边界
plt.plot(x,y1,ls='--')
plt.plot(x,y2,ls='--')

这里写图片描述

三、使用多种核函数对iris数据进行分类

1)导包

from sklearn.svm import SVC 

2)数据获取

只提取两个特征,方便画图

from sklearn.datasets import load_iris
iris = load_iris()
data = iris.data[:,:2]
target = iris.target

3)创建模型并训练

l = SVC(kernel='linear')
r = SVC(kernel='rbf')  # 二次曲线
p = SVC(kernel='poly')  # 高次曲线

l.fit(data,target)
r.fit(data,target)
p.fit(data,target)

4)创建测试集

我们取画布上的所有点进行测试

x = np.linspace(data[:,0].min(),data[:,0].max(),200)
y = np.linspace(data[:,1].min(),data[:,1].max(),200)

xx,yy =np.meshgrid(x,y)

X_test = np.c_[xx.flatten(),yy.flatten()]

5)预测并绘图

1、用linear内核做预测

y1_ = l.predict(X_test)  # 用linear内核做预测
plt.scatter(X_test[:,0],X_test[:,1],c=y1_)

这里写图片描述

2、用rbf内核做预测

y2_ = r.predict(X_test)  # 用rbf内核做预测
plt.scatter(X_test[:,0],X_test[:,1],c=y2_)

这里写图片描述

3、用poly内核做预测

y3_ = p.predict(X_test)  # 用poly内核做预测
plt.scatter(X_test[:,0],X_test[:,1],c=y3_)

这里写图片描述

四、使用SVM多种核函数进行回归

1)导包

from sklearn.svm import SVR 

2)创建样本点并生成sin曲线

x = np.linspace(-np.pi,np.pi,40)
y = np.sin(x)
plt.scatter(x,y)

这里写图片描述

3)数据加噪

每隔四个添加一个噪声

noise = np.random.random(10) - 0.5  # [-0.5, 0.5)
y[::4]+=noise

这里写图片描述

4)建立SVR模型并训练数据

# 获取模型
l = SVR(kernel='linear')
r = SVR(kernel='rbf')
p = SVR(kernel='poly')
# 训练模型
l.fit(x.reshape(-1,1),y)
r.fit(x.reshape(-1,1),y)
p.fit(x.reshape(-1,1),y)

5)创建测试数据并分别预测

# 生成一些测试的X_test
X_test = np.linspace(-np.pi,np.pi,15).reshape(-1,1)
y1_ = l.predict(X_test)
y2_ = r.predict(X_test)
y3_ = p.predict(X_test)

6)绘制比较三种不同内核的回归效果

plt.figure(figsize=(12,6))
plt.scatter(x,y,c='k',label='real')  # 真实数据
plt.plot(X_test,y1_,c='r',label='linear')  # linear内核
plt.plot(X_test,y2_,c='g',label='rbf')   # 二次曲线
plt.plot(X_test,y3_,c='b',label='poly')   # 高次曲线
plt.legend()  #显示图例

这里写图片描述
由图像可以观察得出rbf 对于曲线效果是最好的。

机器学习:Python中如何使用支持向量机(SVM)算法 (简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资)在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别、分类(异常值检测)以及回归分析。其具有以下特征:(1)SVM可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值。而其他分类方法都采用一种基于贪心学习的策略来搜索假设空间,这种方法一般只能获得局部最优解。(2) SVM通过最大化决策边界的边缘来实现控制模型的能力。 阅读详情

相关推荐

【机器学习应用】【Python】支持向量机——SVM

线性模型在分类问题上的应用,可看作用一条线或一个超平面在二维或三维空间将数据类别区分开,存在局限性。支持向量机(support vector machine)是更为复杂的模型,可解决线性或超平面无法解决的分类问题(线性不可分),应用于更高维度的数据。

pj71945的博客 981

在python中使用SVM

在python 中使用支持向量机

Messiah___的博客 2万+

数据挖掘读书笔记--第九章:高级分类:BP神经网络、SVM支持向量机

散记知识点 ——“探索复杂高级的分类方法” 1.神经网络 1.1 神经网络的基本概念 (1) 定义 神经网络是一组连接的输入/输出单元,其中每个连接都与一个权重相关联。在学习阶段,通过调整这些权重,使得它能够预测输入元组的正确类标号来学习。 (2) 前馈神经网络结构 前馈神经网络,又称后向传播(BP, back propagation)神经网络。由一个输入层、一个或...

SanFancsgo的博客 3123

支持向量机SVM的原理和python实现

支持向量机(SVM)是一类按监督学习方式对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面,可以将问题化为一个求解凸二次规划的问题。与逻辑回归和神经网络相比,支持向量机,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。具体来说就是在线性可分时,在原空间寻找两类样本的最优分类超平面。在线性不可分时,加入松弛变量并通过使用非线性映射将低维度输入空间的样本映射到高维度空间使其变为线性可分,这样就可以在该特征空间中寻找最优分类超平面。

apple_52030329的博客 1万+

Python高级算法——支持向量机(Support Vector Machine,SVM)

支持向量机是一种强大的监督学习算法,通过在高维空间中找到最优的超平面实现样本的有效分类。本文详细介绍了SVM的算法原理、核函数、超参数调优、软间隔与硬间隔、优缺点等关键概念,并通过代码示例演示了SVM在鸢尾花数据集上的应用。在实际应用中,根据问题的特点选择合适的核函数和调优参数,能够提高SVM模型的性能,取得更好的分类效果。

Echo_Wish 1742

SVM框架下的线性回归损失函数实战

线性回归是预测分析中最常用的统计技术之一,旨在建立一个因变量(通常称为响应变量)和一个或多个自变量(通常称为解释变量)之间的线性关系。它通过最小化误差的平方和来找出最佳拟合直线。SVM的目标是找到最优的决策边界,即一个超平面,它能够最大化相邻类别之间的间隔。在高维空间中,这个超平面可以是一个复杂的几何结构,但其基本原理不变。SVM的目标函数包括两部分:间隔最大化和分类的准确性。间隔最大化能够提高模型的泛化能力,降低过拟合的风险。

weixin_35754676的博客 1052

机器学习算法与Python实践之(三)支持向量机(SVM)进阶

机器学习算法与Python实践之(三)支持向量机(SVM)进阶zouxy09@qq.comhttp://blog.csdn.net/zouxy09        机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法。恰好遇见这本同样定位的书籍,所以就参考这本

zouxy09的专栏 4万+

WinForm布局

登录模板页面UILoginForm

m0_71541781的博客 469

python实现支持向量机实例_一个简单的案例带你了解支持向量机算法(Python代码)...

介绍掌握机器学习算法并不是一个不可能完成的事情。大多数的初学者都是从学习回归开始的。是因为回归易于学习和使用,但这能够解决我们全部的问题吗?当然不行!因为,你要学习的机器学习算法不仅仅只有回归!把机器学习算法想象成一个装有斧头,剑,刀,弓箭,匕首等等武器的军械库。你有各种各样的工具,但你应该学会在正确的时间和场合使用它们。作为一个类比,我们可以将“回归”想象成一把能够有效切割数据的剑,但它无法处理...

weixin_39710288的博客 768

欧姆龙485通讯示例程序_【精品实验】PLC学习神器与温湿度变送器的通讯

BFH点击蓝字关注我们↑↑↑↑  PLC学习神器提供RS485接口,可支持无协议RS指令、无协议RS2指令、Modbus通讯功能,可通过设置通讯格式改变通讯协议,RS485对应的通讯格式地址是D8400;  本案例以RS485接口与温湿度变送器通讯,通讯格式如下一温湿度变送器的说明书介绍1.1主要技术参数1.2 通讯协议 1、所有通讯回路都应遵照主/从方式。依照主从方式,数据可以在一个主...

weixin_39860201的博客 1万+

实战教程:用YOLOv11+PyQt5打造工地安全帽检测系统(附完整数据集)

本文提供了一份完整的实战指南,详细介绍了如何利用YOLOv11目标检测模型与PyQt5界面库,从零开始构建一个智能工地安全帽检测桌面应用。内容涵盖高质量数据集的准备与标注、YOLOv11模型训练与调优,以及如何使用PyQt5开发流畅、专业的图形用户界面,最终实现一个可实际部署的AI安全监控系统。

plum99的博客 737

一个简单的案例带你了解支持向量机算法(Python代码)!

介绍 掌握机器学习算法并不是一个不可能完成的事情。大多数的初学者都是从学习回归开始的。是因为回归易于学习和使用,但这能够解决我们全部的问题吗?当然不行!因为,你要学习的机器学习算法不仅仅只有回归! 把机器学习算法想象成一个装有斧头,剑,刀,弓箭,匕首等等武器的军械库。你有各种各样的工具,但你应该学会在正确的时间和场合使用它们。作为一个类比,我们可以将“回归”想...

Pythoncxy的博客 1545

FDTD Solutions-入射波长模式

经常在文献中看到仿真光源使用TM/TE模式,这个确定是十分必要的,决定了仿真结果。 但是也不能局限于选择TM/TE,因为不同领域、不同软件之间的使用习惯和命名可能不同。并且在现代光波导器件中,几乎全部 都是混合模式,或者称之为quasi-TE(准TE模式)和quasi-TM(准TM模式),多数情况下都简称为TE模式和TM模式。要知道 到底是TE模式还是TM模式,需要查看其电场的主分量(即振幅...

HECHUANWANG的博客 1万+

转载--机器学习算法与Python实践之(三)支持向量机(SVM)进阶

出处:http://blog.csdn.net/zouxy09/article/details/17291805 机器学习算法与Python实践之(三)支持向量机(SVM)进阶zouxy09@qq.comhttp://blog.csdn.net/zouxy09        机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Pyth

fighting! 573

网络安全 —— 实验(基于华为eNSP模拟器)

8. 实验八 —— 通过路由的远程管理(基于实验七的基础配置)8. 实验八 —— 通过路由的远程管理(基于实验七的基础配置)6. 实验六 —— 交换机的远程控制(直接控制和间接控制)6. 实验六 —— 交换机的远程控制(直接控制和间接控制)5. 实验五 —— 将交换机作为PC端通过交换机相连。5. 实验五 —— 将交换机作为PC端通过交换机相连。4. 实验四 —— 两个PC机通过两台交换机相连。2. 实验二 —— 两个PC机通过交换机相连。2. 实验二 —— 两个PC机通过交换机相连。

这个家伙看起来很懒,只想把你留下来哦 9338

从零配置EtherCAT IGH主站:手把手教你处理内核版本与实时性优化的那些坑

本文详细指导如何从零配置EtherCAT IGH主站,涵盖内核版本适配、实时性优化及常见问题解决方案。通过精确匹配内核头文件、应用实时补丁和优化网卡驱动,帮助开发者实现微秒级响应,适用于工业自动化、机器人控制等高精度场景。

weixin_30790841的博客 382

支持向量机(SVM)原理与Python实现详解

支持向量机(SVM)是一种基于统计学习理论的经典监督学习算法,其核心思想是通过寻找最优分类超平面实现最大间隔分类。SVM通过核技巧处理非线性问题,具有坚实的数学基础和优秀的泛化能力。在机器学习领域,SVM广泛应用于文本分类、图像识别等高维数据处理场景。本文从线性可分情况下的最优超平面出发,深入解析拉格朗日对偶问题和核函数原理,并给出Python实现代码和scikit-learn应用示例。针对实际工程中的参数调优、数据不均衡等问题提供解决方案,帮助开发者掌握这一重要机器学习工具。

weixin_34246529的博客 296

手把手教你 RT-DETR 添加注意力机制 | 一次性添加 20+ 种!

手把手教你 RT-DETR 添加注意力机制 | 一次性添加 20+ 种!

Coding... 2851

Scikit-learn 学习笔记

Scikit-learn 学习笔记记录在使用python的机器学习库Scikit learn中的要点。 SVM 支持向量机支持向量机可以用于分类、回归和异常点剔除 缺点:如果特征比样品多( m < n ),效果会比较差 支持向量机不能直接给出结果的可能性(针对二值分类问题)注意,支持向量机使用的样品数据可以是密集(numpy.asarray)和稀疏(any scipy.sparse)作为输入,它们

一只小Kevin的博客 1949

HyperLynx中层叠设计实例

这两种方式有点区别,前一种方式只是增加层,需要自行修改层的类型,后一种方式可以选定为某一种类型,如果是增加信号层,软件会默认同时增加一层介质层。层叠已经有8层,按照示例的层叠有4个信号层、3个地平面层和1个电源平面层,对照进行层名称(LayerName)、介质类型(Type)及用途(Usage)设置。在这列中,有的是白色,有的是淡蓝色。白色的说明可以修改,如第一行是介质,通常在最外层的介质有两个用途,阻焊层和介质,单击该行会出现一个下拉菜单,选择SolderMask,即为阻焊层。...

小幽余生不加糖 5875

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

opencv学习笔记06

原创:opencv学习笔记06 OpenCV-Python教程:50.理解k-近邻 https://www.jianshu.com/p/404e329e4e80 OpenCV里的kNN 1 2 3 4 5 6 newcomer = np.random.randint(0,100,(1,2)).astype(np.float32) plt.scatter(newcomer[:,0],newcomer[:,1],80,'g','o') knn = cv2.KNea.

江州司马 1234

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

文章列表

项目实战 项目一:使用二代测序数据进行基因组组装(局部组装) 项目二:使用机器学习(SVM)进行基因预测 libsvm-3.21使用文档 Libsvm:脚本(easy.py、grid.py、subset.py、checkdata.py) | MATLAB/OCTAVE interface | Python interface Weka 3: Data Mining ...

weixin_30846599的博客 95

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python sklearn svm svr 多输出_python机器学习API介绍25:高级篇——线性回归SVR

LinearSVR实现了线性回归支持向量机,他是根据liblinear实现的,其函数原型为:sklearn.svm.SVR(kernel='rbf', degree=3, gamma='auto', coef0=0.0, tol=0.001, C=1.0, epsilon=0.1. skrinking=True, cache_size=200, verbose=False, max_iter=-1...

weixin_39771301的博客 1655
上一篇: Python基础--字典的操作
下一篇: K均值算法(K-means)聚类
PyRookie
博客等级 码龄8年 89粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值