精华内容
下载资源
问答
  • XGBoost算法预测时序数据的原理和GBDT算法原理类似,这里大致再提一下。用多个回归将来拟合训练集,拟合好的模型需要做到多个回归的结果之和训练集的结果一致,将该模型保存起来,之后只需要将要预测的数据再过...

    XGBoost

    a基本原理:

    XGBoost算法预测时序数据的原理和GBDT算法原理类似,这里大致再提一下。用多个回归树将来拟合训练集,拟合好的模型需要做到多个回归树的结果之和训练集的结果一致,将该模型保存起来,之后只需要将要预测的数据再过一遍模型,即可得到预测数据结果。

     

    b算法原理:

    XGBoost(由陈天奇大佬开发,可以理解为X (Extreme) GBoosted)算法可以看作是GBDT算法的plus版本,本质上还是一个GBDT。

    XGBoost与GBDT的区别主要还是目标函数的不同,目标函数只依赖于每个数据点在误差函数上的一阶导数和二阶导数。由于之前的目标函数求最优解的过程中只对平方函数有便利性,对于其他的平方损失函数处理会比较复杂。现在通过二阶泰勒展开式的变换,这样就可以比较方便的求解其他损失函数了。

     

    c方法优缺点:

    可以看成对于GBDT算法有很多的优点,缺点则是和它的改进算法Light GBM来讲的,它的缺点也就是Light GBM的优点,所以这里就先不讨论XGBoost的缺点了,在讲Light GBM的时候会写到。

     

    对于GBDT的优势有:

    1. XGBoost的基分类器不仅可以是CART分类器,还支持线性分类器。

    2. GBDT在优化时只用到一阶导数,而XGBoost可以做到二阶泰勒展开。

    3. XGBoost在样本存在缺失值时,能自动学习分裂方向。

    4. XGBoost不仅可以防止过拟合,还能降低计算的复杂度,效率更高。

    5. XGBoost可以在每次迭代之后,为叶子节点分配学习速率,降低每棵树的权重,减少每 棵树的影响,为后面提供更好的学习空间。

    6. 可以分配多个cpu核心进行模型训练,减少模型训练时间。

    d算法入口:

    Sklearn里面没有集成XGBoost模型,但是网上有一个xgboost模块,需要安装才能使用

    pip install xgboost

     

    # xgboost模型参数
    
    params = {
    
        'booster':, # 用什么方式建树
    
        'objective':,   # 多分类问题
    
        'num_class':,  # 类别数,与multi softmax并用
    
        'gamma':,    # 用于控制是否后剪枝的参数,越大越保守,一般0.1 0.2的样子
    
        'max_depth':,  # 构建树的深度,越大越容易过拟合
    
        'lambda':,  # 控制模型复杂度的权重值的L2 正则化项参数,参数越大,模型越不容易过拟合
    
        'subsample':, # 随机采样训练样本
    
        'colsample_bytree':,# 这个参数默认为1,是每个叶子里面h的和至少是多少
    
        'silent':,  # 设置成1 则没有运行信息输入,最好是设置成0
    
        'eta':,  # 如同学习率
    
        'seed':,# random seed
    
        'nthread':,  #CPU线程数
    
        #'eval_metric':
    
    }

    e实例参考:

    # -*- coding: utf-8 -*-
    '''
        建立XGBoost决策树,并预测
    '''
    
    from sklearn.datasets import make_hastie_10_2
    import xgboost
    
    
    def change_y(y):  # 转化label的值,由原来的[-1,1]为[0,1]
        for i in range(len(y)):
            if y[i] == -1.0:
                y[i] = 0.0
        return y
    
    
    # 使用make_hastie_10_2随机生成一组十维的数据X,和对应的输出值y,共12000条
    X, y = make_hastie_10_2(random_state=0)
    y = change_y(y)
    dtrain = xgboost.DMatrix(X[:4000], label=y[:4000])
    dtest = xgboost.DMatrix(X[4000:8000], label=y[4000:8000])
    y_test = y[8000:]
    
    # 配置基本参数
    params = {'max_depth': 4,  # 最大深度
              'booster': 'gbtree',
              'seed': 0,  # random seed
              'silent': 0,  # 设置成1 则没有运行信息输入,最好是设置成0
              'lambda': 10,  # 控制模型复杂度的权重值的L2 正则化项参数,参数越大,模型越不容易过拟合
              'eta': 0.5,  # 如同学习率
              'gamma': 0.1,  # 用于控制是否后剪枝的参数,越大越保守,一般0.1 0.2的样子
              'num_class': 2  # 类别数
              }
    
    # 迭代拟合再预测
    xgb = xgboost.train(params=params, dtrain=dtrain, num_boost_round=100, evals=[(dtrain, 'train'), (dtest, 'eval')])
    ypred = xgb.predict(xgboost.DMatrix(X[8000:], missing=-999.0))
    
    error = 0
    for i in range(ypred.shape[0]):  # 输出测试数据所有的预测和真实值
        print(ypred[i], y_test[i])
    if ypred[i] != y_test[i]:
        	error += 1
    
    print('错误率:{}'.format(error / ypred.shape[0]))

    这次还是以之前GBDT模型的数据为例,运行结果如下


    f参考文献:

    终于有人说清楚了--XGBoost算法 https://www.cnblogs.com/mantch/p/11164221.html

    机器学习算法(15)之Xgboost算法 https://blog.csdn.net/qq_20412595/article/details/82621744

    xgBoost的优缺点 https://blog.csdn.net/smartcat2010/article/details/103219643

    Python机器学习笔记:XgBoost算法 https://www.cnblogs.com/wj-1314/p/9402324.html

     

    展开全文
  • 若出现需要预测数据,只要将数据过一遍决策树,就可以获得预测的数值结果。在下文我会写梯度下讲树的工作原理。 b算法原理: 回归树 GBDT梯度下降树 GBDT的核心就在于,每一棵树学的是之前所有树结论和的...

    梯度下降树GBDT

    a基本原理:

    利用梯度下降(提升)树GBDT算法拟合出最优的决策树,将拟合好的决策树保存下来。若出现需要预测的数据,只要将数据过一遍决策树,就可以获得预测的数值结果。在下文我会写梯度下讲树的工作原理。

    b算法原理:

    回归树

    GBDT梯度下降树

    GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。

    如存在一个真实值为20(真实值在test中并不会给出,这里只是便于理解),第一个树得到的预测值是12,那就目前来看真实值和预测值的差值还是蛮大的,所以这时就需要第二个回归树。

    第二个回归树给出的预测值是8,那么GBDT的算法就可以结束了,如果第二个回归树给出的预测值比8要小,那么还需要建立第三个回归树……最终将每个回归树的结果加起来就是我们预测出来的值。

     

    c方法优缺点:

    优点:

    1. 预测精度高,能处理非线性的数据。

    2. 可以灵活处理各种类型的数据,包括连续值和离散值。

    3. 相对于SVM来说,在相对少的调参时间情况下,预测的准确率比较高。

    4. 使用一些健壮的损失函数,对异常值的鲁棒性非常强。

    缺点:

    1. 高维数据算法复杂度大。

    2. 难以对训练样本进行人工控制。

     

    d算法入口:

    使用sklearn里的GradientBoostingClassifier函数可以较轻松训练好GBDT

    sklearn.ensemble.GradientBoostingClassifier(loss=’deviance’,learning_rate=0.1,n_estimators=100,subsample=1,intit,max_depth=3,*args)

     

    loss 损失函数

    learning_rate 学习率,也被叫作步长。

    n_estimators 弱学习器最大迭代次数。太大容易过拟合,太小容易欠拟合。

     subsample 即我们在原理篇的正则化章节讲到的子采样,取值为(0,1]。如果取值为1,则 全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本 会去做GBDT的决策树拟合。

    init 如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1, 则只有一部分样本会去做GBDT的决策树拟合。

    Max_depth 决策树的最大深度

     

    e实例参考:

    # -*- coding: utf-8 -*-
    '''
        建立GBDT梯度下降决策树,并预测
    '''
    
    from sklearn.datasets import make_hastie_10_2
    from sklearn.ensemble import GradientBoostingClassifier
    
    # 使用make_hastie_10_2随机生成一组十维的数据X,和对应的输出值y,共12000条
    X, y = make_hastie_10_2(random_state=0)
    X_train, X_test = X[:2000], X[2000:]
    y_train, y_test = y[:2000], y[2000:]
    
    # 迭代拟合再预测
    gbdt = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=3, random_state=0)
    gbdt.fit(X_train, y_train)
    pred = gbdt.predict(X_test)
    
    error = 0
    for i in range(pred.shape[0]):  # 输出测试数据所有的预测和真实值
        print(pred[i], y_test[i])
        if pred[i] != y_test[i]:
            error += 1
    
    print('错误率:{}'.format(error / pred.shape[0]))

    输出结果

    f参考文献:

    GBDT(MART) 迭代决策树入门教程 | 简介 https://blog.csdn.net/suranxu007/article/details/49910323

    Regression Tree 回归树 https://zhuanlan.zhihu.com/p/82054400

    GBDT回归树过程详解 https://www.cnblogs.com/zsgyx/p/12640611.html

    GBDT算法的优缺点 https://blog.csdn.net/suv1234/article/details/72588048

    scikit-learn 梯度提升树(GBDT)调参小结https://www.cnblogs.com/pinard/p/6143927.html

    sklearn与GBDT入门案例 https://blog.csdn.net/levy_cui/article/details/72920366

    gbdt算法_GBDT算法-从原理到sklearn应用到总结 https://blog.csdn.net/weixin_39856607/article/details/110659505

     

    展开全文
  • 基本原理同XGBoost、GBDT决策树相同,属于在XGBoost的基础上的再一次的提升。在精度上和GBDT、XGBoost一致或更优的情况下,效率上大幅领先于XGBoost和GBDT。用多个回归树将来拟合训练集,拟合好的模型需要做到多个...

    Light GBM

    a基本原理:

    基本原理同XGBoost、GBDT决策树相同,属于在XGBoost的基础上的再一次的提升。在精度上和GBDT、XGBoost一致或更优的情况下,效率上大幅领先于XGBoost和GBDT。用多个回归树将来拟合训练集,拟合好的模型需要做到多个回归树的结果之和训练集的结果一致,将该模型保存起来,之后只需要将要预测的数据再过一遍模型,即可得到预测数据结果。

    b算法原理:

    对比GBDT和XGBoost来说,不需要通过所有样本计算信息增益了,而且内置特征降维技术,所以更快。

     

    Light GBM会选取梯度较大的样本来计算信息增益,对于梯度小的样本则会选取其中的一部分,对其带来的信息增益进行放大,相当于减少了一部分梯度小的样本损失的影响。

    假设选出梯度较大的样本占比a%,梯度小的样本占比b%,那么将选出来的b%个梯度小的样本的信息增益扩大到1-a/b倍。

     

    Light GBM拥有的特征降维技术可以合并那些冲突小的稀疏特征。如可以将特征矩阵[1,nan,1,nan,1]和特征矩阵[nan,1,nan,1,nan]合并为特征矩阵[1,2,1,2,1]

     

    c方法优缺点:

    Light GBM存在的优点也可以理解成XGBoost和GBDT存在的缺点,主要有以下两点:

     

    1. 占用的内存更低,只保存特征离散化后的值,而这个值一般用8位整型存储就足够了, 内存消耗可以降低为原来的1/8。

    2. LightGBM牺牲了一部分切分的精确性来提高切分的效率,但是对损失的精确度有又有用 放大信息增益的方法来弥补,所以最终的准确率几乎没有变化,但是运行效率大大提升。

     

    d算法入口:

    Sklearn里面没有Light BGM集成模型,但是网上有一个Light BGM模块,需要安装才能使用

    pip install lightbgm

    e实例参考:

    # -*- coding: utf-8 -*-
    '''
        建立Light GBM决策树,并预测
    '''
    
    from sklearn.datasets import make_hastie_10_2
    import lightgbm
    
    
    def change_y1(y):  # 转化label的值,由原来的[-1,1]为[0,1]
        for i in range(len(y)):
            if y[i] == -1.0:
                y[i] = 0.0
        return y
    
    
    def change_y2(y):  # 转化label的值,由原来的[-1,1]为[0,1]
        for i in range(len(y)):
            if y[i] >= 0.5:
                y[i] = 1.0
            else:
                y[i] = 0.0
        return y
    
    
    # 使用make_hastie_10_2随机生成一组十维的数据X,和对应的输出值y,共12000条
    X, y = make_hastie_10_2(random_state=0)
    y = change_y1(y)
    X_train, X_test = X[:4000], X[4000:8000]
    y_train, y_test = y[:4000], y[4000:8000]
    lgb_train = lightgbm.Dataset(X_train, y_train)
    lgb_test = lightgbm.Dataset(X_test, y_test, reference=lgb_train)
    yy = y[8000:]
    
    # 配置基本参数
    params = {
        'task': 'train',
        'booster': 'gbdt',
        'objective': 'binary',
        'learning_rate': 0.5,  # 学习速率
        'feature_fraction': 0.9,  # 建树的特征选择比例
        'bagging_fraction': 0.8,  # 建树的样本采样比例
        'bagging_freq': 5,  # k 意味着每 k 次迭代执行bagging
        'verbose': -1,  # <0 显示致命的, =0 显示错误 (警告), >0 显示信息
        'max_depth': 4,  # 最大深度
    }
    
    # 迭代拟合再预测
    lgb = lightgbm.train(params=params, train_set=lgb_train, num_boost_round=100,
                         valid_sets=lgb_test)
    ypred = lgb.predict(data=X[8000:])
    ypred = change_y2(ypred)
    
    error = 0
    for i in range(ypred.shape[0]):  # 输出测试数据所有的预测和真实值
        print(ypred[i], yy[i])
        if ypred[i] != yy[i]:
            error += 1
    
    print('错误率:{}'.format(error / ypred.shape[0]))

    输出结果如下

    f参考文献:

    无痛看懂LightGBM原文 https://zhuanlan.zhihu.com/p/89360721

    机器学习 集成学习各算法-gbdt,xgboost,lightgbm比较及优缺点特征总结 https://blog.csdn.net/a1272899331/article/details/104714892/?utm_term=lightGbm%E7%9A%84%E4%BC%98%E7%BC%BA%E7%82%B9

    LightGBM——提升机器算法(图解+理论+安装方法+python代码)https://blog.csdn.net/huacha__/article/details/81057150

    LightGBM介绍及参数调优 https://www.cnblogs.com/jiangxinyang/p/9337094.html

    LightGBM官方文档 https://lightgbm.readthedocs.io/en/latest/index.html

     

    展开全文
  • 时序数据异常检测

    千次阅读 2019-07-12 17:22:21
    文章目录AIOPS网上相关资料一、时序数据概念及分析1.1 数据前期处理的重要性1.2.1时序数据周期研究(重点方向)1.3 时序数据的随机过程1.4 白噪声序列1.5 平稳性序列1.7 弱平稳1.7.1 原始序列平稳处理方法1.8 关于多...

    文章目录

    AIOPS网上相关资料

    华为云 AIOps 实践全面解析
    AIOps背景/所应具备技术能力分析
    AIOps探索:基于VAE模型的周期性KPI异常检测方法

    一、时序数据概念及分析

    1.1 数据前期处理的重要性

    数据处理是机器学习的重要环节,据说,机器学习相关问题,算法人员需要花百分之80的时间来对数据进行处理。
    由于不同的业务背景,不同类型的数据,不同的算法,数据如果不处理好,就无法正确的应用计算算法来得到想要的结果。
    ##1.2 时序数据组成
    趋势变动在长时期内按某种规则稳定地呈现出来的持续向上或向下或保持在某一水平。
    季节变动在一个年度内重复出现的周期性波动。它是诸如气候条件、生产条件、节假日或人们的风俗习惯等各种因素影响的结果。
    **循环波动:**是时间序列呈现出得非固定长度的周期性变动。循环波动的周期可能会持续一段时间,但与趋势不同,它不是朝着单一方向的持续变动,而是涨落相同的交替波动。

    1.2.1时序数据周期研究(重点方向)

    **不规则波动(随机变动):**是许多不可控的偶然因素共同作用的结果,致使时间序列产生一种波浪形或震荡式的变动。

    1.3 时序数据的随机过程

    在研究随机过程时人们透过表面的偶然性描述出必然的内在规律并以概率的形式来描述这些规律,从偶然中悟出必然正是这一学科的魅力所在。
    随机变量:简单的随机现象,如某班一天学生出勤人数,是静态的。
    随机过程:随机现象的动态变化过程。
    如某一时期各个时刻的状态。 所谓过程就是事物的发展变化过程,尽管过程的形式各异,但归纳起来不外乎两种:一种是确定性的,一种是随机性的。 所谓确定性过程,就是指事物的发展有必然的变化规律,用数学语言来说,就是事物变化的过程可以用一个(或几个)时间t的确定的函数来描述。可重复性。如自由落体。 所谓随机过程,就是说现象的变化没有确定形式,没有必然的变化规律。用数学语言来说,就是事物变化的过程不能用一个(或几个)时间t的确定的函数来描述。不可重复性。也就是说,如果对事物变化的全过程进行一次观测得到一次观察结果是一个时间t的函数,但对同一事物的变化过程独立地重复进行多次观测所得的结果是不相同的。 如果对于每一特定的t属于T(T是时间集合),X(t)是一个随机变量,则称这一族无穷多个随机变量{X(t),t属于T}是一个随机过程。

    1.4 白噪声序列

    随机变量X(t)(t=1,2,3……),如果是由一个不相关的随机变量的序列构成的,即对于所有s不等于k,随机变量Xs和Xk的协方差为零,则称其为纯随机过程。
    如果一个纯随机过程的期望和方差均为常数,则称之为白噪声过程。白噪声过程的样本实称成为白噪声序列,简称白噪声。
    白噪声序列是一个有限均值、有限方差的独立同分布随机变量序列(随机过程)。之所以称为白噪声,是因为他和白光的特性类似,白光的光谱在各个频率上有相同的强度,白噪声的谱密度在各个频率上的值相同。
    如果白噪声具体是服从均值为0、方差为常数的正态分布,那就是高斯白噪声序列。

    1.5 平稳性序列

    平稳性可以说是时间序列分析的基础。
    平稳的通俗理解就是时间序列的一些行为不随时间改变, 所谓平稳过程就是其统计特性不随时间的平移而变化的过程。
    仅仅通过统计特性不变来判别异常是不靠谱的,即时间序列内含的规律和逻辑,要在被预测的未来时间段内能够延续下去。这样我们才能用历史信息去预测未来信息,类似机器学习中的训练集和测试集同分布。如果时间序列的变化是没有规律的、完全随机的,那么预测模型也就没有用。平稳性的数学表达:如果时间序列在某一常数附近波动且波动范围有限,即有常数均值和常数方差,并且延迟k期的序列变量的自协方差和自相关系数是相等的或者说延迟k期的序列变量之间的影响程度是一样的,则称该序列为平稳序列。简单说就是没有明显趋势且波动范围有限。
    ##1.6 严平稳/强平稳
    通俗来说,就是时间序列的联合分布随着时间变化严格保持不变。
    数学表达:如果对所有的时刻 t, (yt1,yt2,…ytm)的联合分布与(y(t1+k),(yt2+k),…y(tm+k))的联合分布相同,我们称时间序列 {yt} 是严平稳的。也就是时间序列的联合分布在时间的平移变换下保持不变。

    1.7 弱平稳

    数学表达:均值不变,协方差Cov(yt,y(t-k))=γk,γk依赖于k。
    ——即协方差也不随时间改变,而仅与时间差k相关。
    可以根据根据时间序列的折线图等大致观察数据的(弱)平稳性:所有数据点在一个常数水平上下以相同幅度波动。
    弱平稳的线性时间序列具有短期相关性(证明见参考书),即通常只有近期的序列值对现时值得影响比较明显,间隔越远的过去值对现时值得影响越小。至于这个间隔,也就是下面要提到的模型的阶数。

    1.7.1 原始序列平稳处理方法

    1.如果序列波动很大,也就是方差比较大,可以对序列作对数转换以减缓其波动幅度
    2.如果序列存在明显趋势,且呈现近似一条直线的趋势,可以对序列作一阶差分,从而消除趋势性
    3.如果序列存在明显的S期季节性,则可对序列作S阶差分,从而消除季节性

    1.8 关于多时间间隔的处理办法研究(重点研究方向)

    1.8.1 研究背景

    多时间间隔,是时序数据在采集过程中有不同的采集频率,由于客户需要以及采集系统能够做到随时改变单一指标的采集间隔,以及不同之间存在不同的时间间隔,时序数据出现多标准化问题,无法用统一的办法来对其进行解决。

    在处理多时间间隔问题上,目前尚无成熟的解决方案,但是在应用上无法绕开多时间间隔带来的问题,由于无论是有监督还是无监督,都是需要依靠历史数据来对当前时刻点作出判断,历史数据缓存在本地是一个必然的事情,但是由于秒级数据存在量太大的问题,极有可能在指标量非常大的时候会带来内存问题以及性能问题;

    1.8.2 研究方法

    • 论文
    • 网络

    1.8.3 研究进展

    2019年6月20日

    目前规则化的解决方案
    这个解决方案的缺点在于,对于每一个指标,都有一套历史窗口的取值方法

    1. 如果间隔过大,历史值非常少,就取所有值;
    2. 如果间隔过小,历史值非常多,就取前后180个值,
    3. 关键是多少算多,如果一天数据量大于180就算多,如果小于180就算少;
    4. 而且正确率稍高的stl分解办法在这行不通了,而且现在对时序分解办法存在理论不了解;
    5. 其实时序分解是一种非常好的时序处理方法,但是目前还不适用几个小时内的数据处理;

    1.9 时序数据特征提取方法

    tsfresht特征提取库文档

    1.10 多指标检测

    1.10.1 如何判断多指标之间,是谁影响谁?

    格兰杰因果关系检验
    这种方法能够测出来是是谁影响谁

    1.11 时序数据预处理文档

    • 流入算法的数据需要满足什么条件?
    • 无null值
    • 数据格式符合要求
    • 历史数据数量符合要求
    • 数据无缺失值
    • 数据保持时序完整性
    • 数据无重复值
    • 指标聚类也算作预处理的一部分

    二、运用无监督进行异常检测

    2.0 无监督算法基本分类

    参考资料

    2.0.1 统计与概率模型

    主要是对数据的分布做出假设,并找出假设下所定义的“异常”,因此往往会使用极值分析或者假设检验。比如对最简单的一维数据假设高斯分布,然后将距离均值特定范围以外的数据当做异常点。而推广到高维后,可以假设每个维度各自独立,并将各个维度上的异常度相加。如果考虑特征间的相关性,也可以用马氏距离(mahalanobis distance)来衡量数据的异常度[12]。不难看出,这类方法最大的好处就是速度一般比较快,但因为存在比较强的“假设”,效果不一定很好。

    2.0.2 线性模型

    假设数据在低维空间上有嵌入,那么无法、或者在低维空间投射后表现不好的数据可以认为是离群点。举个简单的例子,PCA可以用于做异常检测[10],一种方法就是找到k个特征向量(eigenvector),并计算每个样本再经过这k个特征向量投射后的重建误差(reconstruction error),而正常点的重建误差应该小于异常点。同理,也可以计算每个样本到这k个选特征向量所构成的超空间的加权欧氏距离(特征值越小权重越大)。在相似的思路下,我们也可以直接对协方差矩阵进行分析,并把样本的马氏距离(在考虑特征间关系时样本到分布中心的距离)作为样本的异常度,而这种方法也可以被理解为一种软性(Soft PCA) [6]。同时,另一种经典算法One-class SVM[3]也一般被归类为线性模型。

    2.0.3 基于相似度衡量的模型

    异常点因为和正常点的分布不同,因此相似度较低,由此衍生了一系列算法通过相似度来识别异常点。比如最简单的K近邻就可以做异常检测,一个样本和它第k个近邻的距离就可以被当做是异常值,显然异常点的k近邻距离更大。同理,基于密度分析如LOF [1]、LOCI和LoOP主要是通过局部的数据密度来检测异常。显然,异常点所在空间的数据点少,密度低。相似的是,Isolation Forest[2]通过划分超平面来计算“孤立”一个样本所需的超平面数量(可以想象成在想吃蛋糕上的樱桃所需的最少刀数)。在密度低的空间里(异常点所在空间中),孤例一个样本所需要的划分次数更少。另一种相似的算法ABOD[7]是计算每个样本与所有其他样本对所形成的夹角的方差,异常点因为远离正常点,因此方差变化小。换句话说,大部分异常检测算法都可以被认为是一种估计相似度,无论是通过密度、距离、夹角或是划分超平面。通过聚类也可以被理解为一种相似度度量,比较常见不再赘述。

    2.0.4 集成异常检测与模型融合

    在无监督学习时,提高模型的鲁棒性很重要,因此集成学习就大有用武之地。比如上面提到的Isolation Forest,就是基于构建多棵决策树实现的。最早的集成检测框架feature bagging[9]与分类问题中的随机森林(random forest)很像,先将训练数据随机划分(每次选取所有样本的d/2-d个特征,d代表特征数),得到多个子训练集,再在每个训练集上训练一个独立的模型(默认为LOF)并最终合并所有的模型结果(如通过平均)。值得注意的是,因为没有标签,异常检测往往是通过bagging和feature bagging比较多,而boosting比较少见。boosting情况下的异常检测,一般需要生成伪标签,可参靠[13, 14]。集成异常检测是一个新兴但很有趣的领域,综述文章可以参考[16, 17, 18]。

    2.0.5 特定领域的异常检测

    比如图像异常检测 [21],顺序及流数据异常检测(时间序列异常检测)[22],以及高维空间上的异常检测 [23],比如前文提到的Isolation Forest就很适合高维数据上的异常检测。

    2.0.6 参考文献

    [1] Breunig, M.M., Kriegel, H.P., Ng, R.T. and Sander, J., 2000, May. LOF: identifying density-based local outliers. In ACM SIGMOD Record, pp. 93-104. ACM.
    [2] Liu, F.T., Ting, K.M. and Zhou, Z.H., 2008, December. Isolation forest. In ICDM ‘08, pp. 413-422. IEEE.
    [3] Ma, J. and Perkins, S., 2003, July. Time-series novelty detection using one-class support vector machines. In IJCNN’ 03, pp. 1741-1745. IEEE.
    [4] Micenková, B., McWilliams, B. and Assent, I. 2015. Learning Representations for Outlier
    Detection on a Budget. arXiv Preprint arXiv:1507.08104.
    [5] Goldstein, M. and Dengel, A., 2012. Histogram-based outlier score (hbos): A fast unsupervised anomaly detection algorithm. InKI-2012: Poster and Demo Track, pp.59-63.
    [6] Aggarwal, C.C., 2015. Outlier analysis. InData mining(pp. 237-263). Springer, Cham.
    [7] Kriegel, H.P. and Zimek, A., 2008, August. Angle-based outlier detection in high-dimensional data. InKDD '08, pp. 444-452. ACM.
    [8] Zhao,Y. and Hryniewicki, M.K. 2018. XGBOD: Improving Supervised Outlier Detection
    with Unsupervised Representation Learning. IJCNN. (2018).
    [9] Lazarevic, A. and Kumar, V., 2005, August. Feature bagging for outlier detection. In KDD '05. 2005.
    [10] Shyu, M.L., Chen, S.C., Sarinnapakorn, K. and Chang, L., 2003. A novel anomaly detection scheme based on principal component classifier. MIAMI UNIV CORAL GABLES FL DEPT OF ELECTRICAL AND COMPUTER ENGINEERING.
    [11] Rousseeuw, P.J. and Driessen, K.V., 1999. A fast algorithm for the minimum covariance determinant estimator. Technometrics, 41(3), pp.212-223.
    [12] Hardin, J. and Rocke, D.M., 2004. Outlier detection in the multiple cluster setting using the minimum covariance determinant estimator. Computational Statistics & Data Analysis, 44(4), pp.625-638.
    [13] Rayana, S. and Akoglu, L. 2016. Less is More: Building Selective Anomaly Ensembles. TKDD. 10, 4 (2016), 1–33.
    [14] Rayana, S.,Zhong, W. and Akoglu, L. 2017. Sequential ensemble learning for outlier
    detection: A bias-variance perspective. ICDM. (2017), 1167–1172.
    [15] Chandola, V., Banerjee, A. and Kumar, V., 2009. Anomaly detection: A survey.ACM computing surveys, 41(3), p.15.
    [16] Aggarwal, C.C., 2013. Outlier ensembles: position paper. ACM SIGKDD Explorations Newsletter, 14(2), pp.49-58. [Download PDF]
    [17] Zimek, A., Campello, R.J. and Sander, J., 2014. Ensembles for unsupervised outlier detection: challenges and research questions a position paper. ACM Sigkdd Explorations Newsletter, 15(1), pp.11-22.
    [18] Aggarwal, C.C. and Sathe, S., 2017.Outlier ensembles: an introduction. Springer.
    [19] Ramaswamy, S., Rastogi, R. and Shim, K., 2000, May. Efficient algorithms for mining outliers from large data sets. ACM Sigmod Record, 29(2), pp. 427-438).
    [20] Angiulli, F. and Pizzuti, C., 2002, August. Fast outlier detection in high dimensional spaces. In European Conference on Principles of Data Mining and Knowledge Discovery pp. 15-27.
    [21] Akoglu, L., Tong, H. and Koutra, D., 2015. Graph based anomaly detection and description: a survey.Data Mining and Knowledge Discovery, 29(3), pp.626-688.
    [22] Gupta, M., Gao, J., Aggarwal, C.C. and Han, J., 2014. Outlier detection for temporal data: A survey.IEEE Transactions on Knowledge and Data Engineering, 26(9), pp.2250-2267.
    [23] Zimek, A., Schubert, E. and Kriegel, H.P., 2012. A survey on unsupervised outlier detection in high‐dimensional numerical data.Statistical Analysis and Data Mining: The ASA Data Science Journal, 5(5), pp.363-387.

    2.1 3σ准则

    2.1.1 基本原理

    3σ准则又称为拉依达准则,它是先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除。且3σ适用于有较多组数据的时候。
    这种判别处理原理及方法仅局限于对正态或近似正态分布的样本数据处理,它是以测量次数充分大为前提的,当测量次数较少的情形用准则剔除粗大误差是不够可靠的。因此,在测量次数较少的情况下,最好不要选用准则,而用其他准则。
    在正态分布中σ代表标准差,μ代表均值。x=μ即为图像的对称轴
    3σ原则为
    数值分布在(μ-σ,μ+σ)中的概率为0.6827
    数值分布在(μ-2σ,μ+2σ)中的概率为0.9545
    数值分布在(μ-3σ,μ+3σ)中的概率为0.9973
    可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%.

    ###2.1.2 优缺点

    2.1.2.1优点

    1. 计算速度非常快;
      ####2.1.2.2 缺点
    2. 效果可提升空间小;
    3. 计算正确率一般,百分之30左右(已经测过的)
    4. 无法应用到多维指标
      ##2.2 箱型图法

    2.2.1 基本原理

    箱线图算法不需要数据服从特定分布,比如数据分布不符合高斯分布时可以使用该方法。该方法需要先计算第一四分位数Q1(25%)和第三四分位数Q3(75%)。令IQR=Q3-Q1,然后算出异常值边界点Q3+λIQR和Q1- λIQR,通常λ取1.5(类似于正态分布中的image,如下图4所示:
    [外链图片转存失败(img-EPckB9Dr-1562923256468)(./1561460688230.png)]

    2.2.2 优缺点

    ####2.2.2.1 优点

    • 不需要数据服从任何分布
    • 不需要数据具有稳定间隔
    • 不需要数据时间上保持连续
    • 计算速度快

    2.2.2.2 缺点

    • 在异常表现上可能存在问题,目前还未证实

    依赖

    四分数的计算需要numpy第三方库
    ##2.3 LOF
    csdn相关文章
    [外链图片转存失败(img-tJGf9TwJ-1562923256470)(./1560835717842.png)]
    下面介绍LOF算法的相关定义:

    1) d(p,o)d(p,o):两点p和o之间的距离;

    2) k-distance:第k距离

    对于点p的第k距离dk§dk§定义如下:
        dk§=d(p,o)dk§=d(p,o),并且满足:
          a) 在集合中至少有不包括p在内的kk个点o,∈C{x≠p}o,∈C{x≠p}, 满足d(p,o,)≤d(p,o)d(p,o,)≤d(p,o) ;
          b) 在集合中最多有不包括p在内的k−1k−1个点o,∈C{x≠p}o,∈C{x≠p},满足d(p,o,)<d(p,o)d(p,o,)<d(p,o) ;
        p的第k距离,也就是距离p第k远的点的距离,不包括p,如图3。
    [外链图片转存失败(img-1ZdyN6rs-1562923256470)(./1560835816750.png)]

    3) k-distance neighborhood of p:第k距离邻域

    点p的第k距离邻域Nk§,就是p的第k距离即以内的所有点,包括第k距离。
        因此p的第k邻域点的个数 |Nk§|≥k|Nk§|≥k。

    4) reach-distance:可达距离

    点o到点p的第k可达距离定义为:
    reach−distancek(p,o)=max{k−distance(o),d(p,o)}reach−distancek(p,o)=max{k−distance(o),d(p,o)}
        也就是,点o到点p的第k可达距离,至少是o的第k距离,或者为o、p间的真实距离。
        这也意味着,离点o最近的k个点,o到它们的可达距离被认为相等,且都等于dk(o)。
        如图4,o1o1到p的第5可达距离为d(p,o1)d(p,o1),o2o2到p的第5可达距离为d5(o2)。
    [外链图片转存失败(img-iJ6vWeKQ-1562923256471)(./1560835962865.png)]

    5) local reachability density:局部可达密度

    点p的局部可达密度表示为:
        
    lr ⁡ d k ( p ) = 1 / ( ∑ o ∈ N k ( p ) r e a c h − dist ⁡ k ( p , o ) ∣ N k ( p ) ∣ ) \operatorname{lr} d_{k}(p)=1 /\left(\frac{\sum_{o \in N_{k}(p)} r e a c h-\operatorname{dist}_{k}(p, o)}{\left|N_{k}(p)\right|}\right) lrdk(p)=1/(Nk(p)oNk(p)reachdistk(p,o))

    表示点p的第k邻域内点到p的平均可达距离的倒数。
        注意,是p的邻域点Nk§Nk§到p的可达距离,不是p到Nk§Nk§的可达距离,一定要弄清楚关系。并且,如果有重复点,那么分母的可达距离之和有可能为0,则会导致lrd变为无限大,下面还会继续提到这一点。
        这个值的含义可以这样理解,首先这代表一个密度,密度越高,我们认为越可能属于同一簇,密度越低,越可能是离群点。如果p和周围邻域点是同一簇,那么可达距离越可能为较小的dk(o)dk(o),导致可达距离之和较小,密度值较高;如果p和周围邻居点较远,那么可达距离可能都会取较大值d(p,o),导致密度较小,越可能是离群点。

    6) local outlier factor:局部离群因子

    点p的局部离群因子表示为:
         L O F k ( p ) = ∑ o ∈ N k ( p ) l r d k ( o ) l r d k ( p ) ∣ N k ( p ) ∣ = ∑ o ∈ N k ( p ) lr ⁡ d k ( o ) ∣ N k ( p ) ∣ / lr ⁡ d k ( p ) L O F_{k}(p)=\frac{\sum_{o \in N_{k}(p)} \frac{l r d_{k}(o)}{l r d_{k}(p)}}{\left|N_{k}(p)\right|}=\frac{\sum_{o \in N_{k}(p)} \operatorname{lr} d_{k}(o)}{\left|N_{k}(p)\right|} / \operatorname{lr} d_{k}(p) LOFk(p)=Nk(p)oNk(p)lrdk(p)lrdk(o)=Nk(p)oNk(p)lrdk(o)/lrdk(p)
    表示点p的邻域点Nk§的局部可达密度与点p的局部可达密度之比的平均数。
        如果这个比值越接近1,说明p的其邻域点密度差不多,p可能和邻域同属一簇;如果这个比值越小于1,说明p的密度高于其邻域点密度,p为密集点;如果这个比值越大于1,说明p的密度小于其邻域点密度,p越可能是异常点。

    优缺点

    缺点

    1. 所需要的起始数据量较大;
    2. 检测效果不佳;
    3. 参数难以调整和固定;

    优点

    1. 该算法可以应用到多维指标
    2. 该算法异常检测效果再单指标上表现一般,但是在多维指标上可能表现良好;

    2.4 孤立森林

    [外链图片转存失败(img-qzQPsVzE-1562923256471)(./1560838962793.png)]
    csdn
    iForest 是刘飞博士(Fei Tony Liu)在莫纳什大学就读期间由陈开明(Kai-Ming Ting)教授和周志华(Zhi-Hua Zhou)教授指导发表的。第一个版本是在2008年ICDM上,获得年度最佳论文,扩充版本发表于TKDD。
    传统的异常检测算法都是通过数据拟合出来一个模型,然后用现有数据测试,然后看看是不是异常点。但是孤立森林却不是这样,而是通过一个简单的超平面划分数据集,来检测异常点的存在。
    其思想大致是:用一个随机超平面来分割数据空间,切一次可以生成两个子空间,然后继续用一个随机超平面来切割每个子空间,循环下去,直到每个子空间只有一个数据点为止。
    如图所示:
    [外链图片转存失败(img-qyfzUPLS-1562923256472)(./1560914699097.png)]

    孤立森林核心算法

    孤立森林是如何创造出来的,和以前的方法有什么不同;以前的异常检测方法,比如统计方法,以分类为基础的方法,以聚类为基础的方法,但是他们有两方面的缺点:⑴训练出来的异常检测器对正常数据拟合的特别好,但是对出现次数比较少的数据拟合的就不是很好,预测出来的异常很多都是假的,⑵ 另外大多数已经存在的方法因为计算复杂度太高受限于低纬度数据,无法对对高纬度数据进行有效检测。
    孤立森林利用过去方法存在的问题以及抓住异常点的特有特征——出现次数少而且和正常数据很不一样,利用这两点,提出了孤立森林的方法。
    孤立森林这种方法,基本的思想非常简单,就是不断的分割数据集,当整棵孤立树分割的高度超过限制高度的时候就停止分割。
    孤立树构造过程伪代码如图所示:
    [外链图片转存失败(img-QmCpnK7i-1562923256473)(./1560914715536.png)]

    但是,用这种方法,如果你不对它进行限制的话,如果原始数据有数十万个数据点,那么分割将会是一件非常麻烦的事情,而且对于数据密集的区域,不断进行迭代分割意义也并不是很大。
    所以,在伪代码中,对树的高度是有一定限制的。
    那么利用原始数据,最终得到一棵树,如何能够判断数据点是正常的还是不正常的,其实,我们在图一中就可以看到,对于 需要很多次才能够孤立出来,但是对于仅仅需要几次就能够孤立出来了,如下图所示,二者平均路径长度是不一样的。
    异常点往往很容易就能够孤立出来,但是正常点由于数据量比较大,需要好多次才能够孤立出来。
    那么,是不是根据这种孤立的次数就能够判断一个点是不是异常点了?
    实际上,对于孤立森林来说,一个数据集不仅仅构造一棵孤立树,而是很多棵孤立树,要不然也不会叫做孤立森林了。
    上面我们已经给出构造孤立树的过程,那么现在是如何构造孤立森林了,如图所示,我们能够看到构造孤立森林的伪代码:
    [外链图片转存失败(img-1cFUfYZ0-1562923256474)(./1560914730926.png)]

    那么这个切割出来又是如何进行异常点检测的?
    虽然树和森林都构造出来了,但是结果是如何得到的,实际上孤立森林算是集成方法的一种,但是对于单个的孤立树来说,如何判断一个样本是不是异常值,我们需要根据该样本被划分的难易,也就是说,该样本在孤立树中的深度如何,查询某个样本的树深度,其伪代码如图所示:
    [外链图片转存失败(img-ZDF8kkvL-1562923256475)(./1560914754043.png)]

    孤立森林应用场景
    通过对孤立森林的思想以及算法原理的了解,我们知道,孤立森林对基于密度的样本可以很好的展现它优良的特性,但是在异常检测领域,并不是所有的样本都是以向量的形式呈现,在工业界,有很多场景下产生的数据都是以时间为基准,不断的产生数据,对于这种时序数据,孤立森林处理起来比较困难,也就是说,孤立森林的应用领域具有一定的局限性。
    孤立森林优劣势分析
    孤立森林算法有着线性时间复杂度以及较低的内存需求,在大量非相关属性的高纬问题上表现很好,而且它的训练集不需要包含任何异常。
    对于其时间复杂度,我们很容易理解,为什么孤立森林具有很低的时间复杂度,能够达到线性,原因就在于,孤立森林每次对样本集进行切分,都只是随机选取一个特征,然后选取该特征的一个值进行切分,这样把整个样本集切分完,实际上,其时间复杂度,也就相当于其切分的次数;往往为了不让切割之后的图形过于复杂,在使用孤立森林之前,会预先设置孤立森林的树的深度,这样以至于,其切分次数计算如下;
    n——树的深度;
    我们可以看到孤立森林的深度如果设置为n的话,切割完成需要大概次,也就是说,如果按照操作次数,其实这个时间复杂度是不会到达线性的,但是为什么原作者告诉我们,孤立森林的时间复杂度会成为线性的了,这是因为,在构造孤立森林的过程中,还用到了剪枝策略,也就是说并不是对每一个子样本都需要切割,因为并不是每个子样本领域都有多个样本点,对于密度比较低的子样本,如果其样本个数不超过一个,就不用再进行切割了,所以这个剪枝方法大大减少了迭代执行的次数。
    孤立森林还有一个缺点就是无法对多属性进行有效的划分,一般来说,孤立森林表现最好的就是在二维平面上的划分。

    优缺点

    缺点

    1. 所需要的起始数据量较大;
    2. 检测效果不佳;
    3. 参数难以调整和固定;

    优点

    1. 可以应用到多维指标;
    2. 在多维指标上表现良好;

    2.5 密度聚类DBSCAN

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集。下面我们就对DBSCAN算法的原理做一个总结。

    基本原理

    DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。
    通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。

    密度定义

    在上一节我们定性描述了密度聚类的基本思想,本节我们就看看DBSCAN是如何描述密度聚类的。DBSCAN是基于一组邻域来描述样本集的紧密程度的,参数(ϵ, MinPts)用来描述邻域的样本分布紧密程度。其中,ϵ描述了某一样本的邻域距离阈值,MinPts描述了某一样本的距离为ϵ的邻域中样本个数的阈值。

    假设我的样本集是D=(x1,x2,…,xm),则DBSCAN具体的密度描述定义如下:

    1) ϵ-邻域:对于xj∈D,其ϵ-邻域包含样本集D中与xj的距离不大于ϵ的子样本集,即Nϵ(xj)={xi∈D|distance(xi,xj)≤ϵ}, 这个子样本集的个数记为|Nϵ(xj)|

    2) 核心对象:对于任一样本xj∈D,如果其ϵ-邻域对应的Nϵ(xj)至少包含MinPts个样本,即如果|Nϵ(xj)|≥MinPts,则xj是核心对象。

    3)密度直达:如果xi位于xj的ϵ-邻域中,且xj是核心对象,则称xi由xj密度直达。注意反之不一定成立,即此时不能说xj由xi密度直达, 除非且xi也是核心对象。

    4)密度可达:对于xi和xj,如果存在样本样本序列p1,p2,…,pT,满足p1=xi,pT=xj, 且pt+1由pt密度直达,则称xj由xi密度可达。也就是说,密度可达满足传递性。此时序列中的传递样本p1,p2,…,pT−1均为核心对象,因为只有核心对象才能使其他样本密度直达。注意密度可达也不满足对称性,这个可以由密度直达的不对称性得出。

    5)密度相连:对于xi和xj,如果存在核心对象样本xk,使xi和xj均由xk密度可达,则称xi和xj密度相连。注意密度相连关系是满足对称性的。

    从下图可以很容易看出理解上述定义,图中MinPts=5,红色的点都是核心对象,因为其ϵ-邻域至少有5个样本。黑色的样本是非核心对象。所有核心对象密度直达的样本在以红色核心对象为中心的超球体内,如果不在超球体内,则不能密度直达。图中用绿色箭头连起来的核心对象组成了密度可达的样本序列。在这些密度可达的样本序列的ϵ-邻域内所有的样本相互都是密度相连的。
        [外链图片转存失败(img-tYhIIDKb-1562923256475)(./1560912435950.png)]

    DBSCAN密度聚类思想

    DBSCAN的聚类定义很简单:由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。

    这个DBSCAN的簇里面可以有一个或者多个核心对象。如果只有一个核心对象,则簇里其他的非核心对象样本都在这个核心对象的ϵ-邻域里;如果有多个核心对象,则簇里的任意一个核心对象的ϵ-邻域中一定有一个其他的核心对象,否则这两个核心对象无法密度可达。这些核心对象的ϵ-邻域里所有的样本的集合组成的一个DBSCAN聚类簇。

    那么怎么才能找到这样的簇样本集合呢?DBSCAN使用的方法很简单,它任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止。

    基本上这就是DBSCAN算法的主要内容了,是不是很简单?但是我们还是有三个问题没有考虑。

    第一个是一些异常样本点或者说少量游离于簇外的样本点,这些点不在任何一个核心对象在周围,在DBSCAN中,我们一般将这些样本点标记为噪音点。

    第二个是距离的度量问题,即如何计算某样本和核心对象样本的距离。在DBSCAN中,一般采用最近邻思想,采用某一种距离度量来衡量样本距离,比如欧式距离。这和KNN分类算法的最近邻思想完全相同。对应少量的样本,寻找最近邻可以直接去计算所有样本的距离,如果样本量较大,则一般采用KD树或者球树来快速的搜索最近邻。如果大家对于最近邻的思想,距离度量,KD树和球树不熟悉,建议参考之前写的另一篇文章K近邻法(KNN)原理小结。

    第三种问题比较特殊,某些样本可能到两个核心对象的距离都小于ϵ,但是这两个核心对象由于不是密度直达,又不属于同一个聚类簇,那么如果界定这个样本的类别呢?一般来说,此时DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为它的类别。也就是说DBSCAN的算法不是完全稳定的算法。

    DBSCAN聚类算法

    下面我们对DBSCAN聚类算法的流程做一个总结。
        输入:样本集D=(x1,x2,…,xm),邻域参数(ϵ,MinPts), 样本距离度量方式
        输出: 簇划分C. 
        1)初始化核心对象集合Ω=∅, 初始化聚类簇数k=0,初始化未访问样本集合Γ = D, 簇划分C = ∅
        2) 对于j=1,2,…m, 按下面的步骤找出所有的核心对象:
          a) 通过距离度量方式,找到样本xj的ϵ-邻域子样本集Nϵ(xj)
          b) 如果子样本集样本个数满足|Nϵ(xj)|≥MinPts, 将样本xj加入核心对象样本集合:Ω=Ω∪{xj}
        3)如果核心对象集合Ω=∅,则算法结束,否则转入步骤4.
        4)在核心对象集合Ω中,随机选择一个核心对象o,初始化当前簇核心对象队列Ωcur={o}, 初始化类别序号k=k+1,初始化当前簇样本集合Ck={o}, 更新未访问样本集合Γ=Γ−{o}
        5)如果当前簇核心对象队列Ωcur=∅,则当前聚类簇Ck生成完毕, 更新簇划分C={C1,C2,…,Ck}, 更新核心对象集合Ω=Ω−Ck, 转入步骤3。
        6)在当前簇核心对象队列Ωcur中取出一个核心对象o′,通过邻域距离阈值ϵ找出所有的ϵ-邻域子样本集Nϵ(o′),令Δ=Nϵ(o′)∩Γ, 更新当前簇样本集合Ck=Ck∪Δ, 更新未访问样本集合Γ=Γ−Δ, 更新Ωcur=Ωcur∪(Δ∩Ω)−o′,转入步骤5.
        输出结果为: 簇划分C={C1,C2,…,Ck}

    DBSCAN小结

    和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数k,当然它最大的优势是可以发现任意形状的聚类簇,而不是像K-Means,一般仅仅使用于凸的样本集聚类。同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。
        那么我们什么时候需要用DBSCAN来聚类呢?一般来说,如果数据集是稠密的,并且数据集不是凸的,那么用DBSCAN会比K-Means聚类效果好很多。如果数据集不是稠密的,则不推荐用DBSCAN来聚类。
        下面对DBSCAN算法的优缺点做一个总结。
        DBSCAN的主要优点有:
        1) 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。
        2) 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
        3) 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。
        DBSCAN的主要缺点有:
        1)如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
        2) 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
        3) 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

    DBSCAN实现

    sklearn-刘建平博客实现

    优缺点

    优点

    1. 唯一值得称赞的优点就是对于非凸数据簇也是可以分离开的;
    2. 相对于k-means聚类肯定是表现非常好的;

    缺点

    1. 所需要的起始数据量较大;
    2. 检测效果不佳;
    3. 参数难以调整和固定;

    2.6 oneclass-svm

    One Class Learning比较经典的算法是One-Class-SVM[参考文献1],这个算法的思路非常简单,就是寻求一个超平面将样本中的正例圈起来,预测是就用这个超平面做决策,在圈内的样本就认为是正样本。由于核函数计算比较耗时,在海量数据的场景用得并不多;
    [外链图片转存失败(img-DGnsnWKb-1562923256475)(./1560913837791.png)]

    优缺点

    缺点

    1. 要求只能使用正常数据点来拟合,然后才能检测是否有异常;
    2. 计算量较大

    优点

    1. 可以在多维指标上进行应用;

    2.7 时序分解pyculiarity

    此方法确实是在时序分解基础之上,更近一步,用中位数代替趋势分量,这样会消除掉假异常点
    S-H-ESD方法-非常详细的讲解[外链图片转存失败(img-Er13msZJ-1562923256476)(./1560906942581.png)]

    grubbs’Test

    一种假设检验的方法,常被用来检验服从正太分布的单变量数据集(univariate data set)Y 中的单个异常值。若有异常值,则其必为数据集中的最大值或最小值。原假设与备择假设如下:
    H0: 数据集中没有异常值
    H1: 数据集中有一个异常值
    Grubbs’ Test检验假设的所用到的检验统计量(test statistic)为
    G = max ⁡ ∣ Y i − Y ‾ ∣ s G=\frac{\max \left|Y_{i}-\overline{Y}\right|}{s} G=smaxYiY
    其中, Y ‾ \overline{Y} Y为均值,s为标准差。原假设 H 0 H_{0} H0被拒绝,当检验统计量满足以下条件
    G &gt; ( N − 1 ) N ( t α / ( 2 N ) , N − 2 ) 2 N − 2 + ( t α / ( 2 N ) , N − 2 ) 2 G&gt;\frac{(N-1)}{\sqrt{N}} \sqrt{\frac{\left(t_{\alpha /(2 N), N-2}\right)^{2}}{N-2+\left(t_{\alpha /(2 N), N-2}\right)^{2}}} G>N (N1)N2+(tα/(2N),N2)2(tα/(2N),N2)2
    其中,N为数据集的样本数,tα/(2N),N−2为显著度(significance level)等于α/(2N)、自由度(degrees of freedom)等于N−2的t分布临界值。实际上,Grubbs’ Test可理解为检验最大值、最小值偏离均值的程度是否为异常。
    grubbs’Test具体资料

    ESD方法

    在现实数据集中,异常值往往是多个而非单个。为了将Grubbs’ Test扩展到k个异常值检测,则需要在数据集中逐步删除与均值偏离最大的值(为最大值或最小值),同步更新对应的t分布临界值,检验原假设是否成立。基于此,Rosner提出了Grubbs’ Test的泛化版ESD(Extreme Studentized Deviate test)。算法流程如下:

    • 计算与均值偏离最远的残差,注意计算均值时的数据序列应是删除上一轮最大残差样本数据后;
      R j = max ⁡ i ∣ Y i − Y ′ ‾ ∣ s , 1 ≤ j ≤ k R_{j}=\frac{\max _{i}\left|Y_{i}-\overline{Y^{\prime}}\right|}{s}, \quad 1 \leq j \leq k Rj=smaxiYiY,1jk
    • 计算临界值(critical value);
      λ j = ( n − j ) ∗ t p , n − j − 1 ( n − j − 1 + t p , n − j − 1 2 ) ( n − j + 1 ) , 1 ≤ j ≤ k \lambda_{j}=\frac{(n-j) * t_{p, n-j-1}}{\sqrt{\left(n-j-1+t_{p, n-j-1}^{2}\right)(n-j+1)}}, \quad 1 \leq j \leq k λj=(nj1+tp,nj12)(nj+1) (nj)tp,nj1,1jk
    • 检验原假设,比较检验统计量与临界值;若Ri>λj,则原假设H0不成立,该样本点为异常点;
    • 重复以上步骤k次至算法结束。

    时间序列分解算法

    STL

    时间序列异常检测

    鉴于时间序列数据具有周期性(seasonal)、趋势性(trend),异常检测时不能作为孤立的样本点处理;故而Twitter的工程师提出了S- ESD (Seasonal ESD)与S-H-ESD (Seasonal Hybrid ESD)算法,将ESD扩展到时间序列数据。

    S- ESD (Seasonal ESD)

    STL将时间序列数据分解为趋势分量、周期分量和余项分量。想当然的解法——将ESD运用于STL分解后的余项分量中,即可得到时间序列上的异常点。但是,我们会发现在余项分量中存在着部分假异常点(spurious anomalies)。如下图所示:
    [外链图片转存失败(img-H8NdKJ6D-1562923256476)(./1560910207670.png)]
    在红色矩形方框中,向下突起点被误报为异常点。为了解决这种假阳性降低准确率的问题,S-ESD算法用中位数(median)替换掉趋势分量;余项计算公式如下:
    R X = X − S X − X ~ R_{X}=X-S_{X}-\tilde{X} RX=XSXX~
    其中,X为原时间序列数据,$
    S_{X}
    $为STL分解后的周期分量,X̃ 为X的中位数。

    S-H-ESD

    由于个别异常值会极大地拉伸均值和方差,从而导致S-ESD未能很好地捕获到部分异常点,召回率偏低。为了解决这个问题,S-H-ESD采用了更具鲁棒性的中位数与绝对中位差(Median Absolute Deviation, MAD)替换公式(1)中的均值与标准差。MAD的计算公式如下
    M A D = median ⁡ ( ∣ X i − median ⁡ ( X ) ∣ ) M A D=\operatorname{median}\left(\left|X_{i}-\operatorname{median}(X)\right|\right) MAD=median(Ximedian(X))

    实现开源代码

    优缺点

    优点

    1. 这种方法对时序数据起始量要求不高;
    2. 经过数据分解以及算法迭代,效果可以达到期望水平;
    3. 复杂度较高,但是计算成本不高
    4. 召回率、准确率都会良好表现

    缺点

    1. 理论上只能在单指标上进行应用,无法在多维指标上进行应用;
      ##2.8 自编码无监督异常检测
      Autoencoder,中文称作自编码器,是一种无监督式学习模型。本质上它使用了一个神经网络来产生一个高维输入的低维表示。Autoencoder与主成分分析PCA类似,但是Autoencoder在使用非线性激活函数时克服了PCA线性的限制。

    Autoencoder包含两个主要的部分,encoder(编码器)和 decoder(解码器)。Encoder的作用是用来发现给定数据的压缩表示,decoder是用来重建原始输入。在训练时,decoder 强迫 autoencoder 选择最有信息量的特征,最终保存在压缩表示中。最终压缩后的表示就在中间的coder层当中。

    以下图为例,原始数据的维度是10,encoder和decoder分别有两层,中间的coder共有3个节点,也就是说原始数据被降到了只有3维。Decoder根据降维后的数据再重建原始数据,重新得到10维的输出。从Input到Ouptut的这个过程中,autoencoder实际上也起到了降噪的作用。
    [外链图片转存失败(img-8GrsIhBw-1562923256477)(./1561463151170.png)]
    异常检测(anomaly detection)通常分为有监督和无监督两种情形。在无监督的情况下,我们没有异常样本用来学习,而算法的基本上假设是异常点服从不同的分布。根据正常数据训练出来的Autoencoder,能够将正常样本重建还原,但是却无法将异于正常分布的数据点较好地还原,导致还原误差较大。

    如果样本的特征都是数值变量,我们可以用MSE或者MAE作为还原误差。例如上图,如果输入样本为
    X = ( X 1 , X 2 , ⋯ &ThinSpace; , X 10 ) X=\left(X_{1}, X_{2}, \cdots, X_{10}\right) X=(X1,X2,,X10)
    经过自编码重建后的结果:
    X R = ( X 1 R , X 2 R , ⋯ &ThinSpace; , X 10 R ) X^{R}=\left(X_{1}^{R}, X_{2}^{R}, \cdots, X_{10}^{R}\right) XR=(X1R,X2R,,X10R)
    还原误差MSE
    1 10 ∑ i = 1 10 ( X i − X i R ) 2 \frac{1}{10} \sum_{i=1}^{10}\left(X_{i}-X_{i}^{R}\right)^{2} 101i=110(XiXiR)2
    还原误差MAE
    1 10 ∑ i = 1 10 ∣ X i − X i R ∣ \frac{1}{10} \sum_{i=1}^{10}\left|X_{i}-X_{i}^{R}\right| 101i=110XiXiR
    sofa教程
    自编码原理详解

    优缺点

    缺点

    训练数据中不能有异常数据

    ##2.9 主成分分析
    在主成分分析(PCA)这种降维方法中,数据从原来的坐标系转换到新的坐标系,新坐标系的选择是由数据集本身所决定的。第一个新坐标轴的方向选择的是原始数据集中方差最大的方向,第二个新坐标轴的选择是和第一个坐标轴正交并且具有最大方差的方向。该过程一直重复,重复的次数就是原始数据中特征的数目。如此操作下去,将会发现,大部分方差都包含在最前面的几个新坐标轴之中。因此,我们可以忽略余下的坐标轴,也就是对数据进行了降维的处理。

    为了提取到第一个主成分(数据差异性最大)的方向,进而提取到第二个主成分(数据差异性次大)的方向,并且该方向需要和第一个主成分方向正交,那么我们就需要对数据集的协方差矩阵进行特征值的分析,从而获得这些主成分的方向。一旦我们计算出了协方差矩阵的特征向量,我们就可以保留最大的 N 个值。正是这 N 个值反映了 N 个最重要特征的真实信息,可以把原始数据集合映射到 N 维的低维空间。
    [外链图片转存失败(img-H391Ur5X-1562923256478)(./1561463733420.png)]
    离这个偏差最大的点可以认为是异常点

    2.10 Histogram-based Outlier Score (HBOS)

    基本原理

    2.11 FastABOD: Fast Angle-Based Outlier Detection using approximation

    基本原理

    2.12 MCD: Minimum Covariance Determinant

    基本原理

    MinCovDet是基于最小协方差行列式(Minimum Covariance Determinant,简称MCD)的算法,是鲁棒协方差估计。

    2.13 EmpiricalCovariance

    基本原理

    EmpiricalCovariance是基于最大似然协方差估计的算法

    PyOD

    introduce pyod

    2.14 CLOF

    华南理工大学陶晶在他的毕业论文中,提出基于K-means算法和LOF算法的CLOP算法。其实基于密度的聚类算法的引入在离群点检测算法中很常见。下面简单叙述下该算法。
    基于聚类的离群点检测方法的基本思想是:在聚类过程中,将那些不属于任何簇的点作为离群点。然而,基于聚类的离群点检测方法主要目标是聚类,离群点只是聚类时产生的“副产物”。因此传统的基于聚类的离群点离群点检测方法检测精度比较低。
    基于密度的LOF算法,能有效的检测数据集中的局部离群点和全局离群点,检测精度比较高。但是基于密度的LOF方法存在如下缺点,使其应用受到一定的限制。
    LOF方法在检测离群点的过程中,遍历整个数据集以计算每个点的LOF值,使得算法运算速度慢。同时,由于数据正常点的数量一般远远多于离群点的数量,而LOF方法通过比较所有数据点的LOF值判断离群程度,这产生了大量没必要的计算,造成时间成本太高,同时由于中间结果的存储而浪费空间资源。因此,假如能在计算离群因子前,剪枝一部分正常数据点,则可以提高LOF方法的计算效率。
    那么如何进行剪枝呢?考虑到K-means是一种效率很高的聚类的算法,CLOF算法利用了该聚类算法,对数据集进行剪枝,得到“离群点侯选集”,最后对该集合中的所有点执行LOF算法,从而判断是否是离群点。
    综上所述,CLOF算法的第一阶段是调用k均值聚类算法,聚完类后,可以得到k个类的中心(质点),然后求出类中所有点到该质点距离的平均值,这个平均值记为半径R,针对类中所有点,若该点到质点的距离大于等于R,则将其放入离群点候选集中。

    Liu Y , Li Z , Zhou C , et al. “Generative Adversarial Active Learning for Unsupervised Outlier Detection”, arXiv:1809.10816, 2018.

    参考资料

    1. makedown编辑教程
    2. 孤立森林论文1
    3. 孤立森林论文2
    4. STL
    5. STL论文
    6. LOF论文
    7. one-class svm论文
    8. arima论文该方法用于预测,而不是检测,上述几种方法都是用于检测
    9. DBSCAN论文

    AI中台化发展

    AI中台宜信

    展开全文
  • 决策树

    2021-01-19 21:15:44
    决策树 作者:little−xulittle-xulittle−xu 时间:2021/1/182021/1/182021/1/18 基本流程 Conception 一般情况,一棵决策树包含一根根节点,若干个内部节点和若干个叶节点;叶节点对应决策结果,其他每个节点...
  • CCF2020-室内用户运动时序数据分类机器学习和深度学习分类方法机器学习方法数据处理机器学习方法比较SVC决策树随机森林AdaBoost梯度提升树其他方法结果测试集预测深度学习方法(三层好深啊!)大结局 机器学习和深度...
  • 下面显示了四种预测时间序列的方法。 支持向量机(R package e1071。“Chih-Chung Chang and Chih-Jen Lin,LIBSVM:a library for support vector machines,2005.”的实现)。 递归分区(R package rpart。...
  • 本篇我们将总结的算法为Microsoft时序算法的结果预测值,是上一篇文章微软数据挖掘算法:Microsoft 时序算法(5)的一个总结,上一篇我们已经基于微软案例数据库的销售历史信息表,利用Microsoft时序算法对其结果进行了...
  • SSAS决策树算法原理

    2010-05-12 11:54:00
    Microsoft 决策树算法是由 Microsoft SQL Server Analysis Services 提供的分类和回归算法,用于对离散和连续属性进行预测性建模。 对于离散属性,该算法根据数据集中输入列之间的关系进行预测。对于连续属性,该...
  • 1、决策树 首先,决策树是一个有监督的分类模型,其本质是选择一个能带来最大信息增益的特征值进行树的分割,直到到达结束条件或者叶子结点纯度到达一定阈值。按照分割指标和分割方法,决策树的经典模型可以分为ID3...
  • 作者:ChrisCaohttps://zhuanlan.zhihu.com/p/75468124大家好,我是小z今天分享一波机器学习的干货~一. 决策树决策树是一个有监督分类模型,本质是选...
  • 与传统的预测方法(如基于决策树的方法)相比,该方法分类时序数据时,不需要将时序数据离散化为非时序数据。该文详细描述了算法的设计以及在真实的电信数据上的应用。与C4.5方法的实验结果比较,表明了该方法有效地...
  • 1.1. 决策树算法,是机器学习中的一个经典的监督式学习算法,被广泛应用F金融分析、生物学、天文学等多个领域 1.2. 本节首先介绍决策树的ID3、C4.5、 C5. 0、CART 等常用算法,然后讨论决策树的集成学习,包括装袋法...
  • 数据挖掘建模(1)分类与预测

    千次阅读 2018-07-01 20:01:19
    根据挖掘目标, 和数据形式可以建立分类与预测、聚类分析、关联规则、时序模型和偏差检测等模型, 帮助企业提取数据中蕴含的商业价值, 提高企业的竞争力。 分类与预测: 分类模型的实现步骤: 常用的分类与...
  • 时间序列预测11:用电量预测 01 数据分析与建模

    千次阅读 多人点赞 2020-04-09 12:39:36
    通过之前有关LSTM的8遍基础教程和10篇处理时间序列预测任务的教程介绍,使用简单的序列数据示例,已经把LSTM的原理,数据处理流程,模型架构,Keras实现都讲清楚了。从这篇文章开始,将介绍有关时间序列预测和时间...
  • 3.几大步骤(数据分析与探索-观察数据特点以剔除无用特征-基于相关性分析与独立性分析剔除弱关联特征) 其一特征提取与特征组合: 1)箱型图分析 2)点线图分析 3)离线型特征重要性:可用于设计规则,易于模型拟合,...
  • 树预测模型-完整-教程

    千次阅读 2018-05-30 18:23:05
    基于树的学习算法被认为是最好的方法之一,主要用于监测学习方法。基于树的方法支持具有高精度、高稳定性和易用性解释的预测模型。...决策树、随机森林、梯度增加等方法被广泛用于各种数据科学问题。因此,对...
  • 时序预测之一_概述

    千次阅读 2018-03-15 11:42:47
    1. 说明 前一段参加了天池的“盐城汽车上牌量预测“比赛。第一次面对大规模的时序问题,从比赛的过程,到赛后...2. 问题描述 上牌量预测是一个典型的时序问题,且数据简单清晰,以复赛A榜数据为例,它提供了前3年...
  • Microsoft 时序分析

    2017-12-01 16:23:28
    虽然其他 Microsoft 算法(如决策树)也能预测趋势,但是他们需要使用其他新信息列作为输入才能进行预测,而时序模型则不需要。时序模型仅根据用于创建该模型的原始数据集就可以预测趋势。进行预测时您还可以向模型...
  • 作者:ChrisCaohttps://zhuanlan.zhihu.com/p/75468124一. 决策树决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值...
  • 作者:ChrisCaohttps://zhuanlan.zhihu.com/p/75468124一. 决策树决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值...
  • 每年的年底都要进行年度总结与规划,比如要分析预测下一年度的经营情况,以便为下一年业务战略部署与规划提供有力的决策依据。 以“企业季度数据”为例,它提供了从2001年到2012年这12年的季度销售额(Y),下面我们...
  • 【sklearn第十五讲】决策树之回归篇

    千次阅读 2018-06-18 23:04:09
    使用类DecisionTreeRegressor, 决策树可以应用于回归问题。fit方法取输入数组X, y, 这里的y取浮点值而不是分类的整值。 from sklearn import tree X = [[0, 0], [2, 2]] y = [0.5, 2.5] clf = tree.De...
  • 大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 时序算法——结果预算+下期彩票预测篇) 原文:(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 时序算法——...
  • 其中,前3类数据有比较明显的模式,比如图像和图的空间局部性,序列的上下文关系和时序依赖等。而表格数据常见于各种工业界的任务,如广告点击率预测,推荐系统等。在表格数据中,每个特征表示一个属性,如性别...
  • 文章目录1. 时间序列1.1 date_range1.2 truncate过滤1.3 Timestamp,Period,Timedelta1.4 时间转换...股价预测2.1 查看数据2.2 取Close列每周的平均值2.3 Close列每周的平均值绘制折线图2.4 一阶分差,提高平稳性2....
  • 本篇文章同样是继续微软系列挖掘算法总结,前几篇主要是基于状态离散值或连续值进行推测和预测,所用的算法主要是三种:Microsoft决策树分析算法、Microsoft聚类分析算法、Microsoft Naive Bayes 算法,当然后续还...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,681
精华内容 1,072
关键字:

决策树预测时序数据