Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

拡大されたデータセットへの生成された MATLAB 関数の適用

この例では、診断特徴デザイナーで、小規模の測定データセットを使用して特徴セットを作成し、これらの特徴を計算するためのコードを生成してより大規模な測定データセットに対して実行し、分類学習器でモデルの精度を比較する方法を説明します。

最初に小規模なデータセットを使用すると、特徴抽出の高速化や、より明確な可視化が可能になるといったいくつかの利点があります。その後、コードを生成して、拡大されたメンバー セットに対する特徴計算を自動化することで、特徴のサンプル数を増やして、分類モデルの精度を向上できます。

この例はポンプ診断用の特徴の解析と選択に基づいており、その例からのポンプの故障データを使用して同じ特徴を計算します。この例の、ポンプの故障データを使用した特徴作成の操作の手順および根拠の詳細については、ポンプ診断用の特徴の解析と選択を参照してください。この例では、アプリのレイアウトおよび操作に精通していることを前提としています。アプリの操作の詳細については、予知保全アルゴリズムの設計のための状態インジケーターの特定の 3 部からなるチュートリアルを参照してください。

データの読み込みとデータ量を減らしたデータセットの作成

データセット pumpData. pumpData を読み込みます。これは 240 個のメンバーからなるアンサンブル table で、流量と圧力のシミュレーション測定値が含まれています。pumpData には、3 つの独立した故障の組み合わせを表す categorical の故障コードも含まれています。たとえば、故障コード 0 は、故障のないシステムからのデータを表します。故障コード 111 は、3 つの故障がすべて発生しているシステムからのデータを表します。

load savedPumpData pumpData

元の故障コードのヒストグラムを表示します。ヒストグラムには、各故障コードに関連付けられているアンサンブル メンバーの数が表示されます。

fcCat = pumpData{:,3};
histogram(fcCat)
title('Fault Code Distribution for Full Pump Data Set')
xlabel('Fault Codes')
ylabel('Number of Members')

Figure contains an axes. The axes with title Fault Code Distribution for Full Pump Data Set contains an object of type categoricalhistogram.

このデータセットのデータの 10%、すなわち 24 個のメンバーが含まれるサブセットを作成します。シミュレーション データは多くの場合クラスター化されているため、メンバーを選択する際に使用するランダム化されたインデックスを生成します。この例では、まず rng を使用して、繰り返し可能な乱数のシードを作成します。

rng('default')

ランダム化された 24 個の要素のインデックス ベクトル idx を計算します。インデックスの順番でベクトルを並べ替えます。

pdh = height(pumpData);
nsel = 24;
idx = randi(pdh,nsel,1);
idx = sort(idx);

idx を使用して、pumpData からメンバー行を選択します。

pdSub = pumpData(idx,:);

データ量を減らしたデータセットの故障コードのヒストグラムを表示します。

fcCatSub = pdSub{:,3};
histogram(fcCatSub)
title('Fault Code Distribution for Reduced Pump Data Set')
xlabel('Fault Codes')
ylabel('Number of Members')

Figure contains an axes. The axes with title Fault Code Distribution for Reduced Pump Data Set contains an object of type categoricalhistogram.

故障のすべての組み合わせが表現されます。

データ量を減らしたデータセットの診断特徴デザイナーへのインポート

diagnosticFeatureDesigner コマンドを使用して診断特徴デザイナーを開きます。マルチメディア アンサンブルとして、pdSub をアプリにインポートします。

時間領域の特徴の抽出

流量と圧力の両方の信号から時間領域信号の特徴を抽出します。[特徴デザイナー] タブで [時間領域の特徴]、[信号の特徴] をクリックし、すべての特徴を選択します。

周波数領域の特徴の抽出

ポンプ診断用の特徴の解析と選択で説明されているように、流量の周波数スペクトルを計算することで流量信号の周期性が強調表示されます。[スペクトル推定]、[パワー スペクトル] で、流量と圧力の両方について表示されるオプションを使用して、周波数スペクトルを推定します。

流量と圧力の両方のスペクトルについて、表示されたオプションを使用して、25 ~ 250 Hz の帯域のスペクトルの特徴を計算します。

特徴のランク付け

[特徴のランク付け]、[FeatureTable1] を使用して、特徴をランク付けします。faultCode には複数の可能な値が含まれるため、アプリの既定値は One-Way ANOVA ランク付け方法となります。

分類学習器への特徴のエクスポート

分類モデルに学習させるために、特徴セットを分類学習器にエクスポートします。[特徴のランク付け] タブで、[エクスポート]、[特徴を分類学習器にエクスポートします] をクリックします。One-Way ANOVA メトリクスが 1 より大きいすべての特徴を選択します。この選択には、pressure_ps_spec/Data_Wn2 から上のすべての特徴が含まれます。

分類学習器でのモデルの学習

[エクスポート] をクリックすると、分類学習器で新しいセッションが開きます。5 分割交差検証を受け入れ、[セッションの開始] をクリックします。

[分類学習器] タブの [すべて][学習] をクリックして、利用可能なすべてのモデルに学習させます。

このセッションでは、最もスコアリングの高いモデル Boosted Trees は精度が約 63% です。結果は変わる場合があります。

特徴セットを計算するためのコード生成

小規模なデータセットを使用して特徴を対話的に処理したあと、生成コードを使用して、同じ計算をデータセット全体に適用できます。診断特徴デザイナーで、特徴を計算するための関数を生成します。そのためには、[特徴のランク付け] タブで、[エクスポート]、[特徴の関数の生成] を選択します。分類学習器にエクスポートしたものと同じ 50 個の特徴を選択します。

[OK] をクリックすると、エディターに関数が表示されます。

diagnosticFeatures として、関数をローカル フォルダーに保存します。

データセット全体への関数の適用

pumpData の完全なアンサンブルに対して diagnosticFeatures を実行し、240 個のメンバーの特徴セットを取得します。次のコマンドを使用します。

feature240 = diagnosticFeatures(pumpData);

feature240 は 240 行 51 列の table です。table には、状態変数 faultCode と 50 個の特徴が含まれます。

より大規模な特徴テーブルを使用した、分類学習器でのモデルの学習

今度は feature240 を使用して、再度分類学習器で分類モデルに学習させます。次のコマンドを使用して、新しいセッション ウィンドウを開きます。

classificationLearner

[分類学習器] ウィンドウで、[新規セッション]、[ワークスペースから] をクリックします。[新規セッション] ウィンドウの [データセット]、[データセット変数] で、feature240 を選択します。

24 個のメンバーのデータセットで実行した手順を繰り返します。5 分割交差検証を受け入れてセッションを開始し、すべてのモデルに学習させます。

このセッションにおいて、Bagged TreesRUSBoosted Trees の両方で達成された最も高いモデルの精度は約 80% です。ここでも、結果は変わる場合がありますが、最良の精度の向上が反映されているはずです。