メタデータの編集

データセット内の列に関連付けられているメタデータを編集します

カテゴリ: データ変換/操作

注意

適用対象: Machine Learning Studio (クラシック)

このコンテンツは、Studio (クラシック) のみに関連しています。 Azure Machine Learning デザイナーに同様のドラッグアンドドロップモジュールが追加されました。 この記事では、2つのバージョンの比較について詳しく説明します。

モジュールの概要

この記事では、Azure Machine Learning Studio (クラシック) の メタデータの編集 モジュールを使用して、データセット内の列に関連付けられているメタデータを変更する方法について説明します。 データセット内の値とデータ型は実際には変更されません。変更点は、ダウンストリームコンポーネントに列の使用方法を指示する Azure Machine Learning 内のメタデータです。

一般的なメタデータの変更には以下が含まれます。

  • ブール値または数値の列をカテゴリ値として扱う

  • クラス ラベル、または分類や予測を行う値を含む列を示す

  • 列をフィーチャーとしてマークする

  • 日付/時刻の値を数値に、またはその逆に変更する

  • 列名を変更する

列の定義を変更する必要があるときは常に、ダウンストリームモジュールの要件を満たすために、 メタデータの編集 を使用します。 たとえば、一部のモジュールでは、特定のデータ型でのみ動作したり、列でフラグ (IsFeature または IsCategorical など) を要求したりできます。

必要な操作を実行すると、メタデータを元の状態にリセットできます。

メタデータの編集を構成する方法

  1. Azure Machine Learning Studio (クラシック) で、[ メタデータの編集 ] モジュールを実験に追加し、更新するデータセットを接続します。 これは [Manipulate](操作) カテゴリの [Data Transformation](データ変換) の下にあります。

  2. [Launch the column selector](列セレクターの起動) をクリックして、使用する列または列のセットを選択します。 名前またはインデックスで列を個別に選択することも、型で列のグループを選択することもできます。

    ヒント

    列インデックスの使用に関するヘルプが必要ですか? 「 テクニカルノート 」を参照してください。

  3. 選択した列に別のデータ型を割り当てる必要がある場合は、 [Data type](データ型) オプションを選択します。 特定の操作には、データ型の変更が必要な場合があります。たとえば、ソース データセットにテキストとして処理される数値がある場合、算術演算を使用する前にそれらを数値データ型に変更する必要があります。

    • サポートされるデータ型は、、、、、 String Integer Floating point Boolean DateTime 、および TimeSpan です。

    • 複数の列が選択されている場合は、メタデータの変更を すべて の選択された列に適用する必要があります。 たとえば、2 - 3 の数値列を選択するとします。 1 つの操作でそれらをすべて文字列データ型に変更して、名前を変更することができます。 ただし、ある列を文字列データ型に変更し、別の列を float から integer に変更することはできません。

    • 新しいデータ型を指定しない場合は、列のメタデータは変更されません。

    • データ型の変更は、データセットに関連付けられているメタデータと、ダウンストリーム操作でのデータの処理方法に影響します。 列で (丸め処理など) 異なる操作を実行しない限り、実際の列値は変更されません。 メタデータの 編集 を使用して列のデータ型をリセットすることで、いつでも元のデータ型を復旧できます。

    注意

    任意の数値の型を DateTime 型に変更する場合は、 [DateTime Format](DateTime 形式) フィールドを空白のままにします。 現時点では、ターゲットのデータ形式を指定することはできません。

サポートされているいずれかの .NET DateTime オブジェクトとの互換性がある場合、Azure Machine Learning は日付を数値または数値に変換できます。 詳細については、「 テクニカルノート 」を参照してください。

  1. [Categorical](カテゴリ) オプションを選択して、選択した列内の値をカテゴリとして扱うことを指定します。

    たとえば、数値0、1、および2を含む列があるとしますが、実際には "Smoker"、"Non Smoker"、および "Unknown" という意味であることがわかります。 この場合、列をカテゴリとしてフラグ設定することで、値が数値の計算に使われず、データのグループ化にのみ使用されることを保証できます。

  2. Azure Machine Learning がモデル内のデータを使用する方法を変更する場合は、 [Fields](フィールド) オプションを使用します。

    • 特徴: 機能列に対してのみ動作するモジュールで使用するために、このオプションを使用して、列に機能としてフラグを設定します。 既定では、すべての列が最初はフィーチャーとして扱われます。

    • [ラベル]: このオプションを使用して、ラベル (予測可能な属性またはターゲット変数とも呼ばれます) をマークします。 多くのモジュールでは、データセット内に少なくとも1つのラベル列が存在する必要があります。

      多くの場合、Azure Machine Learning では、クラス ラベルが含まれている列を推測できますが、このメタデータを設定することで、列が正しく識別されることを保証できます。 このオプションを設定してもデータの値は変更されず、一部の機械学習アルゴリズムがデータを処理する方法だけが変更されます。

    • Weight: このオプションを数値データと共に使用して、列の値が機械学習のスコアリングまたはトレーニング操作で使用する重みを表すことを示します。 データセットには1つの重み列しか存在できません。列は数値である必要があります。

    ヒント

    これらのカテゴリに適合しないデータがありますか。 たとえば、データセットに変数として有用ではない一意の識別子などの値が含まれている場合があります。 ID をモデル内で使用すると問題が発生する場合があります。

    さいわい、Azure Machine Learning の "内部" にはすべてのデータが保持されているため、データセットからこのような列を削除する必要はありません。 いくつか特殊な列のセットに対して操作を実行する必要がある場合には、Select Columns in Dataset (データセット内の列の選択) モジュールを使用して、他のすべての列を一時的に削除するだけです。 後で Add Columns (列の追加) モジュールを使用して、列をマージしてデータセットに戻すことができます。

  3. 前の選択を消去してメタデータを既定値に復元するには、次のオプションを使用します。

    • [Clear feature](フィーチャーのクリア) :フィーチャー フラグを削除するには、このオプションを使用します。

      数値演算を実行するモジュールでは、すべての列が最初はフィーチャーとして扱われるため、数値列が変数として扱われることを防ぐためにこのオプションを使用する必要があります。

    • [Clear label](ラベルのクリア) :指定した列から ラベル メタデータを削除するには、このオプションを使用します。

    • [Clear score](スコアのクリア) :指定した列から スコア メタデータを削除するには、このオプションを使用します。

      現時点では、列をスコアとして明示的にマークする機能は、Azure Machine Learning では使用できません。 ただし、一部の操作の結果として、列が内部的にスコアとしてフラグ設定されます。 また、カスタム R モジュールでスコアの値が出力される場合があります。

    • [重みのクリア]: このオプションを使用すると、指定された列から 重み付け メタデータを削除できます。

  4. [New column names](新しい列名) には、選択した列 (複数可) の新しい名前を入力します。

    • 列名には、UTF-8 エンコードでサポートされている文字のみを使用できます。 空の文字列、null、またはスペースのみで構成されている名前は許可されていません。

    • 複数の列の名前を変更するには、コンマ区切りリストとして列のインデックスの順序で名前を入力します。

    • 選択したすべての列の名前を変更する必要があります。 列を省略したりスキップすることはできません。

    ヒント

    複数の列の名前を変更する必要がある場合は、事前に準備したコンマ区切りの文字列を貼り付けることができます。 または、 R スクリプトの実行 または SQL 変換の適用 モジュールを使用します。 コードと例については、「 テクニカルノート 」を参照してください。

  5. 実験を実行します。

使用例

データを準備し、モデルを作成するときに メタデータの編集 を使用する方法の例については、 Azure AI Galleryを参照してください。

  • 次のように、データセットへの結合後に列名が変更されます。 また、[ 患者 ID ] 列には、計算で使用されるのではなく、文字列値として処理されるのではなく、 カテゴリ としてフラグが設定されます。

  • Twitter センチメント分析: メタデータの編集 を使用して、列が特徴として扱われるようにする方法を示します。 実験の後半では、機能メタデータはクリアされます。

  • データの処理と分析: このサンプルでは、web ページから読み込まれたデータの新しい列名を定義するために、[ メタデータの編集 ] を使用します。

テクニカルノート

このセクションには、既知の問題、よく寄せられる質問、および一般的な回避策の例が含まれています。

既知の問題

  • カスタムメタデータはサポートされていません。 Azure Machine Learning でカスタムメタデータを使用したり、メタデータの 編集以外で列のメタデータを編集したりすることはできません。 たとえば、列が一意の識別子であることを示すメタデータを追加したり、他の説明的な属性を追加したりすることはできません。 Azure Machine Learning では、要素、特徴、重み、およびラベルを操作するために R 内で使用されるメタデータ属性のみがサポートされます。

  • サポートされていないデータ型です。 次の数値データ型はサポートされていません: Double (decimal) と TimeStamp。

  • スコア列を識別します。 現在、 メタデータの編集 には、 スコア を含む列にフラグを設定するオプションはありません。 ただし、 R スクリプトの実行 モジュールを次のようなスクリプトと共に使用すると、列にスコアが含まれていることを示すことができます。

    dataset <- maml.mapInputPort(1)   
    attr(dataset$x, "label.type")= "True Labels"  
    attr(dataset$y, "feature.channel")= "Multiclass Classification Scores"  
    attr(dataset$y, "score.type")= "Assigned Labels"  
    maml.mapOutputPort("dataset");
    
  • Datetime 形式に関する問題。 datetimeAzure Machine Learning によって使用される基になるデータ型が POSIXct です。

    列内のすべての日付を既定のパーサーで解析できる場合、列はインポートされ、文字列データとして扱われます。

    メタデータの編集モジュールを使用して列をに変換しようとしてエラーが発生した場合は、 DateTime その日付が既定で .net で受け入れられる形式ではないことを意味します。 この場合は、 R スクリプトの実行 モジュールまたは SQL 変換の適用 モジュールを使用して、列を既定のパーサーで受け入れられる形式に変換することをお勧めします。

    DateTime. Parse メソッド

    標準の日時形式文字列

列インデックスを使用した列の選択

非常に大規模なデータセットでは、すべての列名を手動で入力または選択することはできません。 列インデックスの使用は、多数の列を指定するために使用できる1つのショートカットです。 ここでは、列インデックスの使用に関するヒントをいくつか紹介します。

たとえば、列セレクターを開き、[ ルールを含む] をクリックし、[ 含める ] と [ 列インデックス] を選択して、次のように範囲または一連の数値を入力します。

  • 「」と入力し 1-20 て最初の20列を選択します。
  • 5-20 」と入力して、5から始まり、列20を含む列の範囲を選択します。
  • 入力して 1,5,10,15 非連続列を選択します
  • 「」と入力して、列 1-2, 5 3 と4をスキップする列1、2、および5を選択します。
  • データセットで使用できる列の数より大きいインデックス値を入力することはできません。

次の実験では、複数の列を選択および変更するための他の方法の例をいくつか紹介します。

  • 二項分類: より ast の Cancer 検出: 元のデータには、スプレッドシートからのインポート中に生成された多数の空の列が含まれていました。 データの分割 モジュールで列1-11 を指定することにより、余分な列が削除されました。

  • UCI からデータセットをダウンロードする: [ データを手動で入力 ] モジュールを使用して列名をリストとして指定し、[ R スクリプトの実行 ] モジュールを使用して、リストを見出しとしてデータセットに挿入する方法を示します。

  • Regex Select Columns: この実験では、列名に正規表現を適用できるカスタムモジュールを提供します。 このモジュールを入力として使用して、 メタデータを編集 できます。

列名を変更するための別の方法

名前を変更する列が多数ある場合は、 R スクリプトの実行 モジュールまたは SQL 変換の適用 モジュールを使用できます。

R スクリプトの使用

Azure Machine Learning によって使用されるデータセットは、このモジュールにデータとして渡されます。つまり、R colnames() 関数やその他の関連する r 関数を使用して、列名を一覧表示または変更することができます。

たとえば、次のコードでは、新しい列名の一覧を作成し、そのリストを入力データセットに適用して新しい列見出しを生成します。

irisdata <- maml.mapInputPort(1);    
newnames <- c("CLASS", "SEPAL  LENGTH", "SEPAL WIDTH", "PETAL LENGTH", "PETAL WIDTH");
colnames(irisdata) = newnames
maml.mapOutputPort("irisdata");

次の例では、R の正規表現を使用して、の列名に指定された文字列のすべてのインスタンスをグローバルに置換し irisdata ます。

# Map input dataset to variable
newirisdata <- maml.mapInputPort(1) # class: data.frame
names(newirisdata) <- gsub("col", "iris", names(newirisdata))
maml.mapOutputPort("newirisdata");

SQL の使用

次の例では、入力としてデータセットを受け取り、 as キーワードを使用して列名を変更します。

SELECT col1 as [C1], 
  col2 as [C2], 
  col3 as [C3], 
  col4 as [C4],
  col5 as [C5] 
FROM t1;

想定される入力

名前 Type 説明
データセット データ テーブル 入力データセット

モジュールのパラメーター

名前 Range Type Default 説明
Any ColumnSelection 変更を適用する必要がある列を選択します。
データ型 List メタデータ エディターのデータ型 変更なし 列の新しいデータ型を指定します。
Categorical List メタデータ エディターのカテゴリ 変更なし 列にカテゴリとしてフラグを付ける必要があるかどうかを示します。
フィールド List メタデータ エディター フラグ 変更なし 列を学習アルゴリズムで特徴と見なすかラベルと見なすかを指定します。
新しい列名 any String 列の新しい名前を入力します。

出力

名前 Type 説明
結果のデータセット データ テーブル 変更されたメタデータを含むデータセット

例外

例外 説明
エラー 0003 1 つ以上のデータセットの入力が null または空の場合に、例外が発生します。
エラー 0017 指定した 1 つまたは複数の列に、現在のモジュールでサポートされていない型がある場合、例外が発生します。
エラー 0020 モジュールに渡された一部のデータセットの列数が少なすぎる場合に、例外が発生します。
エラー 0031 列セット内の列の数が必要な数よりも少ない場合に、例外が発生します。
エラー 0027 同じサイズにする必要がある 2 つのオブジェクトのサイズが異なる場合に、例外が発生します。
エラー 0028 列セットに重複する列名が含まれるが、それが許可されていない場合に、例外が発生します。
エラー 0037 複数のラベル列が指定されているが、1 つだけが許可されている場合に例外が発生します。

Studio (クラシック) モジュール固有のエラーの一覧については、「 Machine Learning エラーコード」を参照してください。

API 例外の一覧については、「 Machine Learning REST API のエラーコード」を参照してください。

関連項目

操作性
データ変換
モジュールの一覧 (アルファベット順)