python核函数估计 python核心算法

python的seaborn.kdeplot有什么用kde(kernel density estimation)是核密度估计 。核的作用是根据离散采样 , 估计连续密度分布 。
如果原始采样是《阴阳师》里的式神,那么kernel(核函数)就相当于御魂 。
假设现在有一系列离散变量X = [4, 5, 5, 6, 12, 14, 15, 15, 16, 17],可见5和15的概率密度应该要高一些,但具体有多高呢?有没有三四层楼那么高,有没有华莱士高?如果要估计的是没有出现过的3呢?这就要自己判断python核函数估计了 。
核函数就是给空间的每个离散点都套上一个连续分布 。最简单的核函数是Parzen窗,类似一个方波python核函数估计:
这时候单个离散点就可以变成区间 , 空间或者高维空间下的超立方 , 实质上是进行了升维 。
设h=4 , 则3的概率密度为python核函数估计:
(只有4对应的核函数为1,其他皆为0)
kernel是非负实值对称可积函数,表示为K,且一本满足:
这样才能保证cdf仍为1 。
实际上应用最多的是高斯核函数(Gaussian Kernel) , 也就是标准正态分布 。所谓核密度估计就是把所有离散点的核函数加起来,得到整体的概率密度分布 。核密度估计在很多机器学习算法中都有应用,比如K近邻、K平均等 。
在支持向量机里,也有“核”的概念,同样也是给数据升维,最常用的还是高斯核函数 , 也叫径向基函数(Radial Basis Funtion) 。
seaborn.kdeplot内置了多种kerne,总有一款适合python核函数估计你 。
Python中怎样编写混合核函数?这个和用不用python没啥关系,是数据来源的问题 。调用淘宝API,使用 api相关接口获得你想要的内容,我 记得api中有相关的接口 , 你可以看一下接口的说明 。用python做爬虫来进行页面数据的获龋 。
如何利用 Python 实现 SVM 模型我先直观地阐述我对SVM的理解 , 这其中不会涉及数学公式,然后给出Python代码 。
SVM是一种二分类模型 , 处理的数据可以分为三类:
线性可分 , 通过硬间隔最大化,学习线性分类器
近似线性可分 , 通过软间隔最大化 , 学习线性分类器
线性不可分,通过核函数以及软间隔最大化,学习非线性分类器
线性分类器 , 在平面上对应直线;非线性分类器,在平面上对应曲线 。
硬间隔对应于线性可分数据集,可以将所有样本正确分类 , 也正因为如此,受噪声样本影响很大 , 不推荐 。
软间隔对应于通常情况下的数据集(近似线性可分或线性不可分),允许一些超平面附近的样本被错误分类,从而提升了泛化性能 。
如下图:
实线是由硬间隔最大化得到的,预测能力显然不及由软间隔最大化得到的虚线 。
对于线性不可分的数据集,如下图:
我们直观上觉得这时线性分类器,也就是直线,不能很好的分开红点和蓝点 。
但是可以用一个介于红点与蓝点之间的类似圆的曲线将二者分开,如下图:
我们假设这个黄色的曲线就是圆,不妨设其方程为x^2+y^2=1,那么核函数是干什么的呢?
我们将x^2映射为X,y^2映射为Y , 那么超平面变成了X+Y=1 。
那么原空间的线性不可分问题,就变成了新空间的(近似)线性可分问题 。
此时就可以运用处理(近似)线性可分问题的方法去解决线性不可分数据集的分类问题 。
---------------------------------------------------------------------------------------------------------------------------
以上我用最简单的语言粗略地解释了SVM,没有用到任何数学知识 。但是没有数学,就体会不到SVM的精髓 。因此接下来我会用尽量简洁的语言叙述SVM的数学思想,如果没有看过SVM推导过程的朋友完全可以跳过下面这段 。

推荐阅读