次の方法で共有


クラスター モデルのクエリ (Analysis Services - データ マイニング)

データ マイニング モデルに対するクエリを作成すると、モデルに関するメタデータを取得できます。また、分析で検出されたパターンに関する詳細を取得するためのコンテンツ クエリも作成できます。 モデル内のパターンを使用して新しいデータの予測を行う予測クエリを作成することもできます。 取得できる情報は、クエリの種類によって異なります。 たとえばコンテンツ クエリを使用すると、検出されたクラスターに関する追加情報を取得できるのに対し、予測クエリを使用すると、新しいデータ ポイントが所属する可能性が高いクラスターを調べることができます。

ここでは、Microsoft クラスタリング アルゴリズムに基づいたモデルに対するクエリの作成方法について説明します。

コンテンツ クエリ

DMX を使用してモデル メタデータを取得する

スキーマ行セットからモデル メタデータを取得する

クラスター、またはクラスターの一覧を返す

クラスターの属性を返す

システム ストアド プロシージャを使用してクラスターのプロファイルを返す

クラスターの識別要因を見つける

クラスターに属するケースを返す

予測クエリ

クラスター モデルの結果を予測する

クラスター メンバーシップを確認する

すべての可能なクラスターを確率および距離と共に返す

クラスター モデルに関する情報の入手

すべてのマイニング モデルでは、アルゴリズムによる学習内容が、標準化されたスキーマ (マイニング モデル スキーマ行セット) に従って公開されます。 マイニング モデル スキーマ行セットに対するクエリは、データ マイニング拡張機能 (DMX) ステートメントを使用して作成できます。 SQL Server 2008 では、スキーマ行セットに対して直接、システム テーブルとしてクエリを実行することもできます。

サンプル クエリ 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
注意注意

CHILDREN_CARDINALITY という列名は、多次元式 (MDX) の同名の予約済みキーワードと区別するために角かっこで囲む必要があります。

例の結果を次に示します。

MODEL_CATALOG

TM_Clustering

MODEL_NAME

Adventure Works DW

NODE_CAPTION

Cluster Model

NODE_SUPPORT

12939

CHILDREN_CARDINALITY

10

NODE_DESCRIPTION

All

クラスター モデルにおけるこれらの列の意味については、「クラスタ モデルのマイニング モデル コンテンツ (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_Clustering

DATE_CREATED

10/12/2007 7:42:51 PM

LAST_PROCESSED

10/12/2007 8:09:54 PM

PREDICTION_ENTITY

Bike Buyer

MINING_PARAMETERS

CLUSTER_COUNT=10,

CLUSTER_SEED=0,

CLUSTERING_METHOD=1,

MAXIMUM_INPUT_ATTRIBUTES=255,

MAXIMUM_STATES=100,

MINIMUM_SUPPORT=1,

MODELLING_CARDINALITY=10,

SAMPLE_SIZE=50000,

STOPPING_TOLERANCE=10

トップに戻る

クラスターに関する情報の入手

一般に、クラスター モデルに対する最も便利なコンテンツ クエリでは、クラスター ビューアーを使用して参照できるのと同じ種類の情報が返されます。 こうした情報には、クラスターのプロファイル、クラスターの特性、クラスターの識別などがあります。 ここでは、この情報を取得するクエリの例を紹介します。

サンプル クエリ 3 : クラスターまたはクラスターのリストを取得する

すべてのクラスターはノードの種類が 5 であるため、モデル コンテンツに対してその種類のノードのみのクエリを実行することによって、簡単にクラスターのリストを取得できます。 この例のように、返されるノードを確率やサポートでフィルター処理することもできます。

SELECT NODE_NAME, NODE_CAPTION ,NODE_SUPPORT, NODE_DESCRIPTION
FROM TM_Clustering.CONTENT
WHERE NODE_TYPE = 5 AND NODE_SUPPORT > 1000

例の結果を次に示します。

NODE_NAME

002

NODE_CAPTION

Cluster 2

NODE_SUPPORT

1649

NODE_DESCRIPTION

English Education=Graduate Degree , 32 <=Age <=48 , Number Cars Owned=0 , 35964.0771121808 <=Yearly Income <=97407.7163393957 , English Occupation=Professional , Commute Distance=2-5 Miles , Region=North America , Bike Buyer=1 , Number Children At Home=0 , Number Cars Owned=1 , Commute Distance=0-1 Miles , English Education=Bachelors , Total Children=1 , Number Children At Home=2 , English Occupation=Skilled Manual , Marital Status=S , Total Children=0 , House Owner Flag=0 , Gender=F , Total Children=2 , Region=Pacific

クラスターを定義する属性は、データ マイニング スキーマ行セットの 2 つの列に含まれています。

  • NODE_DESCRIPTION 列には、属性のコンマ区切りのリストが含まれています。 この属性のリストは、表示のために省略されることもあります。

  • NODE_DISTRIBUTION 列の入れ子になったテーブルには、クラスターのすべての属性のリストが含まれています。 使用しているクライアントで階層的な行セットがサポートされていない場合は、SELECT 列リストの前に FLATTENED キーワードを追加することによって、入れ子になったテーブルを返すことができます。 FLATTENED キーワードの使用方法の詳細については、「SELECT FROM <model>.CONTENT (DMX)」を参照してください。

トップに戻る

サンプル クエリ 4 : クラスターの属性を取得する

クラスター ビューアーには、すべてのクラスターについて、属性とその値の一覧を含むプロファイルが表示されます。 そのほか、モデル内のケースの母集団全体の値の分布を示すヒストグラムも表示されます。 ビューアーでモデルを参照する場合は、このヒストグラムをマイニング凡例からコピーして、簡単に Excel や Word のドキュメントに貼り付けることができます。 また、ビューアーの [クラスターの特性] ペインを使用して、異なるクラスターの属性をグラフィカルに比較することもできます。

ただし、一度に複数のクラスターの値を取得する必要がある場合は、モデルに対してクエリを実行する方が簡単です。 たとえば、モデルを参照していて、上位 2 つのクラスターは 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 行目では、入れ子になったテーブル列の特定の列のみを返す下位選択ステートメントを追加しています。 さらに、入れ子になったテーブルの行を、対象の属性 (Number Cars Owned) に関連する行のみに制限しています。 また、表示を簡略化するために、入れ子になったテーブルに別名を付けています。

注意注意

入れ子になったテーブル列である PROBABILITY は、MDX の予約済みキーワードと同じ名前であるため、角かっこで囲む必要があります。

例の結果を次に示します。

NODE_NAME

T.ATTRIBUTE_VALUE

T.PROBABILITY

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)

例の結果を次に示します。

Attributes

Values

Frequency

Support

Number Children at Home

0

0.999999829076798

899

Region

North America

0.999852875241508

899

Total Children

0

0.993860958572323

893

注意注意

データ マイニング システム ストアド プロシージャは内部で使用するためのものであり、Microsoft では、これらを必要に応じて変更する場合があります。 実際の運用では、DMX、AMO、または XMLA を使用してクエリを作成することをお勧めします。

トップに戻る

サンプル クエリ 6 : クラスターの識別要因を取得する

クラスター ビューアー[クラスターの識別] タブを使用すると、クラスターを簡単に別のクラスターと比較したり、他のすべてのケース (そのクラスターを除く全クラスター) と比較したりできます。

一方、この情報を返すクエリを作成するのは簡単ではなく、一時的な結果を格納して複数のクエリの結果を比較する追加の処理がクライアント側で必要になる場合があります。 より簡単な方法として、システム ストアド プロシージャを使用できます。

次のクエリは、ノード ID が 009 と 007 の 2 つのクラスターの主な識別要因を示す 1 つのテーブルを返します。 正の値を持つ属性ではクラスター 009 が優先され、負の値を持つ属性ではクラスター 007 が優先されます。

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterDiscrimination('TM_Clustering','009','007',0.0005,true)

例の結果を次に示します。

Attributes

Values

Score

Region

North America

100

English Occupation

Skilled Manual

94.9003803898654

Region

Europe

-72.5041051379789

English Occupation

Manual

-69.6503163202722

この情報は、[クラスターの識別] タブの 1 つ目のドロップダウン リストでクラスター 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 の実装では、クラスター メンバーシップに関する予測を行って、その予測に関連する確率を取得することもできます。 ここでは、クラスター モデルに対する予測クエリを作成する方法の例を紹介します。 表形式のデータ ソースを指定して複数のケースの予測を行うことも、単一クエリを作成して一度に 1 つずつ新しい値を渡すこともできます。 このセクションの例は、わかりやすくするためにすべて単一クエリになっています。

DMX を使用して予測クエリを作成する方法の詳細については、「DMX 予測クエリの作成」を参照してください。

BI Development Studio のグラフィカル ツールを使用して予測クエリを作成する方法については、「[マイニング モデル予測] タブ : 操作方法に関するトピック」を参照してください。

トップに戻る

サンプル クエリ 8 : クラスター モデルの結果を予測する

作成したクラスター モデルに予測可能な属性が含まれている場合は、そのモデルを使用して結果に関する予測を行うことができます。 ただし、予測可能列を Predict に設定するか PredictOnly に設定するかによって、モデルによる予測可能な属性の処理方法が異なります。 列の使用法を Predict に設定すると、その属性の値がクラスター モデルに追加され、完成したモデルに属性として表示されます。 一方、列の使用法を PredictOnly に設定すると、その値はクラスターの作成には使用されません。 代わりに、モデルが完成した後に、各ケースが属するクラスターに基づいて PredictOnly 属性の新しい値がクラスタリング アルゴリズムによって作成されます。

次のクエリでは、モデルに新しいケースを 1 つ渡しています。このケースに関する情報は Age と Gender だけです。 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 に設定した場合の結果の例を次に示します。

Bike Buyer

Expression

1

0.592924735740338

使用法を PredictOnly に設定し、モデルを再処理した場合の結果の例を次に示します。

Bike Buyer

Expression

1

0.55843544003102

この例ではモデルに大きな違いはありませんが、 値の実際の分布とモデルの予測との違いを検出することが重要になる場合もあります。 そのような場合は、PredictCaseLikelihood (DMX) 関数を使用できます。この関数は、特定のモデルについてケースの確率を返します。

PredictCaseLikelihood 関数によって返される数値は確率であるため、常に 0 と 1 の間になります。値 0.5 はランダムな結果を表します。 したがって、スコアが 0.5 より小さい場合は、予測されたケースがそのモデルではあり得そうにないことを示し、0.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

例の結果を次に示します。

NormalizedValue

NonNormalizedValue

5.56438372679893E-11

8.65459953145182E-68

これらの結果の数値は科学的表記法で表されています。

トップに戻る

サンプル クエリ 9 : クラスター メンバーシップを確認する

この例では、Cluster (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

Expression

Cluster 2

0.397918596951617

   既定では、ClusterProbability 関数は最も可能性の高いクラスターの確率を返します。 ただし、ClusterProbability('cluster name') という構文を使用して別のクラスターを指定することもできます。 その場合は、この 2 つの予測関数の結果は互いに無関係であるため、 2 番目の列の確率スコアが、1 番目の列のクラスターとは別のクラスターのものになる場合もあることに注意してください。

トップに戻る

サンプル クエリ 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])
AS t

Expression.$CLUSTER

Expression.$DISTANCE

Expression.$PROBABILITY

Cluster 2

0.602081403048383

0.397918596951617

Cluster 10

0.719691686785675

0.280308313214325

Cluster 4

0.867772590378791

0.132227409621209

Cluster 5

0.931039872200985

0.0689601277990149

Cluster 3

0.942359230072167

0.0576407699278328

Cluster 6

0.958973668972756

0.0410263310272437

Cluster 7

0.979081275926724

0.0209187240732763

Cluster 1

0.999169044818624

0.000830955181376364

Cluster 9

0.999831227795894

0.000168772204105754

Cluster 8

1

0

既定では、結果は確率で順位付けされます。 この結果から、Cluster 2 は、確率はかなり低いとはいえ、新しいデータ ポイントに最適なクラスターであることがわかります。

   追加の列の $DISTANCE は、データ ポイントからクラスターまでの距離を表します。 Microsoft クラスタリング アルゴリズムでは、既定でスケーラブル EM クラスタリングが使用されます。スケーラブル EM クラスタリングでは、各データ ポイントに複数のクラスターが割り当てられて、可能なクラスターが順位付けされます。 一方、K-Means アルゴリズムを使用してクラスター モデルを作成した場合は、各データ ポイントに 1 つしかクラスターを割り当てることができないため、このクエリで返される行は 1 行だけになります。 PredictCaseLikelihood (DMX) 関数の結果を解釈するためには、こうした違いを把握している必要があります。 EM クラスタリングと K-Means クラスタリングの相違点の詳細については、「Microsoft クラスタリング アルゴリズム テクニカル リファレンス」を参照してください。

トップに戻る

関数一覧

すべての Microsoft アルゴリズムでは、共通の関数セットがサポートされています。 ただし、Microsoft クラスタリング アルゴリズムを使用して作成されたモデルでは、次の表のような追加の関数がサポートされています。

Microsoft のすべてのモデルの種類に共通の関数の一覧については、「アルゴリズム リファレンス (Analysis Services - データ マイニング)」を参照してください。 特定の関数の構文については、「データ マイニング拡張機能 (DMX) 関数リファレンス」を参照してください。

変更履歴

変更内容

+サンプル クエリ 4、5、および 10 のコード サンプルの構文エラーを修正しました。

クエリ サンプルに簡単に移動できるようにトピック内のリンクを追加しました。