python计算核函数 核函数 python( 三 )


“分割带”代表了模型划分样本点的能力或可信度,“分割带”越宽,说明模型能够将样本点划分得越清晰,进而保证模型泛化能力越强,分类的可信度越高;反之,“分割带”越窄 , 说明模型的准确率越容易受到异常点的影响,进而理解为模型的预测能力越弱 , 分类的可信度越低 。
线性可分的所对应的函数间隔满足的条件,故就等于。所以,可以将目标函数等价为如下的表达式:
假设存在一个需要最小化的目标函数,并且该目标函数同时受到的约束 。如需得到最优化的解,则需要利用拉格朗日对偶性将原始的最优化问题转换为对偶问题,即:
分割面的求解
分割面的表达式
对于非线性SVM模型而言,需要经过两个步骤,一个是将原始空间中的样本点映射到高维的新空间中 , 另一个是在新空间中寻找一个用于识别各类别样本点线性“超平面” 。
假设原始空间中的样本点为,将样本通过某种转换映射到高维空间中,则非线性SVM模型的目标函数可以表示为:
其中,内积可以利用核函数替换 , 即。对于上式而言,同样需要计算最优的拉格朗日乘积 , 进而可以得到线性“超平面”与的值:
假设原始空间中的两个样本点为,在其扩展到高维空间后,它们的内积如果等于样本点在原始空间中某个函数的输出 , 那么该函数就称为核函数 。
线性核函数的表达式为,故对应的分割“超平面”为:
多项式核函数的表达式为,故对应的分割“超平面”为:
高斯核函数的表达式为,故对应的分割“超平面”为:
Sigmoid 核函数的表达式为,故对应的分割“超平面”为:
在实际应用中,SVM 模型对核函数的选择是非常敏感的 , 所以需要通过先验的领域知识或者交叉验证的方法选出合理的核函数 。大多数情况下,选择高斯核函数是一种相对偷懒而有效的方法,因为高斯核是一种指数函数 , 它的泰勒展开式可以是无穷维的 , 即相当于把原始样本点映射到高维空间中 。
output_13_0.png
python的多线程是否能利用多核计算比方我有一个4核的CPU,那么这样一来,在单位时间内每个核只能跑一个线程 , 然后时间片轮转切换 。但是Python不一样 , 它不管你有几个核,单位时间多个核只能跑一个线程,然后时间片轮转 。看起来很不可思议?但是这就是GIL搞的鬼 。任何Python线程执行前,必须先获得GIL锁 , 然后,每执行100条字节码,解释器就自动释放GIL锁 , 让别的线程有机会执行 。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核 。通常我们用的解释器是官方实现的CPython,要真正利用多核 , 除非重写一个不带GIL的解释器 。
支持向量机—从推导到python手写 笔者比较懒能截图的地方都截图了 。
支持向量机分为三类:
(1)线性可分支持向量机 , 样本线性可分 , 可通过硬间隔最大化训练一个分类器 。
(2)线性支持向量机,样本基本线性可分,可通过软间隔最大化训练一个分类器 。
(3)非线性支持向量机,样本线性不可分,可通过核函数和软间隔最大化训练一个分类器 。
上面最不好理解的恐怕就是硬间隔和软间隔了,
说白了硬间隔就是说存在这么一个平面,可以把样本完全正确无误的分开 , 当然这是一种极理想的情况,现实中不存在,所以就有了软间隔 。