特徴抽出のユースケース・シナリオ

あなたは、受講者の回答シートまたはフォームのスキャンに使用できる手書きの数字を認識するソフトウェア・アプリケーションを開発しています。特徴抽出手法を使用して、データ・セットのディメンション性を低減し、新しい特徴空間を生成しようとしています。この特徴空間は、元のデータのシグナルを元のデータの一次結合として集中させます。

他のシナリオでは、特徴抽出を使用して、ドキュメントのテーマの抽出、特徴の分類などを実行できます。

削減された特徴は、分類やクラスタリング・アルゴリズムなどの他の機械学習アルゴリズムで使用できます。

このユースケースでは、ニューラル・ネットワーク・アルゴリズムを使用して、変換された空間の手書きの数字を認識し、これを元のデータを使用した精度と対比します。

あなたは、デフォルトの特徴抽出アルゴリズムのNon-Negative Matrix Factorization (NMF)を次の2つの方法で使用しようとしています:

  1. 上位16個の特徴の投影を作成し、それらの機能を使用してニューラル・ネットワーク(NN)モデルを提供する
  2. 様々な属性と上位6個の特徴ベクトル間の相関を使用して、属性選択を手動で実行し、ニューラル・ネットワーク・モデルにそれらの特徴を提供する。

あなたは、8x8イメージ・マトリックス(64の入力属性)に基づいて正しい手書きの数字を予測するために、ニューラル・ネットワーク・モデルを作成しています。

関連コンテンツ

トピック リンク
OML4SQL GitHubの例 特徴抽出 - Non-Negative Matrix Factorization
CREATE_MODEL2プロシージャ CREATE_MODEL2プロシージャ
一般的なモデル設定 DBMS_DATA_MINING — モデル設定
Non-negative Matrix Factorization (NMF)の設定 DBMS_DATA_MINING - アルゴリズムの設定: Non-Negative Matrix Factorization
ニューラル・ネットワークの設定 DBMS_DATA_MINING - アルゴリズムの設定: ニューラル・ネットワーク
データ・ディクショナリ設定 Oracle Machine Learningのデータ・ディクショナリ・ビュー
NMF - モデル・ディテール・ビュー Non-Negative Matrix Factorizationのモデル・ディテール・ビュー
ニューラル・ネットワーク - モデル・ディテール・ビュー ニューラル・ネットワークのモデル・ディテール・ビュー
特徴抽出について 特徴抽出
NMFについて Non-Negative Matrix Factorization
分類について 分類
ニューラル・ネットワークについて ニューラル・ネットワーク

OML4SQLユースケースの探求を開始する前に、次の用意ができていることを確認します。

データのロード

DIGITSという表を作成します。この表は、データ・セットへのアクセスに使用されます。

データベースにデータをロードするには、次のステップを実行します。
  1. システムにDDLスクリプトhttps://objectstorage.us-ashburn-1.oraclecloud.com/n/adwc4pm/b/OML_Data/o/digits.sqlをダウンロードします。
  2. テキスト・エディタでファイルを開き、OML_USER02.DIGITS<your username>.DIGITSに置き換えます。たとえば、OML Notebookアカウントのユーザー名がOML_USERの場合は、OML_USER02.DIGITSOML_USER.DIGITSに置き換えます。
  3. ファイルを保存します。
  4. コードをコピーし、ADBのOML Notebooksを使用してノートブックに入力します。または、Oracle SQL Developerをオンプレミス・データベースまたはDBCSで使用することもできます。
  5. パラグラフを実行します。
データを理解するために、次を実行します。
  • データにアクセスします。
  • データ・セットの様々な属性または列を詳細に調べます。
  • データ品質を(データを探索することで)評価します。

データの調査

数字データ・セットには、64の数値の特徴または列(8x8ピクセル・イメージ)があります。各イメージは手書きの数字です。このデータ・セットでは0から9の数字が使用されます。

データの探索

データにアクセスできたら、データを調べ、データの品質を理解して評価します。

データ品質の評価

これは適切にキュレートされたデータ・セットであるため、ノイズ、欠損値(システムまたはランダム)および外れ値はありません。

次のステップは、データの探索的分析に役立ちます。

  1. 次の文を実行して、DIGITSデータのデータを表示します:
    SELECT * FROM DIGITS;
  2. 表の個別データを表示するには、次の問合せを実行します。
    SELECT DISTINCT * FROM DIGITS;
    個別データの表示
  3. 次の文を実行して、データ・セット内の行のCOUNTを検索します:
    SELECT COUNT(*) from DIGITS;
    COUNT(*)   
         1797 
    ---------------------------
  4. 列のデータ型を表示するには、次の文を実行します。
    %script
    DESCRIBE DIGITS;
    列のデータ型の表示
  5. このSQL問合せでは、DIGITS表のIMG59列の最大値、最小値、中央値、件数および平均値を選択します。
    中央値は、引数としてパーセンタイル(この場合は50パーセンタイルまたは中央値)をとるPERCENTILE_CONT関数を使用して計算されます。
    SELECT
        MAX(IMG59) as max_value,
        MIN(IMG59) as min_value,
        PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY IMG59) as median_value,
        COUNT(*) as num_values,
        AVG(IMG59) as mean_value
    FROM DIGITS;
    最小値、最大値、平均値の検索
  6. 外れ値を見つける1つの方法は、前述の問合せを使用してデータ・セットの平均偏差と標準偏差を計算し、それらの値を使用して、平均からの特定の数の標準偏差の範囲外の値を特定することです。ここでは、1つの列(IMG59平均偏差と標準偏差)を確認します。
    SELECT *
    FROM DIGITS
    WHERE 1.20 NOT BETWEEN (SELECT AVG(1.20) - 3 * STDDEV(1.20) FROM DIGITS)
    AND (SELECT AVG(1.20) + 3 * STDDEV(1.20) FROM DIGITS);
    平均からの標準偏差のチェックによる外れ値の検索

これで、データの探索ステージが完了します。OMLでは、自動データ準備(ADP)をサポートしています。ADPはモデル設定によって有効になります。ADPを有効にすると、アルゴリズムで必要とされる変換が自動的に実行され、モデルに埋め込まれます。このステップは、モデルの構築ステージで実行します。一般的に使用されるデータの準備方法には、ビニング、正規化、欠損値の処理があります。

モデルの構築

データ・セットを使用してモデルを構築します。DBMS_DATA_MINING.CREATE_MODEL2プロシージャを使用してモデルを構築し、モデル設定を指定します。

アルゴリズムの選択

次のアルゴリズムのいずれかを選択して、特徴抽出の問題を解決できます:

  • 明示的セマンティック分析(ESA) - このアルゴリズムは、このユースケース・データ・セットには適用できません。
  • Non-Negative Matrix Factorization(NMF)
  • 特異値分解(SVG)

Non-Negative Matrix Factorization (NMF)は、高次元のデータを分析するための一般的なツールになりました。これは、スパース(ほとんどがゼロの値を含む欠損値。このデータ・セット内の多くのセルまたはピクセルにはゼロが含まれている可能性がありますが、実際には欠損していません)および負でないデータ・ベクターのセットから意味のある特徴を自動的に抽出するためです。NMFでは、XWHとほぼ同じになるように、低ランク・マトリックス近似を使用してマトリックスXを近似します。サブマトリックスWにはNMF基本列ベクターが含まれ、サブマトリックスHには関連する係数(重み)が含まれています。NMFが自動的にスパースを抽出し、簡単に解釈可能な要因を抽出できるため、評価が高まりました。数字のイメージなどのイメージ認識の場合、基本イメージは様々な手書きの数字のプロトタイプを表し、Hの列はどの特徴がどのイメージに存在するかを示します。Oracle Machine Learningでは、特徴抽出のデフォルト・アルゴリズムとしてNMFが使用されます。

このユースケースでは、データをトレーニングおよびテスト・データとして60対40に分割し、それを使用して、ニューラル・ネットワーク(NN)を使用して別のモデルのNMFモデルと比較します。確認したことがないデータでモデルがどのように実行されるかを確認することを考えているため、データを分割しようとしています。データ・セット全体を元のNMFモデルに配置し、それを分割してからNNに渡した場合、そのデータをテストしようとすると、そのデータはNMFモデルによってすでに確認されています。完全に新しいデータがある場合、特徴の抽出はそのデータに基づいていません。トレーニング・データを使用してモデルを構築し、モデルが構築されたら、そのモデルを使用してテスト・データをスコアリングします。

次のステップでは、選択したアルゴリズムを使用してモデルを構築する方法について説明します。

  1. 60対40に分割してトレーニング・データとテスト・データを作成するには、次の文を実行します。
    %script
    CREATE OR REPLACE VIEW TRAIN_DIGITS AS SELECT * FROM DIGITS SAMPLE (60) SEED (1);
    CREATE OR REPLACE VIEW TEST_DIGITS AS SELECT * FROM DIGITS MINUS SELECT * FROM TRAIN_DIGITS;
    
    View TRAIN_DIGITS created.
    
    ---------------------------
     
    View TEST_DIGITS created.
  2. TRAIN_DIGITSビューのデータを表示するには、次の文を実行します:
    %sql
     
    SELECT * FROM TRAIN_DIGITS;
    TRAIN_DIGITS表の表示
  3. TEST_DIGITSビューのデータを表示するには、次の文を実行します:
    %sql
     
    SELECT * FROM TEST_DIGITS;
    TEST_DIGITS表の表示
  4. TRAIN_DIGITSおよびTEST_DIGITSの行数を検索するには、次の文を実行します:
    %sql
    select 'TRAIN' dataset, count(*)  count from TRAIN_DIGITS
    union
    select 'TEST' dataset, count(*) count from TEST_DIGITS;
    TRAIN_DIGITS表およびTEST_DIGITS表の行数
  5. CREATE_MODEL2プロシージャを使用してモデルを構築します。最初に、モデル設定またはハイパーパラメータを格納する変数を宣言します。次のスクリプトを実行します。
    %script
    BEGIN DBMS_DATA_MINING.DROP_MODEL('NMF_DIGITS');
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
    DECLARE
        v_setlst DBMS_DATA_MINING.SETTING_LIST;
        BEGIN
        v_setlst('PREP_AUTO') := 'ON';
        v_setlst('FEAT_NUM_FEATURES') := '16';
         
        DBMS_DATA_MINING.CREATE_MODEL2(
          MODEL_NAME          =>  'NMF_DIGITS',
          MINING_FUNCTION     => 'FEATURE_EXTRACTION',
          DATA_QUERY          =>  'SELECT * FROM DIGITS',
          CASE_ID_COLUMN_NAME =>  'TARGET'
          SET_LIST            =>  v_setlst);
    END;
    / 
    
    
    PL/SQL procedure successfully completed.
    ---------------------------
    PL/SQL procedure successfully completed.

    スクリプトを詳しく見てみます。

    • v_setlistは、SETTING_LISTを格納する変数です。
    • SETTING_LISTは、モデルのモデル設定またはハイパーパラメータを指定します。
    • DBMS_DATA_MININGは、機械学習に使用されるPL/SQLパッケージです。これらの設定の詳細は、DBMS_DATA_MINING - モデル設定を参照してください。
    • PREP_AUTOは、自動データ準備に使用する設定です。ここでは、自動データ準備を有効にします。設定の値はONです。
    • FEAT_NUM_FEATURESは、特徴抽出モデルを使用して抽出する特徴の数です。このユースケースでは、例示のために16個の特徴が使用されます。

    CREATE_MODEL2プロシージャでは、次のパラメータを使用します。

    • MODEL_NAME: モデルに指定する一意のモデル名。モデル名の形式は、[schema_name.]model_nameです。スキーマを指定しない場合は、ユーザー独自のスキーマが使用されます。ここでのモデル名はNMF_DIGITSです。
    • MINING_FUNCTION: 機械学習機能またはマイニング手法を指定します。このユースケースでは、特徴抽出またはディメンション性低減を実行しているため、マイニング関数としてFEATURE_EXTRACTIONを選択します。
    • DATA_QUERY: モデルを構築するためのトレーニング・データを提供する問合せ。ここでの問合せは、SELECT * FROM DIGITSです。
    • SET_LIST: SETTING_LISTを指定します。
    • CASE_ID_COLUMN_NAME: 構築データの一意のケース識別子列。このユースケースでは、case_idはCUST_IDです。複合キーがある場合は、モデルを作成する前に新しい属性を作成する必要があります。これには、列の値を連結したり、一意の識別子を値の個別の組合せにマップすることが含まれる場合があります。CASE_IDは、再現可能な結果を支援し、個々の行のスコアをスコアリング・データ表などの他のデータと結合します。これは教師なしの手法であり、通常、ターゲットは不明であるため、ここでは必要ありません。そのため、処理から除外するには、case_idとして宣言します。

    ノート:

    指定されていないパラメータまたは設定は、システムによって決定されるか、デフォルト値が使用されます。

評価

診断メトリックを表示し、品質チェックを実行してモデルを評価します。

特徴抽出用の特定のテスト・パラメータ・セットはありません。このユースケースでは、評価は主にNNモデルとNMFモデルとの比較で構成されます。

ディクショナリ・ビューおよびモデル・ビュー

モデルおよびビュー・モデル設定に関する情報を取得するには、データ・ディクショナリ・ビューおよびモデル・ディテール・ビューを問い合せることができます。モデル・ディテール・ビューの特定のビューには、モデルの評価に役立つモデル統計が表示されます。

ディクショナリ・ビューを問い合せます。ビューのデータベース管理者(DBA)およびUSERバージョンも使用可能です。使用可能なディクショナリ・ビューについてさらに学習するには、Oracle Machine Learningのデータ・ディクショナリ・ビューを参照してください。モデル・ディテール・ビューはアルゴリズムに固有です。モデル・ディテール・ビューを表示することで、作成したモデルに関する詳細なインサイトを取得できます。モデル・ディテール・ビューの名前はDM$xxで始まります(xxはビュー接頭辞に相当します)。詳細は、モデル・ディテール・ビューを参照してください。

次のステップを使用すると、様々なディクショナリ・ビューおよびモデル・ディテール・ビューを表示できます。

  1. 次の文を実行して、USER_MINING_MODEL_SETTINGSの設定を表示します。
    %script
     
    SELECT SETTING_NAME, SETTING_VALUE
      FROM USER_MINING_MODEL_SETTINGS
      WHERE MODEL_NAME='NMF_DIGITS'
      ORDER BY SETTING_NAME;
     
    
     
    SETTING_NAME                   SETTING_VALUE                   
    ALGO_NAME                      ALGO_NONNEGATIVE_MATRIX_FACTOR  
    FEAT_NUM_FEATURES              16                              
    NMFS_CONV_TOLERANCE            .05                             
    NMFS_NONNEGATIVE_SCORING       NMFS_NONNEG_SCORING_ENABLE      
    NMFS_NUM_ITERATIONS            50                              
    NMFS_RANDOM_SEED               -1                              
    ODMS_DETAILS                   ODMS_ENABLE                     
    ODMS_MISSING_VALUE_TREATMENT   ODMS_MISSING_VALUE_AUTO         
    ODMS_SAMPLING                  ODMS_SAMPLING_DISABLE           
    PREP_AUTO                      ON
    
    
    10 rows selected.
     
     
    --------------------------- 
    
  2. このユースケースの属性値またはピクセル値のマトリックスは、2つのサブマトリックスに分割されます。因子分解は、WHとしてサブマトリックスのWとHの積で表されるとします。サブマトリックスHには、サブマトリックスWの列ベクターの係数(または重み)が含まれています。Non-Negative Matrix FactorizationのHマトリックスを問い合せるには、DM$VENMFビューを使用します。
    %sql
    SELECT FEATURE_ID, ATTRIBUTE_NAME,
    ATTRIBUTE_VALUE, COEFFICIENT
    FROM DM$VENMF_DIGITS
    ORDER BY FEATURE_ID, ATTRIBUTE_NAME;  
    モデル・ビューDM$VENMFの出力
  3. ここで、元の属性セットと特徴ベクターの関係を理解するには、各NMF特徴ベクターのDM$VENMFビューを使用します。各特徴は、元の属性セットの一次結合です。これらの一次結合の係数は非負数です。モデルの詳細は、各特徴に対して元の各属性に関連付けられた係数を返します。これにより、各特徴ベクターを構築するために属性がどのように影響しているかを把握できます。たとえば、特徴ベクター1の属性および係数を表示するには、問合せでWHERE句およびORDER BY句を使用します。同様に、WHERE句を変更して、特徴ベクター2、3、4、5および6の属性とその係数を確認します。
    %sql
     
    SELECT attribute_name,
           coefficient
      FROM DM$VENMF_DIGITS
    WHERE feature_id = 1
    ORDER BY coefficient DESC ,attribute_name 
    各特徴ベクターの元の各属性に関連付けられた係数の表示
  4. ここで、ニューラル・ネットワーク・アルゴリズムを使用して別のモデルを作成します。抽出された特徴を使用する前に、まず元の特徴セット(TRAIN_DIGITS)でモデルを比較目的で構築します。
    %script
     
    BEGIN DBMS_DATA_MINING.DROP_MODEL('NN_ORIG_DIGITS');
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
    DECLARE
        v_setlst DBMS_DATA_MINING.SETTING_LIST;
         
    BEGIN
        v_setlst('PREP_AUTO') := 'ON';
        v_setlst('ALGO_NAME') := 'ALGO_NEURAL_NETWORK';
        v_setlst('NNET_NODES_PER_LAYER') := '40';
        v_setlst('NNET_ACTIVATIONS') := '''NNET_ACTIVATIONS_TANH''';
        DBMS_DATA_MINING.CREATE_MODEL2(
            MODEL_NAME          => 'NN_ORIG_DIGITS',
            MINING_FUNCTION     => 'CLASSIFICATION',
            DATA_QUERY          => 'SELECT * FROM TRAIN_DIGITS',
            SET_LIST            => v_setlst,
            TARGET_COLUMN_NAME  => 'TARGET'
            );
             
    END;                             
     

    スクリプトを詳しく見てみます。

    • v_setlistは、SETTING_LISTを格納する変数です。
    • SETTING_LISTは、モデルのモデル設定またはハイパーパラメータを指定します。
    • DBMS_DATA_MININGは、機械学習に使用されるPL/SQLパッケージです。これらの設定の詳細は、DBMS_DATA_MINING - モデル設定を参照してください。
    • PREP_AUTOは、自動データ準備に使用する設定です。ここでは、自動データ準備を有効にします。設定の値はONです。
    • ALGO_NAMEは、アルゴリズム名を指定します。アルゴリズムとしてニューラル・ネットワークを使用しているため、ALGO_NEURAL_NETWORKを設定します。
    • NET_NODES_PER_LAYRERは、層ごとのノード数でトポロジを定義します。層ごとに異なる数のノードを保持できます。各層に同じ数のノードを指定するには、単一の値を指定すると、その値が各層に適用されます。層ごとのレイヤーのデフォルト数は、属性の数または50 (属性の数> 50の場合)です。このユースケースでは、定義した値は40で、例示のために使用されます。
    • NNET_ACTIVATIONSは、非表示層の活性化関数を指定します。活性化関数は、ニューラル・ネットワークの出力を決定します。活性化関数は、適用された活性化関数に応じて、前の層からの出力を0から1または-1から1などの値にマップします。単一の活性化関数を指定(その後、非表示層に適用)することも、各層に活性化関数を個別に指定することもできます。ニューラル・ネットワークの設定の詳細は、DBMS_DATA_MINING - アルゴリズム設定: ニューラル・ネットワークを参照してください。層ごとに異なる活性化関数を用意できます。ここでは、NNET_ACTIVATIONS_TANHを使用しています。tanh関数の範囲は-1から1です。デフォルト値は、0から1の範囲のsigmoid関数NNET_ACTIVATIONS_LOG_SIGです。

    CREATE_MODEL2プロシージャでは、次のパラメータを使用します。

    • MODEL_NAME: モデルに指定する一意のモデル名。モデル名の形式は、[schema_name.]model_nameです。スキーマを指定しない場合は、ユーザー独自のスキーマが使用されます。ここでのモデル名はNN_ORIG_DIGITSです。
    • MINING_FUNCTION: 機械学習機能またはマイニング手法を指定します。これは分類の問題であるため、このモデルではCLASSIFICATIONを選択しました。
    • DATA_QUERY: モデルを構築するためのトレーニング・データを提供する問合せ。ここでの問合せは、SELECT * FROM TRAIN_DIGITSです。
    • SET_LIST: SETTING_LISTを指定します。
    • TARGET_COLUMN_NAME: 予測する必要がある列を指定します。モデルのターゲット変数とも呼ばれます。このユースケースでは、TARGET値を予測します。

    ノート:

    指定されていないパラメータまたは設定は、システムによって決定されるか、デフォルト値が使用されます。

モデルの評価と比較

あなたは、NMF特徴抽出アルゴリズムを使用して、データを変換し、予測精度を向上させる目的でNNモデルにデータをフィードしました。次に、これらの分類モデルを評価し、モデルの精度を比較します。

元のデータ・セットを使用してニューラル・ネットワーク分類モデルを構築し、その後、NMFモデルによって変換されたデータ・セットを使用して、別のニューラル・ネットワーク・モデルを構築しました。これらの分類モデルを評価します。これらのメトリックを比較する場合は、予測の精度を調べることによってモデルの品質を検討します。メトリックは、様々な特徴抽出アルゴリズムによって作成されたモデル、設定が異なる同じ抽出アルゴリズムで作成されたモデル、または異なる分類アルゴリズムと設定で作成されたモデル間で比較することもできます。

  1. モデルが収束しているかどうかを確認するには、ニューラル・ネットワーク・モデルのモデル・ビューを表示します。

    %script
      SELECT VIEW_NAME, VIEW_TYPE
      FROM USER_MINING_MODEL_VIEWS
      WHERE MODEL_NAME='NN_ORIG_DIGITS'
      ORDER BY VIEW_NAME;
    
    VIEW_NAME             VIEW_TYPE                                 
    DM$VANN_ORIG_DIGITS   Neural Network Weights                    
    DM$VCNN_ORIG_DIGITS   Scoring Cost Matrix                       
    DM$VGNN_ORIG_DIGITS   Global Name-Value Pairs                   
    DM$VNNN_ORIG_DIGITS   Normalization and Missing Value Handling  
    DM$VSNN_ORIG_DIGITS   Computed Settings                         
    DM$VTNN_ORIG_DIGITS   Classification Targets                    
    DM$VWNN_ORIG_DIGITS   Model Build Alerts                        
     
     
    7 rows selected.
     
     
    ---------------------------
  2. ビューDM$VGNN_ORIG_DIGITSを表示して、グローバルな名前と値のペアをチェックし、モデルが収束しているかどうかを確認します。つまり、結果の改善点がなくなるまでモデルが反復されます。

    %sql
     
    SELECT * from DM$VGNN_ORIG_DIGITS;
    モデルが収束しているかどうかの表示
  3. モデルの品質を確認するには、次のPCT精度コードを実行します:

    %sql
     
    SELECT count(*) NUM_TEST_DIGITS,
           ROUND((SUM(CASE WHEN (TARGET - PRED_TARGET) = 0 THEN 1 ELSE 0 END)
                  / COUNT(*))*100,4) PCT_OVERALL_ACCURACY FROM
           (SELECT TARGET,
                   ROUND(PREDICTION(NN_ORIG_DIGITS USING *), 1) PRED_TARGET
                   FROM TEST_DIGITS)
    モデルの全体的な精度の確認
  4. ターゲットの数字ごとにモデルの品質を確認するには、次のPCT精度コードを実行します:

    %sql
     
    SELECT TARGET,
           count(*) NUM_TEST_DIGITS,
           ROUND((SUM(CASE WHEN (TARGET - PRED_TARGET) = 0 THEN 1 ELSE 0 END)
                  / COUNT(*))*100,4) PCT_ACCURACY FROM
           (SELECT TARGET,
                   ROUND(PREDICTION(NN_ORIG_DIGITS USING *), 1) PRED_TARGET
                   FROM TEST_DIGITS)
            GROUP BY TARGET
            ORDER BY TARGET
    ターゲットの数字ごとの精度のチェック
  5. モデルを評価するには、次のSQL PREDICTION関数を使用して、混同行列を生成します。
    %script
    SELECT "target" AS actual_target_value,
           PREDICTION(NN_ORIG_DIGITS USING *) AS predicted_target_value,
           COUNT(*) AS value
      FROM TEST_DIGITS
     GROUP BY "target", PREDICTION(NN_ORIG_DIGITS USING *)
     ORDER BY 1, 2;
    
    ACTUAL_TARGET_VALUE   PREDICTED_TARGET_VALUE   VALUE   
                        0                        0      81 
                        1                        1      83 
                        1                        8       1 
                        2                        1       1 
                        2                        2      72 
                        3                        2       1 
                        3                        3      68 
                        3                        5       1 
                        4                        4      65 
                        4                        7       1 
                        5                        5      63 
                        5                        6       1 
                        5                        7       1 
                        5                        9       1 
    
    ACTUAL_TARGET_VALUE   PREDICTED_TARGET_VALUE   VALUE   
                        6                        5       2 
                        6                        6      64 
                        7                        7      63 
                        7                        9       1 
                        8                        1       1 
                        8                        2       1 
                        8                        7       1 
                        8                        8      55 
                        8                        9       1 
                        9                        3       1 
                        9                        5       1 
                        9                        8       1 
                        9                        9      81 
    
    
    27 rows selected. 
    
    
    ---------------------------

スコア

NMFモデルのスコアリングによって、新しい特徴空間にデータ投影が生成されます。投影の規模は、レコードが特徴にマップされる強度を示します。

このユースケースでは、ニューラル・ネットワーク・モデルを使用して比較する投影を生成するオプションが2つあります。1つは、NMFの上位16個の特徴にニューラル・ネットワーク・モデルを構築して、数字を予測することです。もう1つは、各特徴ベクターに対して最も高い係数を持つ元の属性を手動で選択して、ニューラル・ネットワーク・モデルを構築することです。

オプション1では、新しいTRAINおよびTESTビューを作成し、NNモデルを構築します。

  1. 上位16個のNMFの特徴を含む新しいTRAINビューを作成します。
    %sql
     
    CREATE OR REPLACE VIEW TRAIN_NMF_FEATURES AS
    SELECT TARGET,
           FEATURE_VALUE(NMF_DIGITS, 1 USING *) PROJ1,
           FEATURE_VALUE(NMF_DIGITS, 2 USING *) PROJ2,
           FEATURE_VALUE(NMF_DIGITS, 3 USING *) PROJ3,
           FEATURE_VALUE(NMF_DIGITS, 4 USING *) PROJ4,
           FEATURE_VALUE(NMF_DIGITS, 5 USING *) PROJ5,
           FEATURE_VALUE(NMF_DIGITS, 6 USING *) PROJ6,
           FEATURE_VALUE(NMF_DIGITS, 7 USING *) PROJ7,
           FEATURE_VALUE(NMF_DIGITS, 8 USING *) PROJ8,
           FEATURE_VALUE(NMF_DIGITS, 9 USING *) PROJ9,
           FEATURE_VALUE(NMF_DIGITS, 10 USING *) PROJ10,
           FEATURE_VALUE(NMF_DIGITS, 11 USING *) PROJ11,
           FEATURE_VALUE(NMF_DIGITS, 12 USING *) PROJ12,
           FEATURE_VALUE(NMF_DIGITS, 13 USING *) PROJ13,
           FEATURE_VALUE(NMF_DIGITS, 14 USING *) PROJ14,
           FEATURE_VALUE(NMF_DIGITS, 15 USING *) PROJ15,
           FEATURE_VALUE(NMF_DIGITS, 16 USING *) PROJ16
    FROM TRAIN_DIGITS;
    
    TRAIN_DIGITS view created
    ---------------------------
  2. 上位16個のNMFの特徴を含む新しいTESTビューを作成します。
    %sql
     
    CREATE OR REPLACE VIEW TEST_NMF_FEATURES AS
    SELECT TARGET,
           FEATURE_VALUE(NMF_DIGITS, 1 USING *) PROJ1,
           FEATURE_VALUE(NMF_DIGITS, 2 USING *) PROJ2,
           FEATURE_VALUE(NMF_DIGITS, 3 USING *) PROJ3,
           FEATURE_VALUE(NMF_DIGITS, 4 USING *) PROJ4,
           FEATURE_VALUE(NMF_DIGITS, 5 USING *) PROJ5,
           FEATURE_VALUE(NMF_DIGITS, 6 USING *) PROJ6,
           FEATURE_VALUE(NMF_DIGITS, 7 USING *) PROJ7,
           FEATURE_VALUE(NMF_DIGITS, 8 USING *) PROJ8,
           FEATURE_VALUE(NMF_DIGITS, 9 USING *) PROJ9,
           FEATURE_VALUE(NMF_DIGITS, 10 USING *) PROJ10,
           FEATURE_VALUE(NMF_DIGITS, 11 USING *) PROJ11,
           FEATURE_VALUE(NMF_DIGITS, 12 USING *) PROJ12,
           FEATURE_VALUE(NMF_DIGITS, 13 USING *) PROJ13,
           FEATURE_VALUE(NMF_DIGITS, 14 USING *) PROJ14,
           FEATURE_VALUE(NMF_DIGITS, 15 USING *) PROJ15,
           FEATURE_VALUE(NMF_DIGITS, 16 USING *) PROJ16
    FROM TEST_DIGITS;
    
    TEST_DIGITS view created
    ---------------------------
  3. 新しいTRAINデータ・セットを使用してニューラル・ネットワーク・モデルを構築します。
    %script
     
    BEGIN DBMS_DATA_MINING.DROP_MODEL('NN_NMF_DIGITS');
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
    DECLARE
        v_setlst DBMS_DATA_MINING.SETTING_LIST;
         
    BEGIN
        v_setlst('PREP_AUTO') := 'ON';
        v_setlst('ALGO_NAME') := 'ALGO_NEURAL_NETWORK';
        v_setlst('NNET_NODES_PER_LAYER') := '40';
        v_setlst('NNET_ACTIVATIONS') := '''NNET_ACTIVATIONS_TANH''';   
        DBMS_DATA_MINING.CREATE_MODEL2(
            MODEL_NAME          => 'NN_NMF_DIGITS',
            MINING_FUNCTION     => 'CLASSIFICATION',
            DATA_QUERY          => 'SELECT * FROM TRAIN_NMF_FEATURES',
            SET_LIST            => v_setlst,
            TARGET_COLUMN_NAME  => 'TARGET'
            );
             
    END;
  4. モデルの収束をチェックします。
    %sql
     
    SELECT * from DM$VGNN_NMF_DIGITS;
    モデルの収束のチェック
  5. PCT精度を使用してモデルの品質を確認します。
    %sql
     
    SELECT count(*) NUM_TEST_DIGITS,
           ROUND((SUM(CASE WHEN (TARGET - PRED_TARGET) = 0 THEN 1 ELSE 0 END)
                  / COUNT(*))*100,4) PCT_OVERALL_ACCURACY FROM
           (SELECT TARGET,
                   ROUND(PREDICTION(NN_NMF_DIGITS USING *), 1) PRED_TARGET
                   FROM TEST_NMF_FEATURES)
    モデルの全体的な精度の観察

    モデルの全体的な精度を元のデータ・セットと比較し、モデルの全体的な精度を上位16個のNMFの特徴と比較します。

    ヒント:

    ここでは、全体的な精度スコアは不十分です。これは例示を目的としています。NMFの特徴の上位32個まで数を増やすことを検討してください。または、別のアルゴリズムを試すこともできます。
  6. ターゲットの数字のPCT精度を確認します。
    %sql
     
    SELECT TARGET,
           count(*) NUM_TEST_DIGITS,
           ROUND((SUM(CASE WHEN (TARGET - PRED_TARGET) = 0 THEN 1 ELSE 0 END)
                  / COUNT(*))*100,4) PCT_ACCURACY FROM
           (SELECT TARGET,
                   ROUND(PREDICTION(NN_NMF_DIGITS USING *), 1) PRED_TARGET
                   FROM TEST_NMF_FEATURES)
            GROUP BY TARGET
            ORDER BY TARGET
    ターゲットの数字の精度の観察
元のデータ・セットを持つモデルは、上位16個のNMFの特徴を持つモデルよりも精度が高いことがわかります。さらに、係数が最も高い各特徴ベクターの属性を手動で選択し、すべてのモデルの品質を比較することによって構築された別のモデルを見てみましょう。

選択した属性のスコア

あなたは、係数に基づいて、抽出された各特徴ベクター内の属性を手動で選択して、別のニューラル・ネットワーク・モデルを作成しようとしています。

つまり、特徴ベクターで最も高い係数を持つすべての固有属性を選択します。前述の項で、元の属性と6個の特徴ベクターを持つ属性係数の関係を確認しました。「ディクショナリ・ビューおよびモデル・ビュー」のステップ3を参照してください。たとえば、特徴1では、IMG51、IMG12、IMG59、IMG4、IMG27、IMG28、IMG44、IMG11、IMG37、IMG61、IMG50の各属性を選択します。6個の特徴ベクターの固有の属性は次のとおりです:
  • 特徴1: IMG51、IMG12、IMG59、IMG4、IMG27、IMG28、IMG44、IMG11、IMG37、IMG61、IMG50
  • 特徴2: IMG32、IMG39、IMG56、IMG0、IMG20、IMG19、
  • 特徴3: IMG18、IMG36、IMG26、IMG21、IMG42
  • 特徴4: IMG60、IMG3、IMG43、IMG34、
  • 特徴5: IMG53、IMG13、IMG58、IMG10
  • 特徴6: IMG29、IMG35、IMG52

次に、新しいTRAINおよびTESTビューを作成し、ニューラル・ネットワーク・モデルを構築します。

  1. 最上位の一意の属性を持つ新しいTRAIN_NMF_ATTRビューを作成します。
    %sql
     
    CREATE OR REPLACE VIEW TRAIN_NMF_ATTR AS
    SELECT TARGET,
           IMG51, IMG12, IMG59, IMG4, IMG27, IMG28, IMG44, IMG11, IMG37, IMG61, IMG50
           IMG32, IMG39, IMG56, IMG0, IMG20, IMG19,
           IMG18, IMG36, IMG26, IMG21, IMG42
           IMG60, IMG3, IMG43, IMG34,
           IMG53, IMG13, IMG58, IMG10,
           IMG29, IMG35, IMG52
    FROM TRAIN_DIGITS;
    
    TRAIN_NMF_ATTR view created
    ---------------------------
  2. 最上位の一意の属性を持つTEST_NMF_FEATURESビューを作成します。
    %sql
     
    CREATE OR REPLACE VIEW TEST_NMF_ATTR AS
    SELECT TARGET,
           IMG51, IMG12, IMG59, IMG4, IMG27, IMG28, IMG44, IMG11, IMG37, IMG61, IMG50
           IMG32, IMG39, IMG56, IMG0, IMG20, IMG19,
           IMG18, IMG36, IMG26, IMG21, IMG42
           IMG60, IMG3, IMG43, IMG34,
           IMG53, IMG13, IMG58, IMG10,
           IMG29, IMG35, IMG52
    FROM TEST_DIGITS;
    
    TEST_NMF_FEATURES view created
    ---------------------------
  3. 新しいTRAIN_NMF_ATTRデータ・セットを使用してニューラル・ネットワーク・モデルを構築します。
    %script
     
    BEGIN DBMS_DATA_MINING.DROP_MODEL('NN_NMF_ATT_DIGITS');
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
    DECLARE
        v_setlst DBMS_DATA_MINING.SETTING_LIST;
         
    BEGIN
        v_setlst('PREP_AUTO') := 'ON';
        v_setlst('ALGO_NAME') := 'ALGO_NEURAL_NETWORK';
        v_setlst('NNET_NODES_PER_LAYER') := '40';
        v_setlst('NNET_ACTIVATIONS') := '''NNET_ACTIVATIONS_TANH''';
        DBMS_DATA_MINING.CREATE_MODEL2(
            MODEL_NAME          => 'NN_NMF_ATT_DIGITS',
            MINING_FUNCTION     => 'CLASSIFICATION',
            DATA_QUERY          => 'SELECT * FROM TRAIN_NMF_ATTR',
            SET_LIST            => v_setlst,
            TARGET_COLUMN_NAME  => 'TARGET'
            );
             
    END;
    PL/SQL procedure successfully completed.
     
    ---------------------------
     
    PL/SQL procedure successfully completed.
  4. モデルの収束をチェックします。
    %sql
     
    SELECT * from DM$VGNN_NMF_ATT_DIGITS;
    モデル収束のチェック
  5. PCT精度を使用してモデルの品質を確認します。
    %sql
     
    SELECT count(*) NUM_TEST_DIGITS,
           ROUND((SUM(CASE WHEN (TARGET - PRED_TARGET) = 0 THEN 1 ELSE 0 END)
                  / COUNT(*))*100,4) PCT_OVERALL_ACCURACY FROM
           (SELECT TARGET,
                   ROUND(PREDICTION(NN_NMF_ATT_DIGITS USING *), 1) PRED_TARGET
                   FROM TEST_NMF_ATTR)
    モデルの精度の観察

    手動で選択した属性を持つモデルの全体的な精度を以前のモデルの属性と比較します。

  6. ターゲットの数字のPCT精度を確認します。
    %sql
     
    SELECT TARGET,
           count(*) NUM_TEST_DIGITS,
           ROUND((SUM(CASE WHEN (TARGET - PRED_TARGET) = 0 THEN 1 ELSE 0 END)
                  / COUNT(*))*100,4) PCT_ACCURACY FROM
           (SELECT TARGET,
                   ROUND(PREDICTION(NN_NMF_ATT_DIGITS USING *), 1) PRED_TARGET
                   FROM TEST_NMF_ATTR)
            GROUP BY TARGET
            ORDER BY TARGET
    ターゲットの数字の精度の観察

表4-1 PCT精度比較

モデル NUM_TEST_DIGITS PCT_OVERALL_ACCURACY
抽出された特徴を入力とするNNモデル1 725 96
NMFデータの上位16個の特徴を持つNNモデル2 725 79.4483
各特徴ベクターに最高の係数を持つ元の属性を持つNNモデル3 725 96.1379

16個のNMFの特徴の投影を使用するNNモデルは、全体の精度が低いことがわかりました。ただし、NNへの入力として減少した属性セットを使用するモデル(NMFが最も重要であると示唆される64個の合計属性うち33個を使用)は、元の属性と比較すると、全体の精度がわずかに向上しています。

このようにして、アプリケーションでこれらのモデルのいずれかを使用して、受講者シートまたはフォームを読み取り、手書きの数字を認識できます。