印刷用ページ       送信     
クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
SQL Server
SQL Server 2005 Technical Articles
 SQL Server データ マイニング : プラグイン アルゴリズム

  低帯域幅での表示をオンにする
Microsoft SQL Server 2005
SQL Server データ マイニング : プラグイン アルゴリズム

Raman Iyer, Bogdan Crivat

July 2004
日本語版最終更新日 2005 年 3 月 29 日

適用対象:
   Microsoft® SQL Server™ 2005 Analysis Services

注意: ここに記載された情報は暫定版であり、予告なしに変更されることがあります。この資料は、Microsoft® SQL Server™ 2005 Analysis Services の今後のベータ版および最終リリースで更新される予定です。更新される資料には、今後のインターフェイスの変更と共に、追加情報も含めることになるでしょう。

概要: SQL Server 2005 データ マイニングがアルゴリズム レベルで直接集計を可能にする方法について説明します。これは、言語とデータ型という点に関しては、サード パーティのアルゴリズム開発者がサポートできる内容を制限しますが、開発者は、中核となるデータ マイニング アルゴリズムの実装の上位に、データ処理、解析、メタデータの管理、セッション、および行セット生成コードを実装する必要がなくなります。

このドキュメントに記載されている情報は、このドキュメントの発行時点におけるマイクロソフトの見解を反映したものです。変化する市場状況に対応する必要があるため、このドキュメントは、マイクロソフトの確約とはみなされないものとします。 また、発行以降に発表される情報の正確性に関して、マイクロソフトはいかなる保証もいたしません。

このホワイト ペーパーは情報提供のみを目的としています。明示または黙示に関わらず、このドキュメントの情報についてマイクロソフトはいかなる責任も負わないものとします。

お客様ご自身の責任において、適用されるすべての著作権関連法規に従ったご使用を願います。このドキュメントのいかなる部分も、米国 Microsoft Corporation の書面による許諾を受けることなく、その目的を問わず、どのような形態であっても、複製または譲渡することは禁じられています。ここでいう形態とは、複写や記録など、電子的な、または物理的なすべての手段を含みます。ただしこれは、著作権法上のお客様の権利を制限するものではありません。

マイクロソフトは、このドキュメントに記載されている内容に関し、特許、特許申請、商標、著作権、またはその他の無体財産権を有する場合があります。別途マイクロソフトのライセンス契約上に明示の規定のない限り、このドキュメントはこれらの特許、商標、著作権、またはその他の無体財産権に関する権利をお客様に許諾するものではありません。

© 2004 Microsoft Corporation. All rights reserved.

Microsoft および Windows は、米国 Microsoft Corporation の米国およびその他の国における登録商標です。

記載されている会社名、製品名には、各社の商標のものもあります。

目次

概要
必要条件
アーキテクチャ

概要

Microsoft® SQL Server™ Analysis Services 2000 Service Pack 1 (SP1) では、Analysis Server でサード パーティ製の OLE DB for Data Mining プロバイダのプラグイン ("集計") が許可されます。この集計は OLE DB レベルなので、SQL Server 2000 SP1 を使用しているサード パーティのアルゴリズム開発者は、中核となるデータ マイニング アルゴリズムの実装の上位に、すべてのデータ処理、解析、メタデータの管理、セッション、および行セット生成コードを実装する必要がありました。

これとは対照的に、SQL Server 2005 データ マイニングでは、アルゴリズム レベルで直接集計が行えます。これは、言語とデータ型という点に関しては、サード パーティのアルゴリズム開発者がサポートできる内容が制限されますが、開発者は上記の追加の層をすべて実装する必要がなくなりました。また、OLAP マイニング モデルやデータ マイニング ディメンションを構築する機能を含めて、Analysis Services とのより密接な統合が可能になります。ここでは "プラグイン アルゴリズム" という用語を使用して、SQL Server 2005 分析サーバー (以後、"分析サーバー" といいます) にプラグインされ、ユーザーにはあらゆる点でネイティブ アルゴリズムのように表示されるサード パーティ アルゴリズムについて説明します。

必要条件

分析サーバーは、一連の COM インターフェイスを経由してサード パーティのアルゴリズム プロバイダと通信します。この資料では、これらのインターフェイスを、アルゴリズム プロバイダが実装すべきインターフェイスと、分析サーバー オブジェクトによって実装され、アルゴリズム プロバイダが利用するインターフェイスの 2 種類に分類します。

アルゴリズム プロバイダが実装するインターフェイス

メソッド定義とパラメータの説明が提供されます。これらのインターフェイスのメソッド定義については、dmalgo.h を参照してください。

IDMAlgorithmFactory

このインターフェイスは、プラグイン アルゴリズム プロバイダへのエントリ ポイントです。分析サーバーでは、アルゴリズム プロバイダのインスタンスを作成するときにこのインターフェイスが要求されます。また、このインターフェイスを使用して、サーバー領域の対応するマイニング モデルにバインドされる新しいアルゴリズムのインスタンスが作成されます。また、IDMAlgorithmFactory を、以下で説明する IDMAlgorithmMetadata インターフェイスにクエリすることもできます。

IDMAlgorithmMetadata

このインターフェイスは、分析サーバーによって使用され、アルゴリズム プロバイダの機能を問い合わせます。このような問い合わせには、属性セットの検証などがあります。

IDMAlgorithm

このインターフェイスは、学習、予測、参照など、アルゴリズム インスタンスのさまざまな機能にアクセスできるようにする、中核となるアルゴリズム インターフェイスです。

IDMCaseProcessor

このインターフェイスによって、学習用のアルゴリズム プロバイダに書式化されたケースが提供されます。

IDMAlgorithmNavigation :IDMDAGNavigation

このインターフェイスによって、学習済みのモデルのアルゴリズム コンテンツが分析サーバーに参照用に公開されます。

IDMPullCaseSet

このインターフェイスは、サンプル ケースを生成するために、分析サーバーによって使用されます。

IDMPersist

分析サーバーはこのインターフェイスを呼び出して、サーバーによって提供されたストリームに、アルゴリズム固有のコンテンツを読み込み、保存します。

IDMCaseIDIterator

アルゴリズム プロバイダは、ケースの生成をフィルタ処理および制御するために、このインターフェイスを実装できます。

IDMMarginalStat

限界統計は、予測クエリの処理中に、分析サーバーで必要になります。限界統計は、ケースの生成中に分析サーバーによって、または学習中にアルゴリズム プロバイダ自身によって収集されます。アルゴリズム プロバイダから、(IDMAlgorithmMetadata インターフェイスのメソッドにより) 統計がアルゴリズムによって収集され、公開されることが示される場合、プロバイダはこのインターフェイスをサポートする必要があります。それ以外の場合、分析サーバーはこのインターフェイスの独自の実装でアルゴリズムを初期化します。アルゴリズムが内部で分析サーバーの IDMMarginalStats の実装を使用していない場合でも、アルゴリズムにクエリされたとき、このインターフェイスを保存し、返す必要があります。

IDMClusteringAlgorithm

Clustering アルゴリズムは、オプションでこのインターフェイスをサポートできるので、分析サーバーのクエリ プロセッサは Cluster() などの、アルゴリズム固有の関数を呼び出すクエリの結果を適切に返すことができます。

IDMSequenceAlgorithm

Sequence Clustering アルゴリズムは、オプションでこのインターフェイスをサポートできるので、分析サーバーのクエリ プロセッサは Sequence() などの、アルゴリズム固有の関数を呼び出すクエリの結果を適切に返すことができます。

IDMTimeSeriesAlgorithm

Sequence Clustering アルゴリズムは、オプションでこのインターフェイスをサポートできるので、分析サーバーのクエリ プロセッサは Time() などの、アルゴリズム固有の関数を呼び出すクエリの結果を適切に返すことができます。

IDMCustomFunctionInfo

プラグイン アルゴリズムは、カスタム関数をサポートすることができます。このような機能のメタデータは、アルゴリズムのメタデータ オブジェクトから取得できるこのインターフェイスを使用して、プラグイン アルゴリズムによって公開されます。

IDMDispatch

プラグイン アルゴリズムによってカスタム関数がサポートされている場合、および IDMCustomFunctionInfo メタデータ インターフェイスを使用してカスタム関数のメタデータが公開されている場合、プラグイン アルゴリズムはそのアルゴリズム オブジェクトの IDMDispatch インターフェイスもサポートし、分析サーバーがこれらの関数を呼び出せるようにする必要があります。

IDMTableResult

カスタム関数によってテーブルの結果が返される場合、カスタム関数は IDMTableResults インターフェイス ポインタとして返される必要があります。このインターフェイスによって、分析サーバーは (前方参照のみの手法で) 結果を移動し、データ行をフェッチすることができます。

アルゴリズム プロバイダによって利用されるインターフェイス

メソッド定義とパラメータの説明が提供されます。これらのインターフェイスのメソッド定義については、dmalgo.h を参照してください。

IDMPushCaseSet

このインターフェイスを使用して、分析サーバーとアルゴリズム インスタンス間でケース処理の情報が渡されます。

IDMAttributeset

このインターフェイスによって、入力ケースに含まれる属性に関する情報がカプセル化されます。

IDMAttributeGroup

特定の条件 (たとえば、関連する属性または入れ子になったテーブル) に基づいて、属性をグループ化できます。IDMAttributeGroup によって、このような属性のグループを繰り返す方法が提供されます。

IDMPersistenceWriter

これは、アルゴリズムがコンテンツを保存できるストリームの抽象インターフェイスです。ストリームは、アルゴリズムの親マイニング モデルの独自のストレージ システム上に、分析サーバーによって実装され、IDMPersist::Save メソッドのアルゴリズムに渡されます。

IDMPersistenceReader

これは、アルゴリズムが以前に保存したコンテンツを読み込めるストリームの抽象インターフェイスです。ストリームは、アルゴリズムの親マイニング モデルの独自のストレージ システム上に、分析サーバーによって実装され、IDMPersist::Load メソッドのアルゴリズムに渡されます。

IDMServices

これは、サーバー領域からアルゴリズムに共有情報を渡す、基本インターフェイスです。このインターフェイスによって、メモリ アロケータ、文字列やバリアントの処理、ファイルへの保存、トランザクションのようなサービスが公開されます。このインターフェイスがコンテキスト オブジェクトでどのように使用されるかについては、「DMContext オブジェクト」(セクション 2.5) を参照してください。

IDMContextServices

これは、分析サーバーからのほとんどのアルゴリズム呼び出しが渡されるコンテキスト インターフェイスです。このインターフェイスは、上記で説明した IDMServices から派生されており、ロケール、メモリ アロケータ、および現在の要求固有のその他の情報へのアクセスを提供します。

IDMModelServices

これは、アルゴリズム インスタンスが作成されるときに渡されるコンテキスト インターフェイスです。このインターフェイスは、有効期間がサーバー モデル オブジェクトに関連付けられているアロケータと同様に、モデル固有の情報にアクセスするために使用されます。これには、以下の操作を行うメソッドが含まれています。

  • モデルのロケール情報の取得
  • 進行状況通知の起動
  • 更新されたノード キャプションのモデルのコンテンツ マップの取得
  • PMML コンテンツの解析とレンダリング

IDMMemoryAllocator

プラグイン アルゴリズムは、このインターフェイスによって、サーバーのメモリ領域内のメモリの割り当てと解放を行えます。詳細については、「メモリ管理」(セクション 2.3) を参照してください。

IDMStringHandler

このインターフェイスによって、分析サーバーの内部文字列データ型にアクセスできます。アルゴリズム メソッドに渡されるサーバーの文字列へのポインタは、IDMStringHandler メソッドによってデコードできるあいまいなハンドルとして扱われます。このインターフェイスの使用方法に関する詳細については、「共有データ型へのアクセス」(セクション 2.4) を参照してください。

IDMVariantPtrHandler

このインターフェイスによって、分析サーバーの内部バリアント データ型にアクセスできます。アルゴリズム メソッドに渡されるサーバーのバリアントへのポインタは、IDMVariantHandler メソッドによってデコードできるあいまいなハンドルとして扱われます。このインターフェイスの使用方法に関する詳細については、「共有データ型へのアクセス」(セクション 2.4) を参照してください。

IDMContentMap

このインターフェイスによって、アルゴリズムに代わって、分析サーバー フレームワークによって管理されている、アルゴリズム コンテンツの更新可能な部分にアクセスできます。現在、このインターフェイスには、ユーザーが DMX を使用して更新できるノードのキャプションが含まれています。アルゴリズム ナビゲータがこのインターフェイスをどのように使用する必要があるかの詳細については、「ユーザーが更新可能なアルゴリズム コンテンツ」を参照してください。

メモリ管理

アルゴリズム プロバイダは、分析サーバーのメモリ アロケーション インターフェイスを使用する必要があり、メモリ クォータ インターフェイスを使用してメモリを予約する必要があります。Aggregator アルゴリズムは、割り当てられたオブジェクトの有効期間に応じて、コンテキスト サービスまたはモデル サービスのいずれかからメモリ アロケータを使用する必要があります。分析サーバーでメモリを効果的に管理し、制御できるようにするには、プラグイン アルゴリズム プロバイダのすべてのメモリ割り当てが、これらのメモリ管理インターフェイスを使用して行われる必要があります。

共有データ型へのアクセス

以下の内部のサーバー型が、プラグイン アルゴリズム プロバイダの実装者に公開されます。

  • String (ハンドルとして、DMString)
  • Variant (ハンドルとして、DMVariantPtr)
  • XMLWriter (ハンドルとして、DMXMLWriterPtr)
  • MiningFunctionsInfo (ハンドルとして、DMFunctionRecPtr)
  • ExecutionContext (「DMContext オブジェクト」セクションで個別に説明しています)

DMString と DMVariantPtr

DMString と DMVariant は、さまざまなインターフェイスで使用され、文字列または値をサーバー コードに渡し、文字列または値をサーバーからフェッチします。

プラグイン アルゴリズムは、IDMStringHandler と IDMVariantPtrHandler の 2 つのインターフェイスを使用して、文字列およびバリアント ハンドルを操作します。

これらのインターフェイスは、スレッドセーフでステートレスです。このため、キャッシュすることができます。

これらのインターフェイス (ハンドラ) の実装は、初期化時およびコンテキストから IDMServices 経由で取得できます。

注意:  コンテキストから取得されたサービスは、すべて、コンテキストのメモリに割り当てられます。このため、プラグイン アルゴリズムの領域内部でコンテキスト ハンドルを返す関数が終了する前にメモリを解放する必要があります。

ハンドラによって使用される一連のメモリ アロケータは、ハンドラが取得された方法によって決定されます。同様に、文字列やバリアントの処理で使用されるメモリ アロケータは、ハンドラによって決定されます。

以下に例を示します。

  • ハンドラは Initialize に渡された IDMServices ポインタ (つまり、モデルのサービス プロバイダ) から取得されます。そのハンドラによって実行されるすべての操作は、モデルのアロケータを使用します。このため、このアロケータを使用して作成された文字列ハンドルは、呼び出し間で安全にキャッシュできます。
  • ハンドラは実行コンテキストの IDMServices (つまり、実行コンテキストのサービス プロバイダ) から取得されます。そのハンドラによって実行されるすべての操作は、実行コンテキストのアロケータを使用します。このため、このアロケータを使用して作成された文字列ハンドルは、呼び出し間で安全にキャッシュできません。
IDMStringHandler のメソッド
HRESULT   CreateNewHandle(DMString**   out_phString)

後にアルゴリズムの領域内部で使用できる新しい文字列ハンドルを作成します。out_phString パラメータは、新しく作成された文字列ハンドラを格納する場所です。

HRESULT   CopyHandleToBuffer(DMString*   in_hString, 
	WCHAR*   out_pchBuff,
	UINT*      io_pcAllocated)

文字列ハンドルのコンテンツを char バッファにコピーします。このメソッドは、プラットフォーム SDK の関数のように動作します。つまり、io_pcAllocated にはエラーの発生時には必要なサイズ (提供されたバッファ サイズが要求されたサイズよりも小さい場合)、関数が適切に動作した場合は実際のサイズが含まれます。

HRESULT   CopyBufferToHandler(DMString*   in_hString, 
	WCHAR*   in_pchBuff,
	UINT      in_pcLength)

バッファのコンテンツを文字列ハンドルにコピーします。

HRESULT   GetConstStringFromHandle(DMString*   in_hString, 
	const WCHAR**   out_ppchBuff)

パフォーマンスを向上するために、ユーザーが用意したバッファにコピーする代わりに、ハンドルに含まれる内部文字列バッファへのconst ポインタを返します。

HRESULT   AttachHandleToBSTR(DMString*   in_hString, 
	BSTR      in_bstrBuffer)

パフォーマンスを向上するために、入力 BSTR にハンドルをアタッチします。これにより、コピーの時間が短縮されます。in_bstrBuffer の有効期間は、この関数から返された後、in_hString で制御されます。

HRESULT   CopyHandleToHandle(DMString*   in_hString, 
	DMString*   out_hString)

ある文字列ハンドルから別の文字列ハンドルに文字列をコピーします。

IDMVariantPtrHandler のメソッド
HRESULT   CreateNewHandle(DMVariantPtr**   out_phVariant)

後にアルゴリズムの領域内で使用できる新しいバリアント ハンドルを作成します。out_phVariant パラメータは、新しく作成されたバリアント ハンドラを格納する場所です。

HRESULT   CopyVariantToHandle(DMVariantPtr*   in_hVariant, 
	VARIANT*   in_pVar)

入力バリアントをハンドル バリアントにコピーします。

HRESULT   GetVariantCopyFromHandle(
	DMVariantPtr*   in_hVariant, 
	VARIANT*      out_pVar)

ハンドル バリアントを out_pVar の場所にコピーします。

HRESULT   DetachHandleVariant(DMVariantPtr*   in_hVariant, 
	VARIANT*   out_pVar)

ハンドル バリアントをデタッチし、デタッチしたバリアントのアドレスを返します。これは、GetVariantCopyFromHandle のパフォーマンスが高いバージョンで、明示的なコピーが必要ではないところで使用できます。

HRESULT   AttachHandleVariant(DMVariantPtr*   in_hVariant, 
	VARIANT*      out_pVar)

ハンドル バリアントをアタッチします。これは、CopyVariantToHandle のパフォーマンスが高いバージョンで、明示的なコピーが必要ではないところで使用できます。

DMContext オブジェクト

DMContext オブジェクトには、ロケールやモデル アクセスなど、現在実行中の要求に関する情報が含まれています。DMContext オブジェクトは、IDMServices から継承されたインターフェイス (IDMContextServices) として公開されます。

サービス プロバイダ アーキテクチャ

プラグイン アルゴリズムは、IDMServices メカニズムを経由してサーバー コンポーネントにアクセスします。

プラグイン アルゴリズムは、ほとんどの場合、2 つの異なるサービス プロバイダを利用できます。

  • モデル サービス プロバイダ は、分析サーバー マイニング モデル オブジェクトによって論理的に所有されます。このモデル サービス プロバイダによって、以下のサービスへのアクセスが提供されます。
    • 呼び出し間に存在するオブジェクト (たとえば、アルゴリズムと同じ有効期間のオブジェクト) を作成するために使用できる、モデルごとのアロケータ
    • モデルの名前やロケールなどの、モデルの情報
    • 進行状況通知
    • PMML のレンダリングと解析
  • コンテキスト サービス プロバイダ は、分析サーバーの要求または "実行コンテキスト" によって論理的に所有されます。このコンテキスト サービス プロバイダによって、以下のサービスへのアクセスが提供されます。
    • 現在のコンテキストの有効期間内のみ存在するオブジェクトを作成するために使用できるコンテキスト (EC ごとの) アロケータ
    • ロケール情報
    • メモリの推定を更新するメソッド
    • キャンセル状態のポーリング
    プラグイン アルゴリズムは、モデル サービス プロバイダを IDMAlgorithm::Initialize メソッドのパラメータとして受け取ります。モデル サービス プロバイダ (および、これによって取得されるサービス) は、アルゴリズムの有効期間内 (アンロードされるか、破棄されるまで) は安全にキャッシュできます。

モデル サービス プロバイダによって公開される各サービスは、スレッドセーフにするかどうかがドキュメント化されます。

共有定義と列挙値

これらは、データ型の定義と列挙値で、アルゴリズムにケースや属性情報を通知するために使用されます。

dmalgo.h ファイルには、DM_Attribute や DM_STATE_STAT などの、型と構造体が含まれています。説明が提供されます。

アルゴリズムの登録

分析サーバーのインスタンスに利用できる各データ マイニング アルゴリズムは、サーバーの INI ファイルにエントリがあります。これには、分析サーバーのネイティブ アルゴリズムとサード パーティ アルゴリズムの両方が含まれます。エントリには、以下の情報が含まれます。

  • アルゴリズム名 (Microsoft_Decision_Trees など)
  • ProgID (これは省略可能で、サード パーティ プロバイダのみに提供されます)
  • アルゴリズムが有効か無効かを示すフラグ

以下にサンプル プラグイン アルゴリズム プロバイダの "\Program Files\Microsoft SQL Server\MSSQL.1\OLAP\bin\msmdsrv.ini" にあるエントリを示します。

<ConfigurationSettings>
 
 <DataMining>
 
   <Algorithms>
 
    <Microsoft_Sample_PlugIn_Algorithm>
       <Enabled>1</Enabled>
       <ProgID>Microsoft.DataMining.SamplePlugInAlgorithm.Factory</ProgID>
    </Microsoft_Sample_PlugIn_Algorithm> 
 
   </Algorithms>
 
 </DataMining>
 
</ConfigurationSettings>

上記の構成エントリで、"Microsoft_Sample_PlugIn_Algorithm" は、サーバーに送信される DLL ステートメントのアルゴリズムを識別するために使用される名前です。分析サーバーでは、起動時にこの名前が IDMAlgorithmMetadata::GetServiceName() のアルゴリズムによって返されるアルゴリズム名と同じであることが確認されます。名前が一致しない場合、サーバーによってアルゴリズム プロバイダが読み込まれず、Microsoft® Windows® イベント ログにエラーが記録されます。

以前に作成したモデル インスタンスがユーザーによってアクセスされ、アルゴリズムが現在無効になっている場合、分析サーバーは要求に失敗し、モデルのアルゴリズムが現在のサーバー インスタンスで利用できないことが報告されます。

アルゴリズム コンテンツの保存

プラグイン アルゴリズムのコンテンツは、IDMPersist インターフェイスにより、サーバー モデルの領域に読み込まれて保存されます。このシリアル化メカニズムによって、プラグイン アルゴリズム インスタンスは、そのコンテンツを抽象ストリーム、つまり分析サーバーによって提供される IDMPersistenceWriter と IDMPersistenceWriter に保存および読み込むことができます。分析サーバーは、これらのインターフェイスを使用して、アルゴリズムのコンテンツをストアに対してトランザクションとして保存および読み込む役割があります。そのため、アルゴリズム コンテンツを部分的に読み込みおよび保存する場合に、発生する可能性がある処理エラーを心配する必要はありません。

アルゴリズム固有のモデリング フラグ

プラグイン アルゴリズムは、IDMAlgorithmMetadata メソッドを経由して情報を公開する、カスタム モデリング フラグをサポートできます。これらは、分析サーバーによって検証され、アルゴリズムに渡されます。

カスタム関数

プラグイン アルゴリズムは、OLE DB for DM 仕様の一部である標準関数に加え、カスタム関数もサポートできます。カスタム関数のメタデータは、IDMCustomFunctionInfo インターフェイスにより公開されます。この情報に基づいて、分析サーバーは解析、およびユーザーによって発行される DMX クエリ内のカスタム関数呼び出しのセマンティクスの検証を処理します。分析サーバーは、予測時間にアルゴリズムの IDMDispatch インターフェイスを取得し、PrepareFunction メソッドと InvokeFunction メソッドを呼び出します。これにより、カスタム関数を評価し、予測の結果内に含めるメタデータまたはデータを取得します。

分析サーバー フレームワークとプラグイン アルゴリズム間の制御フローは以下のとおりです。

  1. プラグイン アルゴリズムは、アルゴリズムのIDMAlgorithmMetadata::GetSupportedFunctions メソッドによって返されるサポート関数の一覧にカスタム関数を含めることで、カスタム関数をアドバタイズします。dmalgo.idl の DM_SUPPORTED_FUNCTION 列挙値には、OLE DB for DM 仕様で公開された既知の関数の列挙値の一覧があります。カスタム関数には、上記の DMSF_CUSTOM_FUNCTION_BASE 以降の列挙値を持つことになります。
  2. カスタム関数がプラグイン アルゴリズムの IDMAlgorithmMetadata::GetSupportedFunctions メソッドによって返される一覧に含まれている場合、分析サーバー フレームワークはプラグイン アルゴリズムの IDMCustomFunctionInfo インターフェイスの IDMAlgorithmMetadata インターフェイス (この場合はサポートされている必要があります) へのポインタをクエリし、MINING_FUNCTIONS スキーマ行セットに返すため、およびユーザーの DMX クエリでのカスタム関数の呼び出しの解析および検証を行うために使用できるメタデータ情報を取得します。メタデータ情報には、以下の内容が含まれています。
    1. シグニチャ
    2. 説明
    3. 関数がスカラ値またはテーブルのいずれを返すか
    4. 受け取るパラメータとフラグ
  3. カスタム関数を含む DMX 要求を受け取るときは、分析サーバー フレームワークは、プラグイン アルゴリズムのIDMDispatch インターフェイスの IDMAlgorithm インターフェイスへのポインタをクエリします。
  4. クエリの実行開始時 (バインド時) に IDMDispatch::PrepareFunction が一度呼び出され、結果の列メタデータを取得します。列情報はテーブル結果の配列になります。
  5. ケースごとに、IDMAlgorithm::Predict への予測呼び出しと共に、DMX クエリ内の各カスタム関数で IDMDispatch::InvokeFunction への呼び出しが行われます。

ユーザーが更新可能なアルゴリズム コンテンツ

分析サーバーでは、ユーザーが DMX UPDATE ステートメントを使用してアルゴリズム コンテンツの一部を更新できます。現在は、ノード キャプションのみを更新できます。プラグイン アルゴリズムは、モデル サービス オブジェクト (IDMModelServices::GetContentMap) から利用できる IDMContentMap インターフェイスにより、更新されたコンテンツにアクセスできます。分析サーバー フレームワークでは、プラグイン アルゴリズムのコンテンツ ナビゲータから DMNP_CAPTION プロパティが要求されたときに、適切な (更新された) ノード キャプションを返すために、モデル サービス オブジェクトのコンテンツ マップからキャプションをフェッチする必要があります。このコードは、以下に示すサンプルのようなコードです (簡単にするために、エラー処理コードを省略しています)。

// TODO : キャプション文字列を空文字列に初期化します
	CComPtr<IDMContentMap>	spContentMap;
m_spModelServices->GetContentMap(in_pContext, &spContentMap));
if (S_FALSE == spContentMap->IsEmpty())
{
		spContentMap->FindNodeCaption(&strNodeUniqueName,&pstrCaption));
		if (pstrCaption)
{
// TODO : キャプション文字列にコピーします
}
}
// TODO : 出力バリアントに文字列をコピーします

アーキテクチャ

ここでは、分析サーバーとアルゴリズム プロバイダ間のデータと制御の流れについて説明します。

サーバーの起動

分析サーバーは起動時に、登録済みで有効なすべてのプラグイン アルゴリズム プロバイダのインスタンスを作成し、IDMAlgorithmFactory インターフェイス ポインタをキャッシュします。

マイニング アルゴリズムの情報

サーバーは、MINING_SERVICES の Discover 要求に応答して、アルゴリズム プロバイダ (対応するキャッシュされた IDMAlgorithmFactory インターフェイスによって表されます) のアルゴリズム マネージャの一覧全体を繰り返し、IDMAlgorithmMetadata インターフェイス経由で関連する情報を取得します。

マイニング モデルの作成

マイニング モデルが作成されると、メタデータ オブジェクトがマイニング モデル用にサーバー内でインスタンスが作成され、ディスクに保存されます。この時点では、マイニング モデルに関連付けられたアルゴリズム インスタンスはありません。ただし、インスタンスは対応するアルゴリズム プロバイダの IDMAlgorithmMetadata インターフェイスから取得された情報に対して検証されます。

マイニング構造の処理

マイニング モデルの親マイニング構造が処理された後、サーバーによって作成された Attributeset オブジェクトがそれぞれの子モデルのアルゴリズム プロバイダに対して検証され、Attributeset がアルゴリズムによって利用できる形式であることが確認されます。これは、アルゴリズム プロバイダの IDMAlgorithmMetadata インターフェイスで ValidateAttributeset メソッドを呼び出すことで実現されます。

マイニング モデルの学習

処理中の要求がマイニング モデルのサーバーによって実行される場合、対応するアルゴリズム プロバイダの IDMAlgorithmFactory の CreateAlgorithm メソッドが呼び出され、モデルに関連付けられる新しいアルゴリズム インスタンスが作成されます。以下で説明するように、アルゴリズム インスタンスの IDMAlgorithm インターフェイスおよびアルゴリズム インスタンスから取得された関連するインターフェイスは、サーバーによって使用され、ケースを渡し、アルゴリズム インスタンスを学習し、インスタンスのコンテンツを保存します。

  1. アルゴリズム インスタンスは、まず、学習中にアルゴリズムによってクエリできる Attributeset オブジェクト (IDMAttributeSet) で初期化され、属性情報を取得し、オプションで限界統計オブジェクト (IDMMarginalStats) を取得します。
  2. その後、サーバーでは、IDMPushCaseSet パラメータを指定して IDMAlgorithm::InsertCases を呼び出すことで、学習を開始します。アルゴリズム プロバイダは、実際には IDMCaseProcessor インターフェイスを公開するコールバック オブジェクトを実装する必要があります。コールバック オブジェクトは InsertCases 要求に応答して、IDMPushCaseSet::StartCases を経由で分析サーバーに返されます。
  3. サーバーがアルゴリズムの CaseProcessor オブジェクトを受け取った後、サーバーはケースごとに CaseProcessor の ProcessCase メソッドを呼び出すことによって、CaseProcessor オブジェクトにケースをプッシュします。
  4. 学習の最後で、分析サーバーはアルゴリズムへの追加の呼び出しを行い、下記の「マイニング モデルのドリルスルー」(セクション3.9) で説明している Drillthrough ストアを構築できます。また、追加の呼び出しを行い、下記の「マイニング ディメンション」(セクション 3.10) で説明しているようにデータ マイニング ディメンションを構築することもできます。

マイニング モデルの予測

分析サーバーのクエリ プロセッサは、予測クエリに応答して、モデルのキャッシュされたアルゴリズム インターフェイス (IDMAlgorithm:Predict) の Predict メソッドを使用して、予測参加を評価します。カスタム関数呼び出しは、アルゴリズム プロバイダの IDMAlgorithmMetadata インターフェイスにより取得されたメタデータを使用して評価されます。IDMAlgorithmMetadata インターフェイスによって取得されたメタデータでは、プロバイダ固有の関数の呼び出し規約とパラメータについて説明されます。この情報は、後でプロバイダ固有の関数呼び出しを評価するときに使用されます。

マイニング モデルの参照

サーバーは、MINING_MODEL_CONTENT の Discover 要求に応答して、対応するモデルのキャッシュされたアルゴリズム インターフェイス IDMAlgorithm で呼び出しを使用して、IDMAlgorithmNavigation インターフェイスを公開するコンテンツ ナビゲーション オブジェクトを要求します。その後、サーバーはナビゲータによって公開されるグラフのノードを調べ、さまざまなプロパティを各ノードにクエリすることで、結果行セットを構築します。

マイニング モデルの保存

アルゴリズム インターフェイスの主要なインターフェイス IDMAlgorithm は、COM を使用して IDMPersist インターフェイスにクエリできます。このインターフェイスを使用して、アルゴリズム インスタンスを所有しているマイニング モデル オブジェクトのストレージ領域に対してアルゴリズム コンテンツの読み込みと保存が行われます。このストレージのバージョン管理とトランザクション更新は、分析サーバーによって管理されます。

マイニング モデルのドリルスルー

ユーザーは、マイニング モデルのコンテンツをビューアで参照している間は、コンテンツ グラフの特定のノードに属している基になるケースの表示を要求できます。アルゴリズムによってこの Drillthrough 操作がサポートされている場合、分析サーバーでは、学習ケースをコンテンツ グラフ内の対応するノードにマップするモデルに関連付けられた、内部データ構造体が構築されます。参照中に使用するためにこの構造体を構築するには、サーバーは学習の最後にケースごとに IDMAlgorithm::GetNodeIDs メソッドを使用します。

マイニング ディメンション

分析サーバーでは、ユーザーがマイニング モデルのコンテンツに基づいて、データ マイニング ディメンションを構築できます。このディメンションは、マイニング モデルが構築されたのと同じディメンションを使用する OLAP キューブに含めることができます。また、OLAP キューブの発見済みの階層を使用して、興味深い方法で実際のデータをスライスしたり、ダイスしたりできます。アルゴリズムでデータ マイニング ディメンションがサポートされていて、ユーザーがデータ マイニング ディメンションをモデルから作成することを要求した場合、分析サーバーでは、学習の最後に DIMENSION_CONTENT フラグを持つケースごとに IDMAlgorithm::GetNodeIDs メソッドを呼び出すことによって、この特別なディメンションが構築されます。

データ マイニング ディメンションの目的は通常のモデル参照を行うことですが、アルゴリズム プロバイダでは、これとは異なる形式でコンテンツを表示することを選択できることに注意してください。そのため、IDMAlgorithm::GetNodeIDs と IDMAlgorithm::GetNavigator の両方で、コンテンツ ノード情報がどのように使用されるかをサーバーが指定できるフラグがサポートされています。

サンプル ケースの生成

ユーザーが "SELECT * FROM model.CASES WHERE IsInNode(xxxx)" クエリを発行することによってサンプル ケース セットを要求すると、分析サーバーは、モデルのアルゴリズム インスタンスから IPullCaseSet インターフェイスを要求することで、このケース セットを取得します。サンプル ケース セットは、学習中に習得した属性値を使用して、アルゴリズムによって生成される、単なる仮想のケースのセットです。このセットは、コンテンツ グラフ内の特定のノードによって表されるルールに適合します。

PMML のインポートと生成

ユーザーは、PMML の形式でマイニング モデルのコンテンツを要求できます。Microsoft Analysis Services 2005 では、PMML 2.1 がサポートされています。要求は、"SELECT * FROM [Model].PMML" の形式になります。また、ユーザーはモデルが PMML 2.1 ドキュメントから読み込まれるように要求できます。構文は "CREATE MINING MODEL [ModelName] FROM PMML 'pmml here' " です。フレームワークは、PMML (データ辞書および、オプションでモデルの統計) 内の構造情報を管理します。それに対して、プラグイン アルゴリズムは、PMML のコンテンツ部分の解析とレンダリングを行う役割があります。

PMML 2.1 のレンダリングをサポートするプラグインは、IDMAlgorithm インターフェイスの RenderPMMLContent メソッドを実装する必要があります。このメソッドから E_NOTIMPL が返される場合、フレームワークは、プラグインでは PMML がサポートされていないと見なします。RenderPMMLContent は、ISAXContentHandler インターフェイスをパラメータとして受け取り、プラグインは、出力ストリームに書き込むために、このインターフェイスで XML イベントを生成する必要があります。PMML 2.1 標準には、モデルのコンテンツ要素の内部に、モデル統計とモデル スキーマが含まれています。プラグインは、フレームワークによって提供された IDMModelServices インターフェイスの RenderPMMLModelStatistics、RenderPMMLMiningSchema および RenderPMMLModelCreationFlags を呼び出すことによって、フレームワークへのこの情報のレンダリングを委任できます。

一般的に、PMML 2.1 ドキュメントのレンダリング操作は、以下の表に従って実行されます。

分析サーバー フレームワーク プラグイン アルゴリズム
コンテンツ ハンドラを作成し、PMML into3 をレンダリングします  
PMML 2.1 のレンダリングを開始します  
データ辞書をレンダリングします  
コンテンツのプラグインを呼び出します  
  RenderPMMLContent が、モデル コンテンツのレンダリングを開始します (アルゴリズム コンテンツを識別する XML 要素を開始します)
  統計をレンダリングするか、フレームワークを呼び出します
RenderPMMLModelStatistics が呼び出された場合、統計をレンダリング後、プラグインに制御を返します  
  マイニング スキーマをレンダリングするか、フレームワークを呼び出します
RenderPMMLMiningSchema が呼び出された場合、統計をレンダリング後、プラグインに制御を返します  
  モデル作成フラグ (マイクロソフトのPMML 2.1 への拡張で、PMML 2.1 の仕様に応じて開発されました) をレンダリングするか、フレームワークを呼び出します
RenderPMMLModelCreationFlags が呼び出された場合、統計をレンダリング後、プラグインに制御を返します  
  マイニング モデルの実際のコンテンツをレンダリングします
  アルゴリズム コンテンツを識別する XML 要素を閉じます (RenderPMMLContent 関数の最後)
PMML ドキュメントのレンダリングを終了します  

PMML 2.1 ストリームを読み取るため (および PMML 2.1 ドキュメントからマイニング モデルを作成するため)、プラグインは 2 つのメソッドを実装する必要があります。これらのいずれかのメソッドから E_NOTIMPL が返される場合、フレームワークは、プラグインでは PMML 2.1 の解析がサポートされていないと見なします。

PreInitializeForPMMLParsing によって、PMML を読み取るためのプラグインを準備できます。フレームワークは、PMML 2.1 の構造部分を解析し、その後、プラグインのこのメソッドを呼び出します。このとき、構造情報が含まれる削減された属性セットの実装 (IDMAttributeSet) をパラメータとして渡します。

フレームワークでは、プラグインの GetPMMLAlgorithmSAXHandler メソッドが呼び出され、PMML ドキュメントのコンテンツの SAX ハンドラが取得されます。プラグインは、PMML ストリームからのすべてのアルゴリズム固有の情報を解析する必要があります。プラグインは、フレームワークによって提供された、IDMModelServices インターフェイスの ParsePMMLModelStatistics を呼び出すことによって、モデルの統計を解析するか、このタスクをフレームワークに委任できます。

コンテンツの解析が完了した後、プラグインは IDMModelServices インターフェイスの ContinuePMMLParsing を呼び出すことによって、フレームワークに制御を返す必要があります。

PMML 2.1 ドキュメントの解析操作は、以下の表に従って実行されます。

分析サーバー フレームワーク プラグイン アルゴリズム
PMML 2.1 の解析を開始します (このために XML SAX コンテンツ ハンドラを作成します)  
データ辞書を読み取ります  
PMML 2.1 ドキュメントを事前解析し、マイニング モデル、マイニング構造、列のメタデータを作成します  
コンテンツを解析するプラグインを呼び出します  
  GetPMMLAlgorithmSAXHandler により、コンテンツを処理する SAX コンテンツ ハンドラが返されます
プラグインによって返されるハンドラに XML 解析をリダイレクトします  
  マイニング モデルのコンテンツを読み取るための XML を処理します
  ModelStats 要素が検出されたときは、プラグインは統計を解析できるか、このタスクをフレームワークに委任できます
ParsePMMLModelStatistics が呼び出された場合、統計をIDMMarginalStats 実装に読み込み、プラグインに制御を返します  
  PMML のコンテンツ部分が完了したら、ContinuePMMLParsing を呼び出すことによってフレームワークに制御を返します
ContinuePMMLParsing が呼び出されるときに、XML 解析を基になるハンドラにリダイレクトします  
PMML ドキュメントの解析を終了します  
新しく作成されたオブジェクトを保存します  

エラー処理

アルゴリズム プロバイダは、標準エラーを発生させ、IErrorInfo オブジェクトを設定する必要があります。


© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker