AMO データ マイニング オブジェクトのプログラミング

適用対象: SQL Server Analysis Services Azure Analysis Services Power BI Premium

AMO を使用すれば、データ マイニング オブジェクトを簡単にプログラミングできます。 まず、マイニング プロジェクトをサポートするデータ構造モデルを作成します。 次に、マイニング アルゴリズムをサポートするデータ マイニング モデルを作成します。マイニング アルゴリズムは、データに含まれる未知のリレーションシップを予測または検出するために使用します。 構造やアルゴリズムなどのマイニング プロジェクトを作成したら、マイニング モデルを処理することにより、後でクライアント アプリケーションからクエリや予測を行うときに使用するトレーニングされたモデルを取得できます。

1 つ覚えておく必要があるのは、AMO ではクエリを実行できないという点です。AMO は、マイニング構造およびマイニング モデルの管理に使用します。 データに対してクエリを実行するには、 [データを使用 した開発] ADOMD.NET

MiningStructure オブジェクト

マイニング構造は、すべてのマイニング モデルの作成に使用するデータ構造の定義です。 マイニング構造には、データベースで定義されたデータ ソース ビューへのバインドと、マイニング モデル内のすべての列定義が含まれます。 マイニング構造には複数のマイニング モデルを含めることができます。

オブジェクトを作成 MiningStructure するには、次の手順が必要です。

  1. オブジェクトを作成 MiningStructure し、基本属性を設定します。 基本属性には、オブジェクト名、オブジェクト ID (内部 ID)、およびデータ ソース バインドがあります。

  2. モデルの列を作成します。 列はスカラー定義またはテーブル定義のいずれかです。

    各列には、名前、内部 ID、種類、コンテンツ定義、およびバインドが必要です。

  3. オブジェクトの MiningStructure Update メソッドを使用して、オブジェクトをサーバーに更新します。

    マイニング構造は処理可能です。マイニング構造を処理すると、子マイニング モデルが処理または再トレーニングされます。

次のサンプル コードでは、売り上げを時系列で予測するマイニング構造を作成します。 サンプル コードを実行する前に、 のパラメーターとして渡されたデータベース dbCreateSalesForecastingMiningStructuredb.DataSourceViews[0] に、Adventure Works Data Warehouse サンプル データベースの dbo.vTimeSeries ビューへの参照が含まれている必要があります。

public static MiningStructure CreateSalesForecastingMiningStructure(Database db)  
{  
    MiningStructure ms = db.MiningStructures.FindByName("Forecasting Sales Structure");  
    if (ms != null)  
        ms.Drop();  
    ms = db.MiningStructures.Add("Forecasting Sales Structure", "Forecasting Sales Structure");  
    ms.Source = new DataSourceViewBinding(db.DataSourceViews[0].ID);  
  
    ScalarMiningStructureColumn amount = ms.Columns.Add("Amount", "Amount");  
    amount.Type = MiningStructureColumnTypes.Double;  
    amount.Content = MiningStructureColumnContents.Continuous;  
    amount.KeyColumns.Add("vTimeSeries", "Amount", OleDbType.Currency);  
  
    ScalarMiningStructureColumn modelRegion = ms.Columns.Add("Model Region", "Model Region");  
    modelRegion.IsKey = true;  
    modelRegion.Type = MiningStructureColumnTypes.Text;  
    modelRegion.Content = MiningStructureColumnContents.Key;  
    modelRegion.KeyColumns.Add("vTimeSeries", "ModelRegion", OleDbType.WChar, 56);  
  
    ScalarMiningStructureColumn qty = ms.Columns.Add("Quantity", "Quantity");  
    qty.Type = MiningStructureColumnTypes.Long;  
    qty.Content = MiningStructureColumnContents.Continuous;  
    qty.KeyColumns.Add("vTimeSeries", "Quantity", OleDbType.Integer);  
  
    ScalarMiningStructureColumn timeIndex = ms.Columns.Add("TimeIndex", "TimeIndex");  
    timeIndex.IsKey = true;  
    timeIndex.Type = MiningStructureColumnTypes.Long;  
    timeIndex.Content = MiningStructureColumnContents.KeyTime;  
    timeIndex.KeyColumns.Add("vTimeSeries", "TimeIndex", OleDbType.Integer);  
  
    ms.Update();  
    return ms;  
}  

MiningModel オブジェクト

マイニング モデルは、マイニング アルゴリズムで使用されるすべての列および列定義のリポジトリです。

オブジェクトを作成 MiningModel するには、次の手順が必要です。

  1. オブジェクトを作成 MiningModel し、基本属性を設定します。

    基本属性には、オブジェクト名、オブジェクト ID (内部 ID)、およびマイニング アルゴリズムの仕様があります。

  2. マイニング モデルの列を追加します。 列の 1 つをケース キーとして定義する必要があります。

  3. オブジェクトの MiningModel Update メソッドを使用して、オブジェクトをサーバーに更新します。

    MiningModel オブジェクトは、親 の他のモデルとは別に処理できます MiningStructure

次のサンプル コードでは、"Forecasting Sales Structure" マイニング構造に基づいて Microsoft タイム シリーズ予測モデルを作成します。

public static MiningModel CreateSalesForecastingMiningModel(MiningStructure ms)  
{  
    if (ms.MiningModels.ContainsName("Sales Forecasting Model"))  
    {  
        ms.MiningModels["Sales Forecasting Model"].Drop();  
    }  
    MiningModel mm = ms.CreateMiningModel(true, "Sales Forecasting Model");  
    mm.Algorithm = MiningModelAlgorithms.MicrosoftTimeSeries;  
    mm.AlgorithmParameters.Add("PERIODICITY_HINT", "{12}");  
  
    MiningModelColumn amount = new MiningModelColumn();  
    amount.SourceColumnID = "Amount";  
    amount.Usage = MiningModelColumnUsages.Predict;  
  
    MiningModelColumn modelRegion = new MiningModelColumn();  
    modelRegion.SourceColumnID = "Model Region";  
    modelRegion.Usage = MiningModelColumnUsages.Key;  
  
    MiningModelColumn qty = new MiningModelColumn();  
    qty.SourceColumnID = "Quantity";  
    qty.Usage = MiningModelColumnUsages.Predict;  
  
    MiningModelColumn ti = new MiningModelColumn();  
    ti.SourceColumnID = "TimeIndex";  
    ti.Usage = MiningModelColumnUsages.Key;  
  
    mm.Update();  
    mm.Process(ProcessType.ProcessFull);  
    return mm;  
}