核函数和激活函数和异常检测和聚类(outlier detection)

文章目录

  • 一、核函数
    • 1.1 Linear核函数
    • 1.2 RBF高斯核函数
    • 1.3 sigmoid核函数
    • 1.4 多项式核函数
    • 1.5 选择核函数的方法
    • 1.6 核函数对应的参数
    • 1.7 聚类初始质心的选取
    • 1.8 聚类算法停止条件
    • 1.9 聚类距离的度量
  • 二、激活函数
    • 2.1 tanh激活
    • 2.2 sigmoid 函数
    • 2.3 ReLU函数
    • 2.4 PReLU函数
    • 2.5 ELU函数
    • 2.6 softmax
  • 三、异常检测(Anomaly Detection)
    • 3.1 异常检测介绍
    • 3.2 高斯分布x~N(u,σ2)
  • 有趣的事,Python永远不会缺席
  • 证书说明

特征工程 Feature Engineering(一)
PimaIndiansdiabetes-数据预处理实验(一)
聚类总结(一)K-means、层次、DBSCAN、均值漂移、K-Means 与 KNN
聚类总结(二)聚类性能评估、肘部法则、轮廓系数
网格搜索 GridSearchCV\训练集、验证集和测试集

一、核函数

  有人说核函数与内积是等价的,我赞同这一观点。当我们将低维空间的数据映射到高维空间的时候,我们甚至不需要知道映射函数是什么,就算知道了又能怎么样,它只会给我们带来计算的复杂度。我们需要的是这种类型的核函数可以在低维空间中用怎样的形式表现出来,因为低维空间的表达式才是容易计算的。可以说,内积是核函数实现的一种技巧。没有内积,就没有核函数;没有核函数,也就体现不出内积的价值。

1.1 Linear核函数

  要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。线性核,主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的

核函数和激活函数和异常检测和聚类(outlier detection)_第1张图片

1.2 RBF高斯核函数

  主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。我个人的体会是:使用libsvm,默认参数,RBF核比Linear核效果稍差。通过进行大量参数的尝试,一般能找到比linear核更好的效果。至于到底该采用哪种核,要根据具体问题,有的数据是线性可分的,有的不可分,需要多尝试不同核不同参数。如果特征的提取的好,包含的信息量足够大,很多问题都是线性可分的。当然,如果有足够的时间去寻找RBF核参数,应该能达到更好的效果。

  RBF kernel可以处理非线性的情况,linear kernel可以是RBF kernel的特殊情况;高斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。

核函数和激活函数和异常检测和聚类(outlier detection)_第2张图片

1.3 sigmoid核函数

  采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。

核函数和激活函数和异常检测和聚类(outlier detection)_第3张图片

1.4 多项式核函数

  polynomial kernel的参数比RBF多,而参数越多模型越复杂;多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。

核函数和激活函数和异常检测和聚类(outlier detection)_第4张图片

1.5 选择核函数的方法

  

  • 如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
  • 如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
  • 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。
  • RBF kernel更方便计算,取值在[0,1];而用polynomial kernel取值范围是(0,inf),在自由度高的情况下更凸显出劣势;至于sigmoid,它可能在某些参数下是无效的
  • RBF核函数可以将一个样本映射到一个更高维的空间,而且线性核函数是RBF的一个特例,也就是说如果考虑使用RBF,那么就没有必要考虑线性核函数了。
  • 与多项式核函数相比,RBF需要确定的参数要少,核函数参数的多少直接影响函数的复杂程度。另外,当多项式的阶数比较高时,核矩阵的元素值将趋于无穷大或无穷小,而RBF则在上,会减少数值的计算困难。
  • 对于某些参数,RBF和sigmoid具有相似的性能。

1.6 核函数对应的参数

1)对于线性核函数,没有专门需要设置的参数 
2)对于多项式核函数,有三个参数。-d用来设置多项式核函数的最高此项次数,也就是公式中的d,默认值是3。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。 
3)对于RBF核函数,有一个参数。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。 
4)对于sigmoid核函数,有两个参数。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。
from sklearn.cluster import KMeans
model = KMeans(n_clusters=8,
               init='k-means++',
               n_init=10,
               max_iter=300,
               tol=0.0001,
               precompute_distances='auto',
               verbose=0,
               random_state=None,
               copy_x=True,
               n_jobs=None,
               algorithm='auto')

参数的意义:

  • n_clusters:簇的个数,即你想聚成几类
  • init: 初始簇中心的获取方法
  • n_init: 获取初始簇中心的更迭次数,为了弥补初始质心的影响,算法默认会初始10个质心,实现算法,然后返回最好的结果。
  • max_iter: 最大迭代次数(因为kmeans算法的实现需要迭代)
  • tol: 容忍度,即kmeans运行准则收敛的条件
  • precompute_distances:是否需要提前计算距离,这个参数会在空间和时间之间做权衡,如果是True 会把整个距离矩阵都放到内存中,auto 会默认在数据样本大于- featurs*samples 的数量大于12e6 的时候False,False 时核心实现的方法是利用Cpython 来实现的
  • verbose: 冗长模式(不太懂是啥意思,反正一般不去改默认值)
  • random_state: 随机生成簇中心的状态条件。
  • copy_x: 对是否修改数据的一个标记,如果True,即复制了就不会修改数据。bool 在- scikit-learn 很多接口中都会有这个参数的,就是是否对输入数据继续copy 操作,以便不修改用户的输入数据。这个要理解Python 的内存机制才会比较清楚。
  • n_jobs: 并行设置
  • algorithm: kmeans的实现算法,有:’auto’, ‘full’, ‘elkan’, 其中 ‘full’表示用EM方式实现

1.7 聚类初始质心的选取

  
常见的方法是随机的选取初始质心,但是这样簇的质量常常很差。
(1)多次运行,每次使用一组不同的随机初始质心,然后选取具有最小SSE(误差的平方和)的簇集。这种策略简单,但是效果可能不好,这取决于数据集和寻找的簇的个数。

(2)取一个样本,并使用层次聚类技术对它聚类。从层次聚类中提取K个簇,并用这些簇的质心作为初始质心。该方法通常很有效,但仅对下列情况有效:样本相对较小;K相对于样本大小较小。

(3)取所有点的质心作为第一个点。然后,对于每个后继初始质心,选择离已经选取过的初始质心最远的点。使用这种方法,确保了选择的初始质心不仅是随机的,而且是散开的。但是,这种方法可能选中离群点。

1.8 聚类算法停止条件

  
一般是目标函数达到最优或者达到最大的迭代次数即可终止。对于不同的距离度量,目标函数往往不同。当采用欧式距离时,目标函数一般为最小化对象到其簇质心的距离的平方和;当采用余弦相似度时,目标函数一般为最大化对象到其簇质心的余弦相似度和。

1.9 聚类距离的度量

常用的距离度量方法包括:欧几里得距离和余弦相似度。欧几里得距离度量会受指标不同单位刻度的影响,所以一般需要先进行标准化,同时距离越大,个体间差异越大;空间向量余弦夹角的相似度度量不会受指标刻度的影响,余弦值落于区间[-1,1],值越大,差异越小。

二、激活函数

  激活函数,即Activation Function,有时候也称作激励函数。它是为了解决线性不可分的问题引出的。但是也不是说线性可分就不能用激活函数,也是可以的。它的目的是为了使数据更好的展现出我们想要的效果。

2.1 tanh激活

  tanh是双曲正切函数,tanh是zero-centered,但是还是会饱和。tanh函数和sigmod函数的曲线是比较相近的,咱们来比较一下看看。首先相同的是,这两个函数在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新;不同的是输出区间,tanh的输出区间是在(-1,1)之间,而且整个函数是以0为中心的,这个特点比sigmod的好。

  一般二分类问题中,隐藏层用tanh函数,输出层用sigmod函数。不过这些也都不是一成不变的,具体使用什么激活函数,还是要根据具体的问题来具体分析,还是要靠调试的。

核函数和激活函数和异常检测和聚类(outlier detection)_第5张图片

2.2 sigmoid 函数

  在sigmod函数中我们可以看到,其输出是在(0,1)这个开区间内;特点:可以解释,比如将0-1之间的取值解释成一个神经元的激活率(firing rate)

  知识点:对于函数f(x),若x趋向于负无穷大,其导数f’(x)趋向于0,则称其为左饱和。若x趋向于正无穷大,其导数f’(x)趋向于0,则称其为右饱和。同时满足左右饱和时,称为两端饱和。

缺陷

  有饱和区域,是软饱和,在大的正数和负数作为输入的时候,梯度就会变成零,使得神经元基本不能更新。
  只有正数输出(不是zero-centered),这就导致所谓的zigzag现象:

  在sigmod函数中我们可以看到,其输出是在(0,1)这个开区间内

核函数和激活函数和异常检测和聚类(outlier detection)_第6张图片

函数本身是有一定的缺陷:

  1. 当输入稍微远离了坐标原点,函数的梯度就变得很小了,几乎为零。在神经网络反向传播的过程中,我们都是通过微分的链式法则来计算各个权重w的微分的。当反向传播经过了sigmod函数,这个链条上的微分就很小很小了,况且还可能经过很多个sigmod函数,最后会导致权重w对损失函数几乎没影响,这样不利于权重的优化,这个问题叫做梯度饱和,也可以叫梯度弥散。

  2. 函数输出不是以0为中心的,这样会使权重更新效率降低。对于这个缺陷,在斯坦福的课程里面有详细的解释。

  3. sigmod函数要进行指数运算,这个对于计算机来说是比较慢的。

2.3 ReLU函数

  ReLU(Rectified Linear Unit)函数是目前比较火的一个激活函数,相比于sigmod函数和tanh函数,它有以下几个优点

  1. 在输入为正数的时候,不存在梯度饱和问题。

  2. 计算速度要快很多。ReLU函数只有线性关系,不管是前向传播还是反向传播,都比sigmod和tanh要快很多。(sigmod和tanh要计算指数,计算速度会比较慢)

  当然,缺点也是有的:

  1. 当输入是负数的时候,ReLU是完全不被激活的,这就表明一旦输入到了负数,ReLU就会死掉。这样在前向传播过程中,还不算什么问题,有的区域是敏感的,有的是不敏感的。但是到了反向传播过程中,输入负数,梯度就会完全到0,这个和sigmod函数、tanh函数有一样的问题。

  2. 我们发现ReLU函数的输出要么是0,要么是正数,这也就是说,ReLU函数也不是以0为中心的函数。

核函数和激活函数和异常检测和聚类(outlier detection)_第7张图片

  CNN中常用。对正数原样输出,负数直接置零。在正数不饱和,在负数硬饱和。relu计算上比sigmoid或者tanh更省计算量,因为不用exp,因而收敛较快。但是还是非zero-centered。

  relu在负数区域被kill的现象叫做dead relu,这样的情况下,有人通过初始化的时候用一个稍微大于零的数比如0.01来初始化神经元,从而使得relu更偏向于激活而不是死掉,但是这个方法是否有效有争议。

2.4 PReLU函数

  PReLU也是针对ReLU的一个改进型,在负数区域内,PReLU有一个很小的斜率,这样也可以避免ReLU死掉的问题。相比于ELU,PReLU在负数区域内是线性运算,斜率虽然小,但是不会趋于0,这算是一定的优势吧。

  我们看PReLU的公式,里面的参数α一般是取0~1之间的数,而且一般还是比较小的,如零点零几。当α=0.01时,我们叫PReLU为Leaky ReLU,算是PReLU的一种特殊情况吧。

  总体来看,这些激活函数都有自己的优点和缺点,没有一条说法表明哪些就是不行,哪些激活函数就是好的,所有的好坏都要自己去实验中得到。
qq

核函数和激活函数和异常检测和聚类(outlier detection)_第8张图片

2.5 ELU函数

  ELU函数是针对ReLU函数的一个改进型,相比于ReLU函数,在输入为负数的情况下,是有一定的输出的,而且这部分输出还具有一定的抗干扰能力。这样可以消除ReLU死掉的问题,不过还是有梯度饱和和指数运算的问题。

核函数和激活函数和异常检测和聚类(outlier detection)_第9张图片

2.6 softmax

  用于多分类过程,把多个神经元输出值映射到(0,1)总和为1,可以从概率角度理解,则输出时选择值最大的(概率最大)作为预测值

核函数和激活函数和异常检测和聚类(outlier detection)_第10张图片

三、异常检测(Anomaly Detection)

3.1 异常检测介绍

  总体来讲,异常检测问题可以概括为两类:

  1. 一是对结构化数据的异常检测。
      对结构化数据的异常检测的解决思想主要是通过找出与正常数据集差异较大的离群点,把离群点作为异常点。常常面临的问题有二:一是需要定义一个清晰的决策边界,从而界定正常点与异常点;二是维数灾难及交叉指标计算之间的高频计算性能瓶颈。主要使用以下五种方式解决:
  • 图形位置分布,最简单的异常检测方式是基于图形位置,例如箱线图。
  • 统计方法检测
  • 距离检测
  • 密度检测
  • 矩阵分解检测
  • 无监督模型识
  1. 二是对非结构化数据的异常检测。
      对非结构化数据的异常检测常见于图像识别,通过对图像目标检测,识别出异常(故障)点,主要使用以下四种方式解决:
  • 数字图像处理
  • RCNN系列
  • YOLO系列
  • SSD系列

3.2 高斯分布x~N(u,σ2)

  高斯分布,也称为正态分布

  我们可以利用已有的数据来预测总体中的u和σ2的计算方法如下:

'''
【干货来了|小麦苗IT资料分享】
★小麦苗DB职场干货:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w
★小麦苗数据库健康检查:https://share.weiyun.com/5lb2U2M
★小麦苗微店:https://weidian.com/s/793741433?wfr=c&ifr=shopdetail
★各种操作系统下的数据库安装文件(Linux、Windows、AIX等):链接:https://pan.baidu.com/s/19yJdUQhGz2hTgozb9ATdAw  提取码:4xpv
★小麦苗分享的资料:https://share.weiyun.com/57HUxNi
★小麦苗课堂资料:https://share.weiyun.com/5fAdN5m
★小麦苗课堂试听资料:https://share.weiyun.com/5HnQEuL
★小麦苗出版的相关书籍:https://share.weiyun.com/5sQBQpY
★小麦苗博客文章:https://share.weiyun.com/5ufi4Dx
★数据库系列(Oracle、MySQL、NoSQL):https://share.weiyun.com/5n1u8gv
★公开课录像文件:https://share.weiyun.com/5yd7ukG
★其它常用软件分享:https://share.weiyun.com/53BlaHX
★其它IT资料(OS、网络、存储等):https://share.weiyun.com/5Mn6ESi
★Python资料:https://share.weiyun.com/5iuQ2Fn
★已安装配置好的虚拟机:https://share.weiyun.com/5E8pxvT
★小麦苗腾讯课堂:https://lhr.ke.qq.com/
★小麦苗博客:http://blog.itpub.net/26736162/
'''

有趣的事,Python永远不会缺席

欢迎关注小婷儿的博客

  文章内容来源于小婷儿的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解!!!

  如需转发,请注明出处:小婷儿的博客python    https://blog.csdn.net/u010986753

  CSDN https://blog.csdn.net/u010986753

  博客园 https://www.cnblogs.com/xxtalhr/

有问题请在博客下留言或加作者:
  微信:tinghai87605025 联系我加微信群
  QQ :87605025
  QQ交流群:py_data 483766429
  公众号:DB宝

证书说明

  OCP证书说明连接 https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

  OCM证书说明连接 https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA

   小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。重要的事多说几遍。。。。。。

你可能感兴趣的:(基本概念)