核函数(多项式,高斯核)以及svm解决回归问题

article/2025/10/3 1:49:57

文章目录

  • 一、SVM最优化问题转换
    • 1、多项式核函数
  • 二、高斯核函数
    • 1.引入库
    • 1、多项式特征
    • 2、高斯核函数升维举例
    • 3、高斯核函数超参数gamma
  • 三、svm解决回归问题
  • 总结


一、SVM最优化问题转换

变换为数学上一个更好解的
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

在这个式子中有重要的一项Xi,Xj 两个样本的点乘,分别都是一个向量对于多项式,
我们通常是将Xi变为X‘i Xj同理,但是这样会加大计算复杂度.
也会浪费空间,因为我们需要把X’i保存起来
但是对于核函数,我们往往只需要XI和Xj即可,通过一个核函数达到同样的效果

在这里插入图片描述
在这里插入图片描述

	注:核函数不只是SVM特有的,只要式子中有Xi,Xj就可以考虑核函数

1、多项式核函数

在这里插入图片描述
在这里,为了表示方便,我们先使用二项式核函数.
一般的多项式核函数,我们都会先把Xi–>X‘i,之后再将转换之后的进行点乘,但是对于核函数我们只要将Xi和Xj通过一个核函数即可。

在这里插入图片描述

二、高斯核函数

1.引入库

在这里插入图片描述
高斯核函数又被称为径向基函数


在这里插入图片描述

	将每一个样本点映射到一个无穷维的样本点空间,后续通过例子就可以明白

1、多项式特征

多项式特征将线性不可分变为线性可分
这里采用简单的一维变二维
在这里插入图片描述
如图,我们发现,这个一维线性不可分,因此我们增加一维,x²,就可变为线性可分了。


在这里插入图片描述

2、高斯核函数升维举例

在这里我们将y取了两个数据点L1,L2 也成为land mark 地标
此时每一个x都由图中的表达式变成一个二维数据
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as pltx=np.arange(-4,5,1)
y=np.array((x>=-2)&(x<=2),dtype='int')
plt.scatter(x[y==0],[0]*len(x[y==0]))
plt.scatter(x[y==1],[0]*len(x[y==1]))
plt.show()

在这里插入图片描述

def guassion(x,l):gamma=1.0#为了简单,这里gamma取1.0return np.exp(-gamma*(x-l)**2) #在这里因为x和l都为一维的 所以直接加括号平方即可l1,l2=-1,1
x_new=np.empty((len(x),2))
#返回i是索引,data是数据
for i,data in enumerate(x):x_new[i,0]=guassion(data,l1)x_new[i,1]=guassion(data,l2)
plt.scatter(x_new[y==0,0],x_new[y==0,1])
plt.scatter(x_new[y==1,0],x_new[y==1,1])
plt.show()

在这里插入图片描述

		一维变为2维之后就变得线性可分了

在这里插入图片描述

高斯核:每一个数据点都是一个地标,有多少地标就有多少维
例如,把其中一个样本当作一个地标,其余点包括该点利用高斯核公式便可得到一个值
该值就是每个点m维中的对应的一个元素

mn的数据便会映射成mm维,这也就可以理解之前的一句话
将一个数据映射到一个无穷维,因为一个样本往往有很多数据
但是这也会增加计算开销,但是高斯核函数在自然语言领域有很好的应用
因为自然语言领域的维度很高。

3、高斯核函数超参数gamma

在这里插入图片描述
与高斯函数类似,但又不同
高斯核函数是gamma越大,高斯分布越集中,越窄,反之越宽。
举例

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
#添加噪声
x,y=datasets.make_moons(noise=0.15,random_state=666)
plt.scatter(x[y==0,0],x[y==0,1],color='r')
plt.scatter(x[y==1,0],x[y==1,1],color='b')
plt.show()

在这里插入图片描述

from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
def rbfkernelsvc(gamma=1.0):return Pipeline([("std",StandardScaler()),("svc",SVC(kernel="rbf",gamma=gamma))])
rbf=rbfkernelsvc(gamma=1.0)
rbf.fit(x,y)
def plot_decision_boundary(model,axis):x0,x1=np.meshgrid(np.linspace(axis[0],axis[1],int((axis[1]-axis[0]))*100).reshape(-1,1),np.linspace(axis[2],axis[3],int((axis[3]-axis[2]))*100).reshape(-1,1))x_new=np.c_[x0.ravel(),x1.ravel()]y_predict=model.predict(x_new)zz=y_predict.reshape(x0.shape)from matplotlib.colors import ListedColormapcustom_camp=ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])plt.contourf(x0,x1,zz,linewidth=5,camp=custom_camp)
plot_decision_boundary(rbf,[-1.5,2.5,-1.0,1.5])
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
plt.show()

在这里插入图片描述
gamma=100,过拟合

rbf100=rbfkernelsvc(gamma=100)
rbf100.fit(x,y)
plot_decision_boundary(rbf100,[-1.5,2.5,-1.0,1.5])
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
plt.show()   #过拟合,泛化能力不好

在这里插入图片描述
gamma=0.1,欠拟合

rbf01=rbfkernelsvc(gamma=0.1)
rbf01.fit(x,y)
plot_decision_boundary(rbf01,[-1.5,2.5,-1.0,1.5])
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
plt.show()  #欠拟合

在这里插入图片描述

对于不同的问题,我们要选取最合适的不同的gamma

三、svm解决回归问题

在这里插入图片描述
与分类问题不同,回归问题也有margin但是,对于回归问题,
我们是希望margin中的数据点越多越好,更好的拟合
简单举例

boston=datasets.load_boston()
x=boston.data
y=boston.target
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666)
from sklearn.svm import SVR,LinearSVR
def standscalersvr(epsilon=0.1):return Pipeline([("std",StandardScaler()),("linearsvr",LinearSVR(epsilon=epsilon))])
linearsvr=standscalersvr()
linearsvr.fit(x_train,y_train)
linearsvr.score(x_test,y_test)

当然我们也可以使用svr,这就有许多超参数
如果kenerl=poly 就要考虑degree和c
kernel=rbf,就要考虑gamma等
这里不在一一叙述

总结

之前,除了knn是非参数学习,其他都是参数学习
下一章我们学习一个重要的非参数学习----决策树


http://chatgpt.dhexx.cn/article/8LTrsO9C.shtml

相关文章

高斯核-高斯模糊

大白话高斯模糊 以二维高斯为例&#xff0c;公式&#xff1a; 高斯模糊的原理,可以理解成每一个像素都取周边像素的加权平均值 以高斯分布取g矩阵的值得到的模糊方法即为高斯模糊 权重矩阵 假定中心点的坐标是&#xff08;0,0&#xff09;&#xff0c;那么距离它最近的8个点的…

数值实验-高斯核函数 python/matlab 实现

支持向量机 支持向量&#xff1a;支持平面把两类类别划分开的超平面的向量点机&#xff1a;一种算法SVM 是一种二分类模型线性可分支持向量机&#xff1a;通过硬间隔最大化&#xff0c;学习一个线性分类器线性支持向量机&#xff1a;通过软间隔最大化&#xff0c;学习一个线性…

CS131专题-2:高斯核、噪声、滤波

目录 1 高斯核 1.1 一维定义 1.2 二维定义 1.2.1 应用高斯核的过程 1.2.2 不同σ值的高斯核情况 1.2.3 不同核宽度情况 1.2.4 高斯核&#xff08;滤波&#xff09;特性 1.2.5 使用高斯核做平滑滤波相对箱式滤波的优点 2 噪声 和 滤波 2.1 椒盐噪声、脉冲噪声 2.1.1 …

python高斯核函数_机器学习:SVM(核函数、高斯核函数RBF)

一、核函数(Kernel Function) 1)格式 K(x, y):表示样本 x 和 y,添加多项式特征得到新的样本 x、y,K(x, y) 就是返回新的样本经过计算得到的值; 在 SVM 类型的算法 SVC() 中,K(x, y) 返回点乘:x . y 得到的值; 2)多项式核函数 业务问题:怎么分类非线性可分的样本…

高斯整数matlab,Matlab---自适应高斯核

MCNN提出了适用于高密度人群的自适应高斯核: 笔者所理解的自适应高斯核函数: %function:通过高斯核产生相应的密度矩阵 %parameter: im:输入图像,灰度图; points:标注的点[X Y],n*2的矩阵 function im_density = get_density_map_autogaussian(im,points) im_density =…

高斯核原理详解+生成高斯核的Python代码

要搞清楚高斯核的原理的话&#xff0c;把下面这篇博文认认真真看一遍就可以了&#xff0c;链接如下&#xff1a; https://blog.csdn.net/u013066730/article/details/123112159 下面是我认为值得注意和需要补充说明的几点&#xff1a; 1 为什么高斯滤波能够让图像实现模糊化&a…

C语言哈希表UT_hash的使用方法详解

由于C语言本身不存在哈希,因此&#xff0c;我们可以调用开源的第三方头文件&#xff0c;这只是一个头文件&#xff1a;uthash.h&#xff0c;使用时只需要在文件首部编写#include<uthash.h>即可。 uthash的使用 #include "uthash.h" struct my_struct {int id…

utxo 是什么

UTXO 代表 Unspent Transaction Output。 在比特币社区里&#xff0c;Transaction 被简称为 TX&#xff0c;所以上面这个短语缩写为 UTXO。一般会认为 UTXO 是比特币区块链设计当中的一部分&#xff0c;但事实上 UTXO 和区块链没有必然的联系&#xff0c;你可以完全照搬比特币区…

UT单元测试(一)——基础流程总结篇

参考书籍《单元测试的艺术》 一、单元测试的定义 一个单元测试是一段代码&#xff08;通常是一个方法&#xff09;&#xff0c;这段代码调用另一段代码&#xff08;一个单元可以是一个方法或函数&#xff09;&#xff0c;然后检验某些假设的正确性。如果这些假设是正确的&a…

UT标记详细说明

原来论坛用的是UT标记&#xff0c;UT是UltraThreads的简写。 微软word用的是Microsoft Word XML。 网页用的html ------------------------------------------------------------------ 什么是UT代码&#xff1f; UT标记对HTML的简化。一般情况下&#xff0c;即使指定讨论区禁…

UT-890J ( USB -2- RS422/485 Cable )

USB -2- RS422/485 Cable < 參考 網路文章 / 規格書 > DB9 公頭 (有 DB9轉 KF128螺絲端子轉接板 ) UT890_20190220152556_43695-2.pdf 驅動下載: UT890_Win XP Server2003 2008 Vista 7 8 32-64bit FT-232 USB-232 Chip USB -2- RS422/485 Cable < 參考文章 / 規格書…

RTU是什么及其用途

RTU是Remote Terminal Unit&#xff08;远程终端单元&#xff09;的缩写&#xff0c;是一种用于实现现动器等现场控制设备&#xff0c;实现对现场设备的实时监控&#xff0c;用途包括以下几个方面&#xff1a; 1.压力、流量等。 2.实时监测&#xff1a;RTU可以对现场设备进行…

RTU和DTU的区别是什么?

在物联网应用中&#xff0c;我们经常使用到两种数据传输设备——DTU和RTU。它们的功能大致相似&#xff0c;但又有些许不同。那在实际应用中&#xff0c;什么情况选择DTU&#xff0c;什么情况选择RTU呢&#xff1f;下面我们就一起来看看&#xff0c;它们之间到底有什么区别以及…

RTU和DTU分别是什么?

RTU和DTU是两种常见的远程数据采集和传输设备&#xff0c;虽然它们都是用于实现远程数据采集和传输&#xff0c;但在一些方面存在不同&#xff0c;下面是两者的区别。1、定义RTU是Remote Terminal Unit的缩写&#xff0c;翻译为“远程终端单元”&#xff0c;它是一种用于实现远…

硬刚Hive | 4万字基础调优面试小总结

本文基本涵盖以下内容&#xff1a; 一、基于Hadoop的数据仓库Hive基础知识二、HiveSQL语法三、Hive性能优化四、Hive性能优化之数据倾斜专题五、HiveSQL优化十二板斧六、Hive面试题(一)七、Hive/Hadoop高频面试点集合(二) 基于Hadoop的数据仓库Hive基础知识 Hive是基于Hadoop的…

数据结构知识点_重点期考总结复习

目录 前言数据数据的逻辑结构和物理结构逻辑结构物理结构&#xff08;存储结构&#xff09; 算法特性和时间复杂度算法的五大特性算法的时间复杂度 线性表线性表两种存储结构顺序表链型表线性表分析 栈和队列栈队列 串串的基本操作定长存储结构堆分配存储结构块链存储表示串的模…

前端JS/TS面试题

JS面试题总结 一、this指向问题&#xff08;1&#xff09;this的理解&#xff08;2&#xff09;怎样改变this的指向问题&#xff08;3&#xff09;Call,bind,apply三者的区别&#xff08;4&#xff09;容易判读错的几种this情况&#xff08;5&#xff09;this指向问题&#xff…

3.Hadoop Hive服务

接上文—————> 目录&#xff1a; 一.安装二.have基本命令操作三.hive数据仓库四.hive表的类型&#xff1a;五.hive中重要的元数据表六.hive的连接方式七.使用jdbc编写外部程序操作hive八.hive的基本数据类型九.hive的复杂的数据类型十.hive的建表语句十一.hive 删除表十…

深入理解计算机系统(CSAPP)含lab详解 完结

文章目录 深入理解计算机操作系统-第一章1.1 信息就是位 上下文1.2 程序被其他程序翻译成不同的格式1.3 了解编译系统如何工作是大有益处的1.4 处理器读并解释储存在内存中的指令1.4.1 系统的硬件组成I/O 设备1.4.2 运行 hello 程序 1.5 高速缓存至关重要1.6 存储设备形成层次…

面经-hangzhou

目录 上篇 一、基础篇 网络基础 TCP三次握手 HTTP协议 浏览器输入URL过程 操作系统基础 进程和线程的区别 操作系统内存管理 Java基础 面向对象三大特性 数据结构 设计模式与原则 面试题 构造方法 初始化块 This 重写和重载的区别 Object类方法 基本数据类…