• 广东省 广州市 番禺区
  • 亚运大道金海岸二期西区写字楼区418
  • 电话/微信:
  • 189 2426 9949
  • T
    古老的SPC也可以用机器学习(三)-支持向量机算法

    大家都很清楚SPC的中文叫统计过程控制,它的作用是发现过程数据中的异常行为,SPC有8种以上的判异规则,每一中判异规则对应可能的异常原因,非常实用。

    现在大数据、机器学习应用越来越广泛,而机器学习算法的一个常见应用就算异常检测,本文介绍的是一种叫做二分类支持向量机算法进行异常检测。

    支持向量机简单描述一下,不做过多解释。

    “ 支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。”

    二分类支持向量机Python实现算法如下:

    简单一点,我们用一维数据来演示(检测数据很多是一维的)。

    1)导入机器学习模块(这里我们使用了scikit-learn的svm中的OneClassSVM模块)

    	
    from sklearn.svm import OneClassSVM
    import pandas as pd
    
    

    2)算法实现

    	
    y=[470,509,500,511,435,489,483,483,482,483,504,472,464,481,501,581,507,558,569,467,382,464,482,474,482,478,477,536,485,502,489,507,432,507,470,482,485,482,505,470,487,476]
    y = pd.DataFrame(y)
    
    svm = OneClassSVM()
    svm.fit(y)
    y['fcst'] = svm.predict(y)
    
    

    输入一个y,定义分成两类(自动一类正常,一类不正常), 字段fcst记录了预测的分类结果,有两个分类0和1,但我们不知道哪一类才算正常,我们一个合理的假定,分类中多的是正常的,少的是异常的。

    3)异常判定的处理

    	
    label0 = y[y.fcst==1]['fcst'].count()
    label1 = y[y.fcst==-1]['fcst'].count()
    if label0>label1:#正常的多
        y.loc[y['fcst'] == 1, 'isAbnormal'] = 0
        y.loc[y['fcst'] == -1, 'isAbnormal'] = 1
    else:
        y.loc[y['fcst'] == 1, 'isAbnormal'] = 1
        y.loc[y['fcst'] == -1, 'isAbnormal'] = 0
        
    y.columns = ['data','fcst','isAbnormal']
    y['isAbnormal']=y['isAbnormal'].astype(int)
    y = y[['data','isAbnormal']]
    
    

    记录分类为1的数量和分类为0的数量,最终用字段isAbnormal记录是否异常,0为正常,1为异常。

    结果如下:

    SPC支持向量机SVM算法异常判断

    至此,我们已经完成了一种机器学习的异常检测。

    SPC系统实现:

    接下来看看我们在SPC系统上的实现。

    我们把支持向量机得到的异常点,直接显示在SPC控制图上,请看下图。也可以选择不显示(看起来异常判定结果不太理想)。

    SPC支持向量机SVM算法异常判断

    这样我们就可以在SPC控制图上显示其他异常判定算法的异常判定结果了。现在知道机器学习怎么和SPC结合在一起如何使用了吧。

    如果你想了解上面的功能的测试,

    下方链接可以在线体验和上图完成一样的功能。

    http://www.simplespc.cn/demos/single1.php