「One Class SVM」を用いた異常検知の実装方法

 2021.07.21  株式会社システムインテグレータ

「One Class SVM」についてご存知でしょうか。SVMとはサポートベクターマシン(Support Vector Machine)と呼ばれる機械学習モデルの1つです。SVMは教師あり学習で主に分類のタスクに利用されるアルゴリズムですが、異常検知のために教師なし学習のモデルとして生まれたのがOne Class SVMです。 

今回はOne Class SVMと、異常検知システムへの実装、異常検知システムのソリューションについて、詳細に解説します。

 

One Class SVMとは

One Class SVMとは教師ありの学習で主に利用されているアルゴリズムSVMに対して、異常検知に利用するために考えられた、教師なし学習が可能なアルゴリズムです。詳細について順に解説します。 

SVMとは

まず、One Class SVMの元となるSVMについて解説します。SVMとはSupport Vector Machineが正式名称であり、サポートベクターマシンと呼ばれています。 

サポートベクターとは、データを分割するための直線に近いデータ点のことを指しています。この線が決まると、分割線より上か下かで2つのクラスに分類が可能となるのです。

基本的にSVMはデータを2クラスのパターン認識モデルと呼ばれる2つのクラスにモデルを分けて、教師あり学習によって学習を行います。強みとしてはデータの識別と、その分類です。 

SVMは識別精度がよく、最適化するべきパラメータが少ないというのがメリットであり、逆に、学習データが増えると計算量が膨大になることや、基本的に2クラス分類に特化していることがデメリットです。 

SVMには線形と非線形のデータ分類があり、線形は直線による2クラス分類で表すことができるグラフで、非線形は曲線を描くように2クラスの分類で表すことができるグラフです。 

One ClassのSVMとは?

SVMに対してOne Class SVMとはなんでしょうか。SVMではサポートベクターを利用してクラスを2分割していました。しかしOne Class SVMはその名の通り、1つのクラスだけを学習させることが目的となっています。One Class SVMでは2クラスの分類にはならず、1クラスに対して帰属するかどうかで類似しているデータかそうでないかを判定しているのです。 

この時、学習データを二次元データではなく、三次元データとして取り扱うことで、原点と学習データを比較することができます。学習データに近いデータは原点により近くプロットされ、異常なデータは原点に対して近いデータとして区別することが可能です。これによって、One Class SVMはデータの正常や異常を区別しているといえます。 

One Class SVMの異常検知システムへの実装

One Class SVMを異常検知システムに実装するには異常検知の原理を知る必要があります。正常なデータを1クラス学習させ、分類することで、容易に実装することが可能です。

詳細について順に説明します。 

One Class SVMは外れ値を検出する

One Class SVMで異常検知を行うためには、カーネルトリックという手法を利用する必要があります。学習させた1クラスのデータすべてが、原点から最大値の距離を取るようにプロットする必要があります。このことを写像といいます。 

異常検知を行うためにはこのカーネルトリックによるプロットが重要です。外れ値と呼ばれている、正常データと似ていないデータに関しては、空間に対してプロットすると、原点の近くに対してデータがプロットされるようになっています。つまりこの原点近くに集まったデータは異常データとして判断することができ、この性質を利用することによって、One Class SVMで異常検知を行うことを可能にしています。 

外れた値が原点に対して近くなる理由は、学習データが原点から最大の距離を取って配置されることです。1クラスしかないと定義していますが、擬似的には原点と、1クラスという分類をすることができます。1クラスで集まったデータは面を作り、立体的に似ているデータとして扱われるため、結果的に、原点近くのデータは外れ値と呼ばれる「異常」データと見なすことができるのです。 

異常検知システムへの実装方法

異常検知システムとして実装するには、まずは正常状態のデータを集める必要があります。One Class SVMは正常データを1つのクラスとして学習させる必要があるため、正常状態のデータがなければ機能しません。例えば、検査対象の正常品の画像を収集することで、One Class SVMに対してデータを与える仕組みを作ることが重要です。 

また、プログラムの部分はPythonなどのプログラミング言語によって、簡素なコードで実装することが可能です。 

正常データが集まったら、データを学習させましょう。まずは入力空間に対して、データをプロットしていきます。データ入力が終わった段階で、カーネル関数を利用することで、今回の目的の立体的な空間ベクトルに変換することが可能です。 

この時点で、元空間上に孤立した点は原点付近に分布するため、すでにこの時点で外れデータかどうかの見分けがつきます。最後にパラメータを設定することで、One Class SVMとしての機能が定義されます。データに占める外れ値の割合の上限値を設定することで、どこまでが正常でどこからが異常なのかを定義することが可能です。

まとめ

One Class SVMの概要から、異常検知システムへの実装について解説しました。One Class SVMによって、視覚的に異常を検知できるため簡単に異常検知システムを作成できるのが魅力です。 

また、弊社でもディープラーニングを利用した外観検査システム「AISIA-AD」をご提供しています。AISIA-ADは教師あり学習、教師なし学習のいずれにも対応しているため、正常データしか存在しない場合でも異常検知が可能になります。

外観検査にお困りの点があれば、お気軽に弊社までご相談ください。
その他、異常検知に関する資料もご用意してあります。ぜひご覧ください。

 


RELATED POST関連記事


RECENT POST「異常検知」の最新記事


異常検知

異常検知システムの機械学習(Vol.7)

異常検知

製造業で利用できる異常検知はエッジコンピューティング(Vol.6)

異常検知

「教師データなし」で異常検知は可能か?

異常検知

異常検知におけるディープラーニング(深層学習)の活用

「One Class SVM」を用いた異常検知の実装方法

AISIA-AD TOPへ

外観検査AI化 始め方ガイド