データ マイニング モデルに対してクエリを作成する場合は、モデルに関するメタデータを取得したり、分析で検出されたパターンに関する詳細を提供するコンテンツ クエリを作成したりできます。 または、モデル内のパターンを使用して新しいデータの予測を行う予測クエリを作成することもできます。 クエリの種類ごとに異なる情報が提供されます。 たとえば、コンテンツ クエリでは、検出されたクラスターに関する追加の詳細が提供されるのに対し、予測クエリでは、新しいデータ ポイントが属する可能性が最も高いクラスターを示す場合があります。
このセクションでは、Microsoft クラスタリング アルゴリズムに基づくモデルのクエリを作成する方法について説明します。
コンテンツ クエリ
システム ストアド プロシージャを使用したクラスター プロファイルの返し
予測クエリ
モデルに関する情報の検索
すべてのマイニング モデルは、標準化されたスキーマであるマイニング モデル スキーマ行セットに従って、アルゴリズムによって学習されたコンテンツを公開します。 データ マイニング拡張機能 (DMX) ステートメントを使用して、マイニング モデル スキーマ行セットに対するクエリを作成できます。 SQL Server 2014 では、スキーマ行セットのクエリをシステム テーブルとして直接実行することもできます。
サンプル クエリ 1: DMX を使用したモデル メタデータの取得
次のクエリは、基本的なデータ マイニング チュートリアルで作成したクラスタリング モデル ( TM_Clustering
) に関する基本的なメタデータを返します。 クラスタリング モデルの親ノードで使用できるメタデータには、モデルの名前、モデルが格納されているデータベース、モデル内の子ノードの数が含まれます。 このクエリでは、DMX コンテンツ クエリを使用して、モデルの親ノードからメタデータを取得します。
SELECT MODEL_CATALOG, MODEL_NAME, NODE_CAPTION,
NODE_SUPPORT, [CHILDREN_CARDINALITY], NODE_DESCRIPTION
FROM TM_Clustering.CONTENT
WHERE NODE_TYPE = 1
注
同じ名前の多次元式 (MDX) の予約キーワードと区別するために、列名 CHILDREN_CARDINALITY を角かっこで囲んでください。
結果の例:
モデルカタログ | TM_クラスタリング |
MODEL_NAME | Adventure Works DW |
ノードキャプション | クラスター モデル |
ノードサポート | 12939 |
子供の基数 | 10 |
ノードの説明 | 全て |
クラスタリング モデルでのこれらの列の意味の定義については、「クラスタリング モデルの マイニング モデル コンテンツ (Analysis Services - データ マイニング)」を参照してください。
サンプル クエリ 2: スキーマ行セットからモデル メタデータを取得する
データ マイニング スキーマ行セットに対してクエリを実行すると、DMX コンテンツ クエリで返されるのと同じ情報を見つけることができます。 ただし、スキーマ行セットには追加の列がいくつか用意されています。 これには、モデルの作成時に使用されたパラメーター、モデルが最後に処理された日時、およびモデルの所有者が含まれます。
次の例では、モデルが作成、変更、最後に処理された日付と、モデルの構築に使用されたクラスタリング パラメーター、およびトレーニング セットのサイズを返します。 この情報は、モデルを文書化したり、既存のモデルの作成に使用されたクラスタリング オプションを特定したりするのに役立ちます。
SELECT MODEL_NAME, DATE_CREATED, LAST_PROCESSED, PREDICTION_ENTITY, MINING_PARAMETERS
from $system.DMSCHEMA_MINING_MODELS
WHERE MODEL_NAME = 'TM_Clustering'
結果の例:
MODEL_NAME | TMクラスタリング |
作成日 | 2007 年 10 月 12 日午後 7:42:51 |
最終処理済み | 2007 年 10 月 12 日午後 8:09:54 |
予測エンティティ | 自転車購入者 |
マイニングパラメータ | CLUSTER_COUNT=10, CLUSTER_SEED=0, CLUSTERING_METHOD=1, MAXIMUM_INPUT_ATTRIBUTES=255, MAXIMUM_STATES=100, 最小サポート=1 MODELLING_CARDINALITY=10, SAMPLE_SIZE=50000, 停止許容値=10 |
クラスターに関する情報の検索
クラスタリング モデルで最も便利なコンテンツ クエリは、通常、 クラスター ビューアーを使用して参照できるのと同じ種類の情報を返します。 これには、クラスター プロファイル、クラスターの特性、クラスターの識別が含まれます。 このセクションでは、この情報を取得するクエリの例を示します。
サンプル クエリ 3: クラスターまたはクラスターの一覧を返す
すべてのクラスターのノード タイプは 5 であるため、その種類のノードに対してのみモデル コンテンツのクエリを実行することで、クラスターの一覧を簡単に取得できます。 この例に示すように、確率またはサポートによって返されるノードをフィルター処理することもできます。
SELECT NODE_NAME, NODE_CAPTION ,NODE_SUPPORT, NODE_DESCRIPTION
FROM TM_Clustering.CONTENT
WHERE NODE_TYPE = 5 AND NODE_SUPPORT > 1000
結果の例:
ノード名 | 002 |
ノードキャプション | クラスター 2 |
ノードサポート | 1649 |
ノードの説明 | English Education=Graduate Degree 、32 <=年齢 <=48 、所有車両数=0 、35964.0771121808 <=年間収入 <=97407.7163393957 、English 職業=Professional 、通勤距離=2-5 マイル 、地域=北米 、自転車購入者=1 、子供が家にいる数=0 、所有車両数=1 、通勤距離=0-1 マイル 、English Education=Bachelors 、子供の合計数=1 、子供が家にいる数=2 、English 職業=Skilled Manual 、婚姻状況=S 、子供の合計数=0 、持家フラグ=0 、性別=F 、子供の合計数=2 、地域=太平洋 |
クラスターを定義する属性は、データ マイニング スキーマ行セットの 2 つの列にあります。
NODE_DESCRIPTION列には、属性のコンマ区切りのリストが含まれています。 属性の一覧は、表示目的で省略される場合があることに注意してください。
NODE_DISTRIBUTION列の入れ子になったテーブルには、クラスターの属性の完全な一覧が含まれています。 クライアントが階層行セットをサポートしていない場合は、SELECT 列リストの前に FLATTENED キーワードを追加することで、入れ子になったテーブルを返すことができます。 FLATTENED キーワードの使用方法の詳細については、「 SELECT FROM <model>」を参照してください。CONTENT (DMX)。
サンプル クエリ 4: クラスターの属性を返す
クラスター ビューアー には、すべてのクラスターについて、属性とその値を一覧表示するプロファイルが表示されます。 ビューアーには、モデル内のケースの母集団全体の値の分布を示すヒストグラムも表示されます。 ビューアーでモデルを参照している場合は、マイニング凡例からヒストグラムを簡単にコピーし、Excel または Word 文書に貼り付けることができます。 ビューアーの [クラスターの特性] ウィンドウを使用して、さまざまなクラスターの属性をグラフィカルに比較することもできます。
ただし、一度に複数のクラスターの値を取得する必要がある場合は、モデルのクエリを実行する方が簡単です。 たとえば、モデルを参照すると、上位 2 つのクラスターが 1 つの属性 ( Number Cars Owned
) に関して異なることがあります。 そのため、各クラスターの値を抽出する必要があります。
SELECT TOP 2 NODE_NAME,
(SELECT ATTRIBUTE_VALUE, [PROBABILITY] FROM NODE_DISTRIBUTION WHERE ATTRIBUTE_NAME = 'Number Cars Owned')
AS t
FROM [TM_Clustering].CONTENT
WHERE NODE_TYPE = 5
コードの最初の行では、上位 2 つのクラスターのみが必要であることを指定します。
注
既定では、クラスターはサポート順に並べ替えされます。 したがって、NODE_SUPPORT列は省略できます。
コードの 2 行目では、入れ子になったテーブル列から特定の列のみを返すサブ select ステートメントが追加されます。 さらに、入れ子になったテーブルの行は、ターゲット属性に関連する行に制限 Number Cars Owned
。 表示を簡略化するために、入れ子になったテーブルの別名が付けられます。
注
入れ子になったテーブル列 PROBABILITY
は、予約済みの MDX キーワードの名前でもあるため、角かっこで囲む必要があります。
結果の例:
ノード名 | T.ATTRIBUTE_VALUE | T.確率 |
---|---|---|
001 | 2 | 0.829207754 |
001 | 1 | 0.109354156 |
001 | 3 | 0.034481552 |
001 | 4 | 0.013503302 |
001 | 0 | 0.013453236 |
001 | 行方不明 | 0 |
002 | 0 | 0.576980023 |
002 | 1 | 0.406623939 |
002 | 2 | 0.016380082 |
002 | 3 | 1.60E-05 |
002 | 4 | 0 |
002 | 行方不明 | 0 |
サンプル クエリ 5: システム ストアド プロシージャを使用してクラスター プロファイルを返す
ショートカットとして、DMX を使用して独自のクエリを記述するのではなく、Analysis Services がクラスターの操作に使用するシステム ストアド プロシージャを呼び出すこともできます。 次の例は、内部ストアド プロシージャを使用して、ID が 002 のクラスターのプロファイルを返す方法を示しています。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterProfiles('TM_Clustering", '002',0.0005
同様に、システム ストアド プロシージャを使用して、次の例に示すように、特定のクラスターの特性を返すことができます。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterCharacteristics('TM_Clustering", '009',0.0005
結果の例:
属性 | 価値観 | 頻度 | 支援 |
---|---|---|---|
自宅で子どもの数を増やす | 0 | 0.999999829076798 | 899 |
リージョン | 北アメリカ | 0.999852875241508 | 899 |
子の合計数 | 0 | 0.993860958572323 | 893 |
注
データ マイニング システムのストアド プロシージャは内部で使用するため、Microsoft は必要に応じて変更する権利を留保します。 運用環境で使用する場合は、DMX、AMO、または XMLA を使用してクエリを作成することをお勧めします。
サンプル クエリ 6: クラスターの判別要因を見つける
クラスター ビューアーの [クラスターの識別] タブを使用すると、クラスターを別のクラスターと簡単に比較したり、クラスターを残りのすべてのケース (クラスターの補完) と比較したりできます。
ただし、この情報を返すクエリの作成は複雑な場合があり、一時的な結果を格納し、2 つ以上のクエリの結果を比較するために、クライアントで追加の処理が必要になる場合があります。 ショートカットとして、システム ストアド プロシージャを使用できます。
次のクエリは、ノード ID が 009 と 007 の 2 つのクラスター間の主な判別要因を示す 1 つのテーブルを返します。 正の値を持つ属性はクラスター 009 を優先し、負の値を持つ属性はクラスター 007 を優先します。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterDiscrimination('TM_Clustering','009','007',0.0005,true)
結果の例:
属性 | 価値観 | スコア |
---|---|---|
リージョン | 北アメリカ | 100 |
英語関連の職業 | 熟練したマニュアル | 94.9003803898654 |
リージョン | ヨーロッパ | -72.5041051379789 |
英語に関連する職業 | マニュアル | -69.6503163202722 |
これは、最初のドロップダウン リストからクラスター 9 を選択し、2 番目のドロップダウン リストからクラスター 7 を選択した場合に、クラスター 識別 ビューアーのグラフに表示されるのと同じ情報です。 クラスター 9 とその補数を比較するには、次の例に示すように、2 番目のパラメーターで空の文字列を使用します。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterDiscrimination('TM_Clustering','009','',0.0005,true)
注
データ マイニング システムのストアド プロシージャは内部で使用するため、Microsoft は必要に応じて変更する権利を留保します。 運用環境で使用する場合は、DMX、AMO、または XMLA を使用してクエリを作成することをお勧めします。
サンプル クエリ 7: クラスターに属するケースを返す
マイニング モデルでドリルスルーが有効になっている場合は、モデルで使用されるケースに関する詳細情報を返すクエリを作成できます。 さらに、マイニング構造でドリルスルーが有効になっている場合は、 StructureColumn (DMX) 関数を使用して、基になる構造の列を含めることができます。
次の例では、モデルで使用された 2 つの列 (Age と Region) と、モデルで使用されなかったもう 1 つの列 (First Name) が返されます。 このクエリは、クラスター 1 に分類されたケースのみを返します。
SELECT [Age], [Region], StructureColumn('First Name')
FROM [TM_Clustering].CASES
WHERE IsInNode('001')
クラスターに属するケースを返すには、クラスターの ID を知っている必要があります。 いずれかのビューアーでモデルを参照することで、クラスターの ID を取得できます。 または、クラスターの名前を変更して参照しやすくすることができます。その後、ID 番号の代わりに名前を使用できます。 ただし、モデルが再処理されると、クラスターに割り当てる名前が失われることを認識してください。
モデルを使用した予測の作成
クラスタリングは通常、データの記述と理解に使用されますが、Microsoft の実装では、クラスター メンバーシップに関する予測を行い、予測に関連付けられている確率を返すこともできます。 このセクションでは、クラスタリング モデルに対して予測クエリを作成する方法の例を示します。 表形式のデータ ソースを指定して複数のケースの予測を行ったり、シングルトン クエリを作成して一度に新しい値を指定したりできます。 わかりやすくするために、このセクションの例はすべてシングルトン クエリです。
DMX を使用して予測クエリを作成する方法の詳細については、「 データ マイニング クエリ インターフェイス」を参照してください。
サンプル クエリ 8: クラスタリング モデルからの結果の予測
作成するクラスタリング モデルに予測可能な属性が含まれている場合は、モデルを使用して結果に関する予測を行うことができます。 ただし、予測可能な列を Predict
に設定するか、 PredictOnly
に設定するかによって、モデルによって予測可能な属性の処理方法が異なります。 列の使用法を Predict
に設定すると、その属性の値がクラスタリング モデルに追加され、完成したモデルに属性として表示されます。 ただし、列の使用法を PredictOnly
に設定した場合、値はクラスターの作成には使用されません。 代わりに、モードが完了すると、クラスタリング アルゴリズムは、各ケースが属するクラスターに基づいて、 PredictOnly
属性の新しい値を作成します。
次のクエリでは、モデルに 1 つの新しいケースが提供されます。ケースに関する唯一の情報は年齢と性別です。 SELECT ステートメントは、関心のある予測可能な属性と値のペアを指定し、 PredictProbability (DMX) 関数は、これらの属性のケースが対象の結果を持つ確率を示します。
SELECT
[TM_Clustering].[Bike Buyer], PredictProbability([Bike Buyer],1)
FROM
[TM_Clustering]
NATURAL PREDICTION JOIN
(SELECT 40 AS [Age],
'F' AS [Gender]) AS t
使用状況が Predict
に設定されている場合の結果の例:
自転車購入者 | 表現 |
---|---|
1 | 0.592924735740338 |
使用状況が PredictOnly
に設定され、モデルが再処理されたときの結果の例:
自転車購入者 | 表現 |
---|---|
1 | 0.55843544003102 |
この例では、モデルの違いは重要ではありません。 ただし、値の実際の分布とモデルが予測する内容の違いを検出することが重要な場合があります。 PredictCaseLikelihood (DMX) 関数は、モデルを考えるとケースの可能性を示すので、このシナリオで役立ちます。
PredictCaseLikelihood 関数によって返される数値は確率であるため、常に 0 から 1 の間であり、値 .5 はランダムな結果を表します。 したがって、スコアが .5 未満の場合は、モデルを指定すると、予測されたケースの可能性が低いことを意味し、5 を超えるスコアは、予測されたケースがモデルに適合しないよりも可能性が高いことを示します。
たとえば、次のクエリは、新しいサンプル ケースの可能性を示す 2 つの値を返します。 正規化されていない値は、現在のモデルに与えられた確率を表します。 NORMALIZED キーワードを使用する場合、関数によって返される尤度スコアは、"確率とモデル" を "モデルなしの確率" で割ることによって調整されます。
SELECT
PredictCaseLikelihood(NORMALIZED) AS [NormalizedValue], PredictCaseLikelihood(NONNORMALIZED) AS [NonNormalizedValue]
FROM
[TM_Clustering_PredictOnly]
NATURAL PREDICTION JOIN
(SELECT 40 AS [Age],
'F' AS [Gender]) AS t
結果の例:
正規化値 | 非正規化値 |
---|---|
5.56438372679893E-11 | 8.65459953145182E-68 |
これらの結果の数値は科学的表記で表されることに注意してください。
サンプル クエリ 9: クラスター メンバーシップの決定
この例では、 クラスター (DMX) 関数を使用して、新しいケースが属する可能性が最も高いクラスターを返し、 ClusterProbability (DMX) 関数を使用してそのクラスターのメンバーシップの確率を返します。
SELECT Cluster(), ClusterProbability()
FROM
[TM_Clustering]
NATURAL PREDICTION JOIN
(SELECT 40 AS [Age],
'F' AS [Gender],
'S' AS [Marital Status]) AS t
結果の例:
$CLUSTER | 表現 |
---|---|
クラスター 2 | 0.397918596951617 |
手記 既定では、 ClusterProbability
関数は最も可能性の高いクラスターの確率を返します。 ただし、構文 ClusterProbability('cluster name')
を使用して、別のクラスターを指定できます。 これを行う場合は、各予測関数の結果が他の結果から独立していることに注意してください。 したがって、2 番目の列の確率スコアは、最初の列で指定されたクラスターとは異なるクラスターを参照する可能性があります。
サンプル クエリ 10: 確率と距離を持つ可能性のあるすべてのクラスターを返す
前の例では、確率スコアはあまり高くなっていません。 より優れたクラスターがあるかどうかを判断するには、 PredictHistogram (DMX) 関数を Cluster (DMX) 関数と共に使用して、可能なすべてのクラスターを含む入れ子になったテーブルと、各クラスターに属する新しいケースの確率を返すことができます。 FLATTENED キーワードは、見やすくするために階層行セットをフラット テーブルに変更するために使用されます。
SELECT FLATTENED PredictHistogram(Cluster())
From
[TM_Clustering]
NATURAL PREDICTION JOIN
(SELECT 40 AS [Age],
'F' AS [Gender],
'S' AS [Marital Status])
Expression.$CLUSTER | Expression.$DISTANCE | Expression.$PROBABILITY |
---|---|---|
クラスター 2 | 0.602081403048383 | 0.397918596951617 |
クラスター 10 | 0.719691686785675 | 0.280308313214325 |
クラスター 4 | 0.867772590378791 | 0.132227409621209 |
クラスター 5 | 0.931039872200985 | 0.0689601277990149 |
クラスター 3 | 0.942359230072167 | 0.0576407699278328 |
クラスター 6 | 0.958973668972756 | 0.0410263310272437 |
クラスター 7 | 0.979081275926724 | 0.0209187240732763 |
クラスター 1 | 0.999169044818624 | 0.000830955181376364 |
クラスター 9 | 0.999831227795894 | 0.000168772204105754 |
クラスター 8 | 1 | 0 |
既定では、結果は確率でランク付けされます。 結果から、クラスター 2 の確率はかなり低くても、クラスター 2 が新しいデータ ポイントに最適であることが示されます。
手記 追加の列 $DISTANCE
は、データ ポイントからクラスターまでの距離を表します。 既定では、Microsoft クラスタリング アルゴリズムはスケーラブルな EM クラスタリングを使用します。このクラスタリングでは、各データ ポイントに複数のクラスターが割り当てられ、可能なクラスターがランク付けされます。 ただし、K-Means アルゴリズムを使用してクラスタリング モデルを作成する場合、各データ ポイントに割り当てることができるクラスターは 1 つだけであり、このクエリでは 1 つの行のみが返されます。
PredictCaseLikelihood (DMX) 関数の結果を解釈するには、これらの違いを理解する必要があります。 EM と K 平均クラスタリングの違いの詳細については、「 Microsoft クラスタリング アルゴリズムテクニカル リファレンス」を参照してください。
関数リスト
すべての Microsoft アルゴリズムでは、共通の関数セットがサポートされています。 ただし、Microsoft クラスタリング アルゴリズムを使用して構築されたモデルでは、次の表に示す追加の関数がサポートされています。
予測関数 | 使用方法 |
クラスター (DMX) | 入力ケースを含む可能性が最も高いクラスターを返します。 |
ClusterDistance (DMX) | 指定したクラスターからの入力ケースの距離、またはクラスターが指定されていない場合は、最も可能性の高いクラスターからの入力ケースの距離を返します。 入力ケースが指定したクラスターに属している確率を返します。 |
ClusterProbability (DMX) | 入力ケースが指定したクラスターに属している確率を返します。 |
IsDescendant (DMX) | 1 つのノードがモデル内の別のノードの子であるかどうかを判断します。 |
IsInNode (DMX) | 指定したノードに現在のケースが含まれているかどうかを示します。 |
PredictAdjustedProbability (DMX) | 加重確率を返します。 |
PredictAssociation (DMX) | 連想データセットのメンバーシップを予測します。 |
PredictCaseLikelihood (DMX) | 入力ケースが既存のモデルに収まる可能性を返します。 |
PredictHistogram (DMX) | 現在の予測値に関連する値のテーブルを返します。 |
PredictNodeId (DMX) | 各ケースのNode_IDを返します。 |
PredictProbability (DMX) | 予測値の確率を返します。 |
PredictStdev (DMX) | 指定した列の予測標準偏差を返します。 |
PredictSupport (DMX) | 指定した状態のサポート値を返します。 |
PredictVariance (DMX) | 指定した列の分散を返します。 |
特定の関数の構文については、「 データ マイニング拡張機能 (DMX) 関数リファレンス」を参照してください。
こちらもご覧ください
データ マイニング クエリ
Microsoft クラスタリング アルゴリズムテクニカル リファレンス
Microsoft クラスタリング アルゴリズム