OneClassSVM
説明
外れ値の検出および新規性の検出に 1 クラス サポート ベクター マシン モデル オブジェクト OneClassSVM を使用します。
外れ値検出 (学習データ中の異常を検出) — 関数
ocsvmを使用して、学習データ中の異常を検出します。関数ocsvmは、OneClassSVMオブジェクトに学習させ、学習データの異常インジケーターおよびスコアを返します。新規性の検出 (汚染されていない学習データで新規のデータの異常を検出) — 汚染されていない学習データ (外れ値がないデータ) を
ocsvmに渡してOneClassSVMオブジェクトを作成し、このオブジェクトおよび新規データをオブジェクト関数isanomalyに渡して新規のデータの異常を検出します。関数isanomalyは、新規データの異常インジケーターおよびスコアを返します。
作成
関数 ocsvm を使用して OneClassSVM オブジェクトを作成します。
プロパティ
この プロパティ は読み取り専用です。
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。
この プロパティ は読み取り専用です。
学習データに含まれている異常の比率。範囲 [0,1] の数値スカラーとして指定します。
ContaminationFractionの値が 0 の場合、ocsvmはすべての学習観測値を正常な観測値として扱い、スコアのしきい値 (ScoreThresholdプロパティの値) を学習データの異常スコアの最大値に設定します。ContaminationFractionの値が範囲 (0,1] にある場合、ocsvmは、指定した比率の学習観測値が異常として検出されるように、しきい値 (ScoreThresholdプロパティの値) を決定します。
この プロパティ は読み取り専用です。
カーネル スケール パラメーター。正のスカラーを指定します。
この プロパティ は読み取り専用です。
正則化項の強度。非負のスカラーを指定します。
この プロパティ は読み取り専用です。
この プロパティ は読み取り専用です。
拡張空間の次元数。正の整数を指定します。
この プロパティ は読み取り専用です。
メモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) ソルバーが 1 クラス SVM 問題を解くために最小化する目的関数の値。スカラーを指定します。
この プロパティ は読み取り専用です。
予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は、予測子名が学習データに現れる順序に対応します。
この プロパティ は読み取り専用です。
学習データに含まれている異常の識別に使用される異常スコアのしきい値。範囲 (–Inf,Inf) の数値スカラーとして指定します。
しきい値を超える異常スコアをもつ観測値が異常であると識別されます。
関数
ocsvmは、指定した比率 (ContaminationFractionプロパティ) の学習観測値が異常として検出されるように、しきい値を決定します。
オブジェクト関数
isanomalyは、ScoreThresholdプロパティの値を名前と値の引数ScoreThresholdの既定値として使用します。
この プロパティ は読み取り専用です。
学習データの予測子の標準偏差。数値ベクトルとして指定します。
オブジェクト関数
isanomaly | 1 クラス サポート ベクター マシン (SVM) を使用したデータ中の異常の検出 |
incrementalLearner | Convert one-class SVM model to incremental learner |
gather | Gather properties of Statistics and Machine Learning Toolbox object from GPU |
例
関数 ocsvm を使用して、外れ値 (学習データ中の異常) を検出します。
標本データ セット NYCHousing2015 を読み込みます。
load NYCHousing2015データ セットには、2015 年のニューヨーク市における不動産の売上に関する情報を持つ 10 の変数が含まれます。データ セットの概要を表示します。
summary(NYCHousing2015)
double
Values:
Min 1
Median 3
Max 5
NEIGHBORHOOD: 91446×1 cell array of character vectors
BUILDINGCLASSCATEGORY: 91446×1 cell array of character vectors
RESIDENTIALUNITS: 91446×1 double
Values:
Min 0
Median 1
Max 8759
COMMERCIALUNITS: 91446×1 double
Values:
Min 0
Median 0
Max 612
LANDSQUAREFEET: 91446×1 double
Values:
Min 0
Median 1700
Max 2.9306e+07
GROSSSQUAREFEET: 91446×1 double
Values:
Min 0
Median 1056
Max 8.9422e+06
YEARBUILT: 91446×1 double
Values:
Min 0
Median 1939
Max 2016
SALEPRICE: 91446×1 double
Values:
Min 0
Median 3.3333e+05
Max 4.1111e+09
SALEDATE: 91446×1 datetime
Values:
Min 01-Jan-2015
Median 09-Jul-2015
Max 31-Dec-2015
SALEDATE 列は datetime 配列です。ocsvm ではサポートされていません。datetime 値の月番号および日番号用の列を作成し、SALEDATE 列を削除します。
[~,NYCHousing2015.MM,NYCHousing2015.DD] = ymd(NYCHousing2015.SALEDATE); NYCHousing2015.SALEDATE = [];
NYCHousing2015 用に 1 クラス SVM モデルに学習させます。学習観測値に含まれている異常の比率を 0.1 に指定し、最初の変数 (BOROUGH) をカテゴリカル予測子として指定します。最初の変数は数値配列であるため、この変数をカテゴリカル変数として指定しない限り、ocsvm により連続変数であると仮定されます。また、予測子によってスケールが大きく異なるため、StandardizeData を true に指定して入力データを標準化します。ヒューリスティック手法を使用して適切なカーネル スケール パラメーターが選択されるように、KernelScale を "auto" に設定します。
rng("default") % For reproducibility [Mdl,tf,scores] = ocsvm(NYCHousing2015,ContaminationFraction=0.1, ... CategoricalPredictors=1,StandardizeData=true, ... KernelScale="auto");
Mdl は OneClassSVM オブジェクトです。ocsvm は、学習データ NYCHousing2015 の異常インジケーター (tf) および異常スコア (scores) も返します。
スコア値のヒストグラムをプロットします。指定した比率に対応するスコアのしきい値に垂直線を作成します。
histogram(scores) xline(Mdl.ScoreThreshold,"r-",["Threshold" Mdl.ScoreThreshold])

異なる汚染の比率 (たとえば 0.01) で異常を識別する場合は、新しい 1 クラス SVM モデルに学習させることができます。
rng("default") % For reproducibility [newMdl,newtf,scores] = ocsvm(NYCHousing2015, ... ContaminationFraction=0.01,CategoricalPredictors=1, ... KernelScale="auto");
異なるスコアのしきい値 (たとえば -0.7) で異常を識別する場合は、OneClassSVM オブジェクト、学習データ、および新しいしきい値を関数 isanomaly に渡せます。
[newtf,scores] = isanomaly(Mdl,NYCHousing2015,ScoreThreshold=-0.7);
汚染の比率またはスコアのしきい値を変更すると異常インジケーターのみが変更され、異常スコアは影響を受けないことに注意してください。したがって、ocsvm または isanomaly を使用して異常スコアを再度計算しない場合、既存のスコア値で新しい異常インジケーターを取得できます。
学習データ中の異常の比率を 0.01 に変更します。
newContaminationFraction = 0.01;
関数quantileを使用して、新しいスコアのしきい値を求めます。
newScoreThreshold = quantile(scores,1-newContaminationFraction)
newScoreThreshold = -0.3745
新しい異常インジケーターを取得します。
newtf = scores > newScoreThreshold;
関数 ocsvm を使用して、汚染されていない学習観測値用の OneClassSVM オブジェクトを作成します。次に、オブジェクトおよび新規データをオブジェクト関数 isanomaly に渡して、新規性 (新規データ中の異常) を検出します。
census1994.mat に保存されている 1994 年の国勢調査データを読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データから構成されます。
load census1994census1994 には学習データ セット adultdata およびテスト データ セット adulttest が含まれています。
ocsvm は、欠損値のある観測値は使用しません。データ セットの欠損値を削除すると、メモリ消費が減って学習が高速化します。
adultdata = rmmissing(adultdata); adulttest = rmmissing(adulttest);
adultdata 用に 1 クラス SVM に学習させます。adultdata には外れ値が含まれていないと仮定します。StandardizeData を true に指定して入力データを標準化し、KernelScale を "auto" に設定して、関数でヒューリスティック手法を使用して適切なカーネル スケール パラメーターを選択できるようにします。
rng("default") % For reproducibility [Mdl,~,s] = ocsvm(adultdata,StandardizeData=true,KernelScale="auto");
Mdl は、OneClassSVM オブジェクトです。名前と値の引数 ContaminationFraction を 0 を超える値として指定していない場合、ocsvm はすべての学習観測値を正常な観測値として扱います。この関数によりスコアのしきい値が最大のスコア値に設定されます。しきい値を表示します。
Mdl.ScoreThreshold
ans = 0.0322
学習済みの 1 クラス SVM モデルを使用して、adulttest 内の異常を見つけます。モデルに学習させるときに StandardizeData=true を指定したため、関数 isanomaly は、Mu プロパティと Sigma プロパティに格納されている学習データの予測子の平均と標準偏差をそれぞれ使用して入力データを標準化します。
[tf_test,s_test] = isanomaly(Mdl,adulttest);
関数 isanomaly は、adulttest の異常インジケーター tf_test およびスコア s_test を返します。既定では、isanomaly はしきい値 (Mdl.ScoreThreshold) を超えるスコアをもつ観測値を異常として識別します。
異常スコア s および s_test のヒストグラムを作成します。異常スコアのしきい値に垂直線を作成します。
h1 = histogram(s,NumBins=50,Normalization="probability"); hold on h2 = histogram(s_test,h1.BinEdges,Normalization="probability"); xline(Mdl.ScoreThreshold,"r-",join(["Threshold" Mdl.ScoreThreshold])) h1.Parent.YScale = 'log'; h2.Parent.YScale = 'log'; legend("Training Data","Test Data",Location="north") hold off

テスト データ中にある異常の観測値のインデックスを表示します。
find(tf_test)
ans = 0×1 empty double column vector
テスト データの異常スコア分布は学習データの異常スコア分布と類似しているため、isanomaly は既定のしきい値でテスト データ中にある異常を検出しません。名前と値のペア ScoreThreshold を使用して、異なるしきい値を指定できます。例については、異常スコアのしきい値の指定を参照してください。
詳細
1 クラス SVM (教師なし SVM) は、異常検出に使用されるアルゴリズムです。このアルゴリズムでは、変換された高次元予測子空間で原点からのデータの分離を試みます。ocsvm は、ガウス カーネル近似法を使用して、SVM の主形式に基づいて判定境界を求めます。
Random Kitchen Sink[1]や Fastfood[2]などの "ランダムな特徴量拡張" は、ビッグ データに使用するカーネル分類アルゴリズムのガウス カーネルを計算効率が高い方法で近似する手法です。ランダムな特徴量拡張は、大規模な学習セットが含まれているビッグ データ事例に対する方が現実的ですが、メモリに収まる小規模なデータ セットにも適用できます。
カーネル分類アルゴリズムでは、特徴量を高次元空間にマッピングした後で、データを 2 つのクラスに分離する最適な超平面を求めます。低次元空間で線形不可分な非線形の特徴量は、拡張された高次元空間で可分にできます。超平面分類についてのすべての計算では、ドット積のみを使用します。非線形分類モデルは、ドット積 x1x2' を非線形カーネル関数 に置き換えることにより取得できます。ここで、xi は i 番目の観測値 (行ベクトル)、φ(xi) は xi を高次元空間にマッピングする変換 ("カーネル トリック" と呼ばれます) です。しかし、(n が大きい) 大規模なデータ セットでは、観測値の各ペアについて G(x1,x2) (グラム行列) を評価すると計算コストが高くなります。
ランダムな特徴量拡張の方式では、ドット積がガウス カーネルを近似するようなランダム変換を求めます。つまり、次のようになります。
ここで、T(x) は における x を高次元空間 () にマッピングします。Random Kitchen Sink 方式では、次のランダムな変換を使用します。
ここで、 は から抽出した標本、σ はカーネル スケールです。この方式では O(mp) の計算および格納が必要です。
Fastfood 方式では、ガウス スケーリング行列と組み合わせたアダマール行列を使用して、Z の代わりに別のランダムな基底 V を導入します。このランダムな基底により、計算コストが O(mlogp) に、ストレージが O(m) に削減されます。
関数 ocsvm は、ランダムな特徴量拡張に Fastfood 方式を使用し、線形分類を使用して 1 クラス ガウス カーネル分類モデルに学習させます。
参照
[1] Rahimi, A., and B. Recht. “Random Features for Large-Scale Kernel Machines.” Advances in Neural Information Processing Systems. Vol. 20, 2008, pp. 1177–1184.
[2] Le, Q., T. Sarlós, and A. Smola. “Fastfood — Approximating Kernel Expansions in Loglinear Time.” Proceedings of the 30th International Conference on Machine Learning. Vol. 28, No. 3, 2013, pp. 244–252.
拡張機能
バージョン履歴
R2022b で導入ocsvm を使用して GPU 配列で OneClassSVM オブジェクトを当てはめることができます。GPU で関数を実行できるように、isanomaly オブジェクト関数で GPU 配列の入力引数がサポートされます。incrementalLearner オブジェクト関数は GPU 配列をサポートしていません。
gather 関数を使用して、OneClassSVM モデル オブジェクトのプロパティを GPU から収集することもできます。
関数 isanomaly に対する C/C++ コードを生成できます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)