メタデータの編集
重要
Machine Learning Studio (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日までに、Azure Machine Learning に切り替えすることをお勧めします。
2021 年 12 月 1 日以降、新しい Machine Learning Studio (クラシック) リソースは作成できません。 2024 年 8 月 31 日まで、既存の Machine Learning Studio (クラシック) リソースを引き続き使用できます。
- ML Studio (クラシック) から Azure Machine Learning への機械学習プロジェクトの移動に関する情報を参照してください。
- Azure Machine Learning についての詳細を参照してください。
ML Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。
データセット内の列に関連付けられているメタデータを編集します
カテゴリ: データ変換/操作
注意
適用対象: Machine Learning Studio (クラシック) のみ
類似のドラッグ アンド ドロップ モジュールは Azure Machine Learning デザイナーで使用できます。
モジュールの概要
この記事では、Machine Learning Studio (クラシック) のメタデータの編集モジュールを使用して、データセット内の列に関連付けられているメタデータを変更する方法について説明します。 データセット内の値とデータ型は、実際には変更されません。列の使用方法をダウンストリーム コンポーネントにMachine Learning内部のメタデータは、どのような変更ですか。
一般的なメタデータの変更には以下が含まれます。
ブール値または数値の列をカテゴリ値として扱う
クラス ラベル、または分類や予測を行う値を含む列を示す
列をフィーチャーとしてマークする
日付/時刻の値を数値に、またはその逆に変更する
列名を変更する
列 の定義を 変更する必要がある場合は、いつでも [メタデータの編集] を使用します。通常は、ダウンストリーム モジュールの要件を満たします。 たとえば、一部のモジュールでは、特定のデータ型でのみ動作したり、列でフラグ (IsFeature
または IsCategorical
など) を要求したりできます。
必要な操作を実行すると、メタデータを元の状態にリセットできます。
メタデータの編集を構成する方法
Machine Learning Studio (クラシック) で、メタデータの編集モジュールを実験に追加し、更新するデータセットを接続します。 これは [Manipulate]\(操作\) カテゴリの [Data Transformation]\(データ変換\) の下にあります。
[Launch the column selector]\(列セレクターの起動\) をクリックして、使用する列または列のセットを選択します。 名前またはインデックスで列を個別に選択することも、型で列のグループを選択することもできます。
ヒント
列インデックスの使用に関するヘルプが必要ですか? 「テクニカル ノート 」セクションを参照 してください。
選択した列に別のデータ型を割り当てる必要がある場合は、 [Data type]\(データ型\) オプションを選択します。 特定の操作には、データ型の変更が必要な場合があります。たとえば、ソース データセットにテキストとして処理される数値がある場合、算術演算を使用する前にそれらを数値データ型に変更する必要があります。
サポートされるデータ型は、、
String
Integer
、Floating point
、、Boolean
、DateTime
および ですTimeSpan
。複数の列が選択されている場合は、メタデータの変更をすべての選択された列に適用する必要があります。 たとえば、2 - 3 の数値列を選択するとします。 1 つの操作でそれらをすべて文字列データ型に変更して、名前を変更することができます。 ただし、ある列を文字列データ型に変更し、別の列を float から integer に変更することはできません。
新しいデータ型を指定しない場合は、列のメタデータは変更されません。
データ型の変更は、データセットに関連付けられているメタデータと、ダウンストリーム操作でのデータの処理方法にのみ影響します。 列で (丸め処理など) 異なる操作を実行しない限り、実際の列値は変更されません。 [メタデータの編集] を使用して列のデータ型をリセットすることで、いつでも元のデータ型を回復できます。
注意
任意の数値の型を DateTime 型に変更する場合は、 [DateTime Format]\(DateTime 形式\) フィールドを空白のままにします。 現時点では、ターゲットのデータ形式を指定することはできません。
Machine Learningがサポートされている .NET DateTime オブジェクトの 1 つと互換性がある場合は、日付を数値に変換したり、数値を日付に変換したりできます。 詳細については、「テクニカル ノート」 セクションを参照 してください。
[Categorical]\(カテゴリ\) オプションを選択して、選択した列内の値をカテゴリとして扱うことを指定します。
たとえば、数値 0、1、2 を含む列があるが、数値が実際には "スモーカー"、"非スモーカー"、および "不明" を意味するとわかっている場合があります。 この場合、列をカテゴリとしてフラグ設定することで、値が数値の計算に使われず、データのグループ化にのみ使用されることを保証できます。
モデル内のデータの使用方法を変更する場合はMachine Learningフィールド オプションを使用します。
機能: このオプションを使用して、特徴列のみを操作するモジュールで使用するために、列に特徴としてフラグを設定します。 既定では、すべての列が最初はフィーチャーとして扱われます。
ラベル: ラベル (予測可能な属性またはターゲット変数とも呼ばれる) をマークするには、このオプションを使用します。 多くのモジュールでは、少なくとも 1 つのラベル列がデータセットに存在する必要があります。
多くの場合、Machine Learningにクラス ラベルが含まれていると思い込む場合がありますが、このメタデータを設定することで、列が正しく識別されるようにすることができます。 このオプションを設定してもデータの値は変更されず、一部の機械学習アルゴリズムがデータを処理する方法だけが変更されます。
重み: このオプションを数値データと一緒に使用して、列の値が機械学習のスコアリングまたはトレーニング操作で使用する重みを表すかどうかを示します。 データセットに存在できる重み列は 1 つのみです。列は数値である必要があります。 このオプションは、ロジスティック回帰、Two-Class サポート ベクター マシンTwo-Classニューラル ネットワークTwo-Classモデルでのみ機能します。
ヒント
これらのカテゴリに適合しないデータがありますか。 たとえば、データセットに変数として有用ではない一意の識別子などの値が含まれている場合があります。 ID をモデル内で使用すると問題が発生する場合があります。
さいわい、"カバーの下" Machine Learningすべてのデータが保持されます。そのため、データセットからこのような列を削除する必要が生じないので、 いくつか特殊な列のセットに対して操作を実行する必要がある場合には、Select Columns in Dataset (データセット内の列の選択) モジュールを使用して、他のすべての列を一時的に削除するだけです。 後で Add Columns (列の追加) モジュールを使用して、列をマージしてデータセットに戻すことができます。
前の選択を消去してメタデータを既定値に復元するには、次のオプションを使用します。
[Clear feature]\(フィーチャーのクリア\) :フィーチャー フラグを削除するには、このオプションを使用します。
数値演算を実行するモジュールでは、すべての列が最初はフィーチャーとして扱われるため、数値列が変数として扱われることを防ぐためにこのオプションを使用する必要があります。
[Clear label]\(ラベルのクリア\) :指定した列からラベル メタデータを削除するには、このオプションを使用します。
[Clear score]\(スコアのクリア\) :指定した列からスコア メタデータを削除するには、このオプションを使用します。
現時点では、列をスコアとして明示的にマークする機能は、Machine Learning。 ただし、一部の操作の結果として、列が内部的にスコアとしてフラグ設定されます。 また、カスタム R モジュールでスコアの値が出力される場合があります。
[Clear weight]/(重みをクリアする)]: このオプションを使用して、指定した 列から重 みメタデータを削除します。
[New column names]\(新しい列名\) には、選択した列 (複数可) の新しい名前を入力します。
列名には、UTF-8 エンコードでサポートされている文字のみを使用できます。 空の文字列、null、またはスペースのみで構成されている名前は許可されていません。
複数の列の名前を変更するには、コンマ区切りリストとして列のインデックスの順序で名前を入力します。
選択したすべての列の名前を変更する必要があります。 列を省略したりスキップすることはできません。
ヒント
複数の列の名前を変更する必要がある場合は、事前に準備したコンマ区切りの文字列を貼り付けます。 または、[R スクリプトの実行] または [変換の適用] SQL使用します。 コードと 例については、「テクニカル ノート」セクションを参照してください。
実験を実行します。
例
データの準備とモデルの構築でメタデータの編集を使用する方法の例については、次のAzure AI Gallery。
がんの検出: 列名は、データセットに結合した後に変更されます。 また、Patient ID 列は、計算で使用されるのではなく、文字列値として処理されるのではなく、カテゴリとしてフラグが設定されます。
Twitter 感情分析: メタデータの編集 を使用して 、列が特徴として扱われる方法を示します。 実験の後半で、機能メタデータがクリアされます。
データの処理と分析: このサンプルでは、メタデータの編集を使用して、Web ページから読み込まれたデータの新しい列名を定義します。
テクニカル ノート
このセクションでは、既知の問題、よく寄せられる質問、一般的な回避策の例について説明します。
の既知の問題
カスタム メタデータはサポートされていません。 メタデータの編集の外部で、カスタム メタデータをMachine Learning、列メタデータを編集することはできません。 たとえば、列が一意識別子であることを示すメタデータを追加したり、その他の説明属性 を追加したりすることはできません。 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 形式に関する問題。 が使用する
datetime
基になるデータ型Machine LearningですPOSIXct
。列内のすべての日付を既定のパーサーで解析できる場合、列はインポートされ、文字列データとして扱います。
メタデータの編集モジュール
DateTime
を使用して列を に変換しようとしてエラーが発生した場合は、日付が .Net が既定で受け入れる形式ではないという意味です。 この場合は、R スクリプトの実行モジュールまたは apply SQL Transformation モジュールを使用して、列を既定のパーサーで受け入れられる形式に変換することをお勧めします。
列インデックスを使用した列の選択
非常に大規模なデータセットでは、すべての列名を手動で入力または選択することはできません。 列インデックスの使用は、多数の列を指定するために使用できる 1 つのショートカットです。 このセクションでは、列インデックスの使用に関するヒントを提供します。
たとえば、列セレクターを開き、[ WITH RULES]をクリックし、[ Include andcolumn indices]を選択して、次のように範囲または一連の数値を入力します。
- 「」
1-20
と入力して、最初の 20 列を選択します - 「
5-20
」と入力して、5 から始まり、列 20 を含む列の範囲を選択します。 - 型を
1,5,10,15
入力して不連続列を選択する - 「
1-2, 5
」と入力して列 1、2、5 を選択し、列 3 と 4 をスキップします - データセットで使用できる列数を超えるインデックス値を入力することはできません。
次の実験では、複数の列を選択および変更する他の方法の例を示します。
二項分類: がん検出: 元のデータには、スプレッドシートからのインポート中に生成された多数の空白列が含まれています。 データの分割モジュールで列 1 から 11 を指定することで、余分な列 が削除 されました。
UCI からデータセットをダウンロードする: [データ の手動入力] モジュールを使用して列名をリストとして指定し、R スクリプトの実行モジュールを使用してリストを見出しとしてデータセットに挿入する方法を 示 します。
Regex Select Columns(正規表現の列の選択): この実験では、列名に正規表現を適用できるカスタム モジュールを提供します。 このモジュールをメタデータの編集の入力として 使用できます。
列名を変更する代替メソッド
名前を変更する列が多数の場合は、R スクリプトの実行モジュールまたは変換の適用モジュールSQL使用できます。
R スクリプトの使用
Machine Learning によって使用されるデータ セットは data.frame としてこのモジュールに渡されます。つまり、R 関数や他の関連する R colnames()
関数を使用して列名を一覧表示または変更できます。
たとえば、次のコードでは、新しい列名のリストを作成し、そのリストを入力データセットに適用して新しい列見出しを生成します。
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;
想定される入力
Name | 型 | 説明 |
---|---|---|
データセット | データ テーブル | 入力データセット |
モジュールのパラメーター
名前 | Range | Type | Default | 説明 |
---|---|---|---|---|
列 | Any | ColumnSelection | 変更を適用する必要がある列を選択します。 | |
データ型 | 一覧 | メタデータ エディターのデータ型 | 変更なし | 列の新しいデータ型を指定します。 |
Categorical | 一覧 | メタデータ エディターのカテゴリ | 変更なし | 列にカテゴリとしてフラグを付ける必要があるかどうかを示します。 |
フィールド | 一覧 | メタデータ エディター フラグ | 変更なし | 列を学習アルゴリズムで特徴と見なすかラベルと見なすかを指定します。 |
新しい列名 | any | String | 列の新しい名前を入力します。 |
出力
名前 | 型 | 説明 |
---|---|---|
結果のデータセット | データ テーブル | 変更されたメタデータを含むデータセット |
例外
例外 | 説明 |
---|---|
エラー 0003 | 1 つ以上のデータセットの入力が null または空の場合に、例外が発生します。 |
エラー 0017 | 指定した 1 つまたは複数の列に、現在のモジュールでサポートされていない型がある場合、例外が発生します。 |
エラー 0020 | モジュールに渡された一部のデータセットの列数が少なすぎる場合に、例外が発生します。 |
エラー 0031 | 列セット内の列の数が必要な数よりも少ない場合に、例外が発生します。 |
エラー 0027 | 同じサイズにする必要がある 2 つのオブジェクトのサイズが異なる場合に、例外が発生します。 |
エラー 0028 | 列セットに重複する列名が含まれるが、それが許可されていない場合に、例外が発生します。 |
エラー 0037 | 複数のラベル列が指定されているが、1 つだけが許可されている場合に例外が発生します。 |
Studio (クラシック) モジュール固有のエラーの一覧については、「 Machine Learning エラーコード」を参照してください。
API 例外の一覧については、「 Machine Learning REST API のエラーコード」を参照してください。