Freigeben über


Programmieren von AMO-Data Mining-Objekten

Das Programmieren von Data Mining-Objekten mithilfe von AMO ist unkompliziert und einfach. Der erste Schritt ist, das Datenstrukturmodell zu erstellen, um das Miningprojekt zu unterstützen. Anschließend erstellen Sie das Data Mining-Modell, das den Miningalgorithmus unterstützt, den Sie für die Vorhersage oder für die Ermittlung der Ihren Daten zugrundeliegenden unsichtbaren Beziehungen verwenden möchten. Nachdem Sie Ihr Miningprojekt erstellt haben (einschließlich Struktur und Algorithmus), können Sie die Miningmodelle verarbeiten, um die trainierten Modelle abzurufen, die Sie später verwenden, wenn Sie Abfragen und Vorhersagen über die Clientanwendung ausführen.

Dabei ist zu beachten, dass AMO nicht der Abfrage dient, sondern der Verwaltung und der Administration Ihrer Miningstrukturen und Modelle. Um die Daten abzufragen, verwenden Sie ADOMD.NET.

Dieses Thema enthält folgende Abschnitte:

  • MiningStructure-Objekte

  • MiningModel-Objekte

MiningStructure-Objekte

Eine Miningstruktur ist die Definition der Datenstruktur, die für die Erstellung aller Miningmodelle verwendet wird. Eine Miningstruktur enthält eine Bindung an eine Datenquellensicht, die in der Datenbank definiert ist, und Definitionen für alle Spalten, die am Miningmodell beteiligt sind. Eine Miningstruktur kann mehr als ein Miningmodell besitzen.

Für die Erstellung eines MiningStructure-Objekts sind folgende Schritte erforderlich:

  1. Erstellen Sie das MiningStructure-Objekt, und füllen Sie die grundlegenden Attribute auf. Grundlegende Attribute sind unter anderem Objektname, Objekt-ID (interne Identifikation) und Datenquellenbindung.

  2. Erstellen Sie Spalten für das Modell. Spalten können entweder skalar oder Tabellendefinitionen sein.

    Jede Spalte benötigt einen Namen und eine interne ID, einen Typ, eine Inhaltsdefinition und eine Bindung.

  3. Aktualisieren Sie das MiningStructure-Objekt auf dem Server, indem Sie die Update-Methode des Objekts verwenden.

    Miningstrukturen können verabeitet werden und wenn Sie verarbeitet sind, werden die untergeordneten Miningmodelle verarbeitet oder erneut trainiert.

Der folgende Beispielcode erstellt eine Miningstruktur, um Verkäufe in einer Zeitreihe zu prognostizieren. Bevor Sie den Beispielcode ausführen, müssen Sie sicherstellen, dass die Datenbank db, die als Parameter für CreateSalesForecastingMiningStructure übergeben wurde, in db.DataSourceViews[0] einen Verweis auf die Sicht dbo.vTimeSeries in der Beispieldatenbank AdventureWorksDW enthält.

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-Objekte

Ein Miningmodell ist ein Repository für alle Spalten und Spaltendefinitionen, die in dem Miningalgorithmus verwendet werden.

Für die Erstellung eines MiningModel-Objekts sind folgende Schritte erforderlich:

  1. Erstellen Sie das MiningModel-Objekt, und füllen Sie die grundlegenden Attribute auf.

    Grundlegende Attribute sind unter anderem Objektname, Objekt-ID (interne Identifikation) und Spezifikation des Miningalgorithmus.

  2. Fügen Sie die Spalten dem Miningmodell hinzu. Eine der Spalten muss als Fallschlüssel definiert werden.

  3. Aktualisieren Sie das MiningModel-Objekt auf dem Server, indem Sie die Update-Methode des Objekts verwenden.

    MiningModel-Objekte können unabhängig von anderen Modellen der übergeordneten MiningStructure verarbeitet werden.

Der folgende Beispielcode erstellt ein Microsoft Time Series-Planungsmodell auf der Grundlage der Miningstruktur "Forecasting Sales Structure".

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;
}