核函数

ML- 核函数(Kernel) 的 SVM

☆樱花仙子☆ 提交于 2019-12-05 22:37:57
Why 核函数 目的是为了解决 线性不可分问题 . 核心思想是 升维 . 当样本点在低维空间不能很好地分开的时候, 可以考虑将样本 通过某种映射(就是左乘一个矩阵) 到高维空间中, 然后在高维空间就容易 求解一个平面 \(w^Tx +b\) 将其分开了. 想法是很美滋滋, 但立马就有一个问题, 计算量大 , 升到几百几千维, 内存怕是受不了. 这就立马联想到 PCA 降维 . 我在上大学的时候, 做客户细分,和用户画像(ps, 我是市场营销专业嘛 ), 通常是会用到降维技术, 然后 提取主成分或做因子分析 , 目的都是为了 降维和使数据具有可解释性 . 结果核函数却要升维度, 感觉是费力费力搞了半天, 又回去了. 低高维 维度的理解应从向量空间去理解(构成该空间的基是几个),要从 数学概念上 理解. 这个什么"三维空间, 四维时间" 的物理概念是不一样的. 千万不要混淆什么时间,空间, 还有举个栗子, 如果连基本的抽象思维都没有, 那确实有些尴尬 映射(变换) 数据的 值大小 肯定跟原来的是不一样了呀. 在形式上就是 左乘一个矩阵 , \(X' = PX\) , 可理解 矩阵本质是一个特殊的函数 , 特殊在于它更像是 咱们写代码时 自定义函数 可以完成咱自定义的功能, 如对样本进行 旋转, 拉伸 (特征分解), 或拉伸旋转(SVD 分解) 等. 这些内部代码, 就封装在

Python 深入浅出支持向量机(SVM)算法

时光总嘲笑我的痴心妄想 提交于 2019-12-05 20:20:16
相比于逻辑回归,在很多情况下,SVM算法能够对数据计算从而产生更好的精度。而传统的SVM只能适用于二分类操作,不过却可以通过核技巧(核函数),使得SVM可以应用于多分类的任务中。 本篇文章只是介绍SVM的原理以及核技巧究竟是怎么一回事,最后会介绍sklearn svm各个参数作用和一个demo实战的内容,尽量通俗易懂。至于公式推导方面,网上关于这方面的文章太多了,这里就不多进行展开了~ 1.SVM简介 支持向量机,能在N维平面中,找到最明显得对数据进行分类的一个超平面!看下面这幅图: 如上图中,在二维平面中,有红和蓝两类点。要对这两类点进行分类,可以有很多种分类方法,就如同图中多条绿线,都可以把数据分成两部分。 但 SVM做的,是找到最好的那条线(二维空间),或者说那个超平面(更高维度的空间),来对数据进行分类。这个最好的标准,就是最大间距 。 至于要怎么找到这个最大间距,要找到这个最大间距,这里大概简单说一下,两个类别的数据,到超平面的距离之和,称之为 间隔 。而要做的就是找到最大的间隔。 这最终就变成了一个最大化间隔的优化问题。 2.SVM的核技巧 核技巧,主要是为了解决线性SVM无法进行多分类以及SVM在某些线性不可分的情况下无法分类的情况。 比如下面这样的数据: 这种时候就可以使用核函数,将数据转换一下,比如这里,我们手动定义了一个新的点,然后对所有的数据

器学习笔记(六) ---- 支持向量机(SVM)【华为云技术分享】

邮差的信 提交于 2019-12-04 13:31:01
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/devcloud/article/details/102663611 支持向量机(SVM)可以说是一个完全由数学理论和公式进行应用的一种机器学习算法,在小批量数据分类上准确度高、性能好,在二分类问题上有广泛的应用。 同样是二分类算法,支持向量机和逻辑回归有很多相似性,都是二分类问题的判决模型,主要的差异在于损失函数的不同,支持向量机相比于逻辑回归,更倾向于找到样本空间中最优的划分超平面。 首先说一下 超平面的概念 :超平面是一个数学概念,而不好以物理概念解释,因为画不出来:)。n维空间的超平面表示 W t x + b = 0。二维空间中,超平面是一条直线,三维空间中,超平面是一个平面,以此类推... -- 线性支持向量机 我们先假设数据集是线性可分的,这是使用SVM的前提条件(线性不可分其实也有办法解决,后面再说),什么是线性可分呢? 线性可分 :对于二维(两个特征)数据集来说,如果存在一条直线,能把这两类数据完全区分开,就说这个数据集是线性可分的。如果多维(k个特征)数据,存在一个维度为k-1的超平面能完全分开两类数据,也称为线性可分。 SVM要解决的问题:就是在样本空间中找到最优(最鲁棒、泛化能力最强)划分超平面

关于SVM的一些知识点

空扰寡人 提交于 2019-12-03 20:45:39
SVM 支持向量机 定义 : 支持向量机是主要用于解决分类问题的学习模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。 分类 1-当训练样本线性可分,通过硬间隔最大化,学习一个线性分类器,叫线性可分支持向量机 2-当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,叫线性支持向量机 3-当训练数据线性不可分的时候,通过使用核技巧以及软间隔最大化,学习非线性支持向量机 SVM 算法的主要优点有 : 1) 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。 2) 仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。 3) 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。 4) 样本量不是海量数据的时候,分类准确率高,泛化能力强。 SVM 算法的主要缺点有 : 1) 如果特征维度远远大于样本数,则 SVM 表现一般。 2) SVM 在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。 3) 非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。 4) SVM 对缺失数据敏感。 SVM 核函数的意义 SVM 通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身无法线性可分的数据分开

数据挖掘(机器学习)面试--SVM面试常考问题

匿名 (未验证) 提交于 2019-12-03 00:22:01
转自 https://blog.csdn.net/szlcw1/article/details/52259668 应聘数据挖掘工程师或机器学习工程师,面试官经常会考量面试者对SVM的理解。 以下是我自己在准备面试过程中,基于个人理解,总结的一些SVM面试常考问题(想到会再更新),如有错漏,请批评指正。(大神请忽视) 转载请注明出处:blog.csdn.net/szlcw1 SVM的原理是什么? SVM是一种二类分类模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。(间隔最大是它有别于感知机) (1)当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机; (2)当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机; (3)当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。 注:以上各SVM的数学推导应该熟悉: 硬间隔最大化(几何间隔)---学习的对偶问题---软间隔最大化(引入松弛变量) --- 非线性支持向量机(核技巧)。 SVM为什么采用间隔最大化? 当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。 感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。 线性可分支持向量机 利用间隔最大化求得最优分离超平面 ,这时,解是唯一的

【感受】android + opencv + umat + opencl使用感受

匿名 (未验证) 提交于 2019-12-02 23:49:02
近期编译了android下支持opencl的opencv,使用opencl能力的关键是用cv::UMat替换cv::Mat。 实际使用后发现坑很多,非常不成熟,不推荐使用这种方式来提升实际产品的性能。 每个UMat产生的时候会从gpu分配内存,而GPU分配内存是很慢的;使用Mat的时候,这点开销不值得一提,但是UMat完全不是一回事。因此,UMat一定一定要重用,避免反复分配。 mat.getUMat()方法很多坑,引用计数的错误很难查,至今没搞明白原理。因此一直用mat.copyTo(umat)来代替。 mat.copyTo(umat) 和 umat.copyTo(mat)也是很慢的,因此,一定要计算时间大于数据拷贝时间,抵消了拷贝的开销,使用umat才能带来性能提升。 例如这样一个函数 cv::cvtColor(umat_in, umat_out),第一次使用是很慢的,因为opencl的核函数编译很耗时。因此要使用很多次,多到第一次使用的编译开销可以忽略。 再说核函数编译的问题:opencv是C风格的,每次调用,核函数都要编译一次,虽然第二次以后很快,但是这种每次调用都编译一次核函数没有意义。 T-API看起来很好,一套API既支持Mat又支持UMat,但其中的坑是:计算到底用GPU完成的还是CPU完成的,你不知道。例如我使用cv::dft()一样

sklearn中svm详解

匿名 (未验证) 提交于 2019-12-02 23:43:01
1、SVC函数原型 SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3, gamma=‘auto’, kernel=‘rbf’, max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False) 2、参数详解 C:惩罚参数。 默认值是1.0,C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但容易过拟合,高方差,泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强,但过小容易欠拟合,高偏差。 cache_size :核函数cache缓存大小,默认为200。 class_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C) coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。 decision_function_shape :‘ovo’, ‘ovr’ or None, default=ovr degree :多项式poly函数的维度,默认是3

分类Classification(支持向量机 SVM)

匿名 (未验证) 提交于 2019-12-02 23:43:01
十二、支持向量机(SVM) 1. 原理 寻求最优分类边界: 正确 :对大部分样本可以正确地划分类别。 泛化 :最大化支持向量间距。 公平 :与支持向量等距。 简单 :线性,直线或平面,分割超平面。 基于核函数的升维变换: 通过名为核函数的特征变换,增加新的特征,使得低维度空间中的线性不可分问题变为高维度空间中的线性可分问题。 2. 不同核函数的分类效果 线性核函数:linear,不通过核函数进行维度提升,尽在原始维度空间中寻求线性分类边界。 # svm_line.py import numpy as np import sklearn . model_selection as ms import sklearn . svm as svm import sklearn . metrics as sm import matplotlib . pyplot as mp x , y = [ ] , [ ] with open ( '../data/multiple2.txt' , 'r' ) as f : for line in f . readlines ( ) : data = [ float ( substr ) for substr in line . split ( ',' ) ] x . append ( data [ : - 1 ] ) y . append ( data [

核函数精解

匿名 (未验证) 提交于 2019-12-02 23:34:01
https://zhuanlan.zhihu.com/p/45223109 高维映射 与 核方法(Kernel Methods) 29 人赞同了该文章 高维映射跟核方法的概念很容易混淆。 高维映射通过将样本从原始空间映射到一个更高维的特征空间,从而解决了低纬下难以解决的问题。 核方法往往跟高维映射配合使用,可以看做是一种技巧,可以通过它来避免这种映射的计算。 下面详细介绍一下这两个概念。 一、高维映射 我们知道,线性回归是用一条直线来拟合数据。但是我们往往会遇到数据并不服从线性分布的情况,比如: 于是,我们选择变成一个二次方程来拟合: 这里分布是一个二次函数,如果我们遇到了更加复杂的函数,我们依然可以通过选取合适的拉伸函数来变成线性的问题。幸运的是可以证明,只要数据的分布在维度有限的空间上,我们总是能够找到一个更高维度的空间,使得它的分布是线性的。 二、求解高维映射后的线性方程 如果不做高维映射的话,线性回归的解是: 不明白的可以看看我另外一篇的讲线性回归的,里面包含了推导过程。 好了,右边全都是已知量,我们已经解出来了这个模型了。 我们做完高维映射之后的线性方程,要如何去预测模型呢?来模拟一下这个过程: 看看上面的过程中,我们用了多少次拉伸函数。在训练过程中,我们对训练集里面每个样本都用了一次拉伸。在预测的时候,我们又要对预测集里面的每个样本做一次拉伸。现在我告诉你

机器学习笔记(七)支持向量机

Deadly 提交于 2019-12-02 08:34:02
Support vector machine(支持向量机 SVM) 1、推导: (1)对于逻辑回归,cost函数为: ① 当 y = 1时,即 θ T x >> 0时 ,cost = - log(1 / (1 + e -z )) ,图像如下: 用新的代价函数产生新的曲线:cost 1 (z) ② 当 y = 0时,即 θ T x << 0时 ,cost = - log(1 - 1 / (1 + e -z )) ,图像如下: 用新的代价函数产生新的曲线:cost 0 (z) (2)产生新的目标函数: (3)模型修改: 2、Large margin intuition(大间距分类器): (1)问题简写:min C * A + B 当 C 特别大时,结果将会使得左边的求和式子 A 趋近0,使得问题转化为 min B,即: (2)SVM决策边界: 下图的分类问题,有很多种划分方法,但是下面举例的两种分法显然不够科学。 利用SVM,可以实现最大间距的分类(蓝色线条为决策边界)。 缺陷:若C特别大,易受到奇异点影响; (3)数学原理: ① Vector inner product(向量內积): ② 简化SVM问题:设置 θ 0 = 0(决策边界必须经过原点), n = 2 ③ 问题转化: 3、Kernels(核函数): (1)问题背景: 在进行非线性分类时,使用高次项作为特征变量计算量大