拡大されたデータセットへの生成された 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')
このデータセットのデータの 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')
故障のすべての組み合わせが表現されます。
データ量を減らしたデータセットの診断特徴デザイナーへのインポート
diagnosticFeatureDesigner
コマンドを使用して診断特徴デザイナーを開きます。pdSub
をアプリにインポートします。
時間領域の特徴の抽出
flow
と pressure
の両方の信号から時間領域信号の特徴を抽出します。各信号について、まず信号を選択します。次に、[特徴デザイナー] タブで [時間領域の特徴]、[信号の特徴] を選択し、すべての特徴を選択します。
周波数領域の特徴の抽出
ポンプ診断用の特徴の解析と選択で説明されているように、流量の周波数スペクトルを計算することで流量信号の周期性が強調表示されます。[スペクトル推定]、[自己回帰モデル] を選択し、flow
と pressure
の両方について表示されるオプションを使用して、周波数スペクトルを推定します。
flow
と pressure
の両方のスペクトルについて、表示されたオプションを使用して、23 ~ 250 Hz の帯域のスペクトルの特徴を計算します。
特徴のランク付け
[特徴のランク付け]、[FeatureTable1] を使用して、特徴をランク付けします。faultCode
には複数の可能な値が含まれるため、アプリの既定値は One-Way ANOVA
ランク付け方法となります。
分類学習器への特徴のエクスポート
分類モデルに学習させるために、特徴セットを分類学習器にエクスポートします。[特徴のランク付け] タブで、[エクスポート]、[特徴を分類学習器にエクスポートします] をクリックします。[上位の特徴の選択] を選択し、「15
」と入力して、上位 15 の特徴を選択します。
分類学習器でのモデルの学習
[エクスポート] をクリックすると、分類学習器は、エクスポートしたデータを使用して新しいセッションを開きます。[セッションの開始] をクリックして、セッションを開始します。
[分類学習器] タブの [すべて]、[すべてを学習] をクリックして、利用可能なすべてのモデルに学習させます。
分類学習器は、すべてのモデルに学習させ、最初は名前によって並べ替えます。[並べ替え] メニューを使用して、Accuracy (Validation)
で並べ替えます。このセッションでは、最もスコアの高いモデルは KNN
であり、精度は約 63% です。結果は変わる場合があります。[混同行列] をクリックして、このモデルの混同行列を表示します。
特徴セットを計算するためのコード生成
小規模なデータセットを使用して特徴を対話的に処理したあと、生成コードを使用して、同じ計算をデータセット全体に適用できます。診断特徴デザイナーで、特徴を計算するための関数を生成します。そのためには、[特徴のランク付け] タブで、[エクスポート]、[特徴の関数の生成] を選択します。"分類学習器" にエクスポートしたものと同じ 15 個の特徴を選択します。
[OK] をクリックすると、エディターに関数が表示されます。
diagnosticFeatures
として、関数をローカル フォルダーに保存します。
データセット全体への関数の適用
pumpData
の完全なアンサンブルに対して diagnosticFeatures
を実行し、240 個のメンバーの特徴セットを取得します。次のコマンドを使用します。
feature240 = diagnosticFeatures(pumpData);
feature240
は 240 行 16 列の table です。table には、状態変数 faultCode
と 15 個の特徴が含まれます。
より大規模な特徴テーブルを使用した、分類学習器でのモデルの学習
今度は feature240
を使用して、再度分類学習器で分類モデルに学習させます。次のコマンドを使用して、新しいセッション ウィンドウを開きます。
classificationLearner
[分類学習器] ウィンドウで、[新規セッション]、[ワークスペースから] をクリックします。[新規セッション] ウィンドウの [データセット]、[データセット変数] で、feature240
を選択します。
24 個のメンバーのデータセットで実行した手順を繰り返します。セッションを開始し、すべてのモデルに学習させます。モデルを Accuracy (Validation)
によって並べ替えます。このセッションでは、最もスコアの高いモデルは Bagged Trees
であり、精度は約 73% です。データ量を減らして計算したモデルよりも約 10% 向上しています。ここでも、結果は変わる場合がありますが、最良の精度の向上が反映されているはずです。
このセッションにおいて、Bagged Trees
と RUSBoosted Trees
の両方で達成された最も高いモデルの精度は約 80% です。ここでも、結果は変わる場合がありますが、最良の精度の向上が反映されているはずです。