古老的spc也可以用机器学习(三)-支持向量机算法
大家都很清楚SPC的中文叫統計過程控制,它的作用是發現過程數據中的異常行為,SPC有8種以上的判異規則,每一中判異規則對應可能的異常原因,非常實用。
現在大數據、機器學習應用越來越廣泛,而機器學習算法的一個常見應用就算異常檢測,本文介紹的是一種叫做二分類支持向量機算法進行異常檢測。
支持向量機簡單描述一下,不做過多解釋。
“?支持向量機(support vector machines, SVM)是一種二分類模型,它的基本模型是定義在特征空間上的間隔最大的線性分類器,間隔最大使它有別于感知機;SVM還包括核技巧,這使它成為實質上的非線性分類器。SVM的的學習策略就是間隔最大化,可形式化為一個求解凸二次規劃的問題,也等價于正則化的合頁損失函數的最小化問題。SVM的的學習算法就是求解凸二次規劃的最優化算法。”
二分類支持向量機Python實現算法如下:
簡單一點,我們用一維數據來演示(檢測數據很多是一維的)。
1)導入機器學習模塊(這里我們使用了scikit-learn的svm中的OneClassSVM模塊)
from sklearn.svm import OneClassSVMimport pandas as pd2)算法實現
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'] = 1else: 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系統實現:
接下來看看我們在SPC系統上的實現。我們把支持向量機得到的異常點,直接顯示在SPC控制圖上,請看下圖。也可以選擇不顯示(看起來異常判定結果不太理想)。
這樣我們就可以在SPC控制圖上顯示其他異常判定算法的異常判定結果了。現在知道機器學習怎么和SPC結合在一起如何使用了吧。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的古老的spc也可以用机器学习(三)-支持向量机算法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: AUTOSAR从入门到精通100讲(十四
- 下一篇: 汽车电子专业知识篇(九)-charge
