Compartir a través de


Programar objetos de minería de datos con AMO

La programación de objetos de minería de datos mediante AMO es un proceso sencillo y directo. El primer paso consiste en crear un modelo de estructura de datos que admita el proyecto de minería de datos. A continuación, se crea el modelo de minería de datos que admite el algoritmo de minería de datos que desea utilizar para predecir o buscar las relaciones ocultas subyacentes a los datos. Una vez creado el proyecto de minería de datos (incluidos la estructura y los algoritmos), puede procesar los modelos de minería de datos para obtener los modelos entrenados que utilizará más adelante al realizar consultas y predicciones desde la aplicación cliente.

Es necesario recordar que AMO no se utiliza para realizar consultas, sino para administrar las estructuras y los modelos de minería de datos. Para consultar los datos, use ADOMD.NET.

Este tema contiene las siguientes secciones:

  • Objetos MiningStructure

  • Objetos MiningModel

Objetos MiningStructure

Una estructura de minería de datos es la definición de la estructura de datos que se utiliza para crear todos los modelos de minería de datos. Una estructura de minería de datos contiene un enlace a una vista del origen de datos definida en la base de datos y contiene definiciones de todas las columnas que participan en los modelos de minería de datos. Una estructura de minería de datos puede tener más de un modelo.

La creación de un objeto MiningStructure requiere los pasos siguientes:

  1. Crear el objeto MiningStructure y rellenar los atributos básicos. Entre los atributos básicos se incluyen el nombre del objeto, el id. de objeto (identificación interna) y el enlace del origen de datos.

  2. Crear columnas para el modelo. Las columnas pueden ser de tipo escalar o definiciones de tabla.

    Cada columna requiere un nombre y un id. interno, un tipo, una definición del contenido y un enlace.

  3. Actualizar el objeto MiningStructure en el servidor mediante el método Update del objeto.

    Las estructuras de minería de datos se pueden procesar y, al procesarlas, se procesan o se vuelven a entrenar los modelos de minería de datos secundarios.

El código de ejemplo siguiente crea una estructura de minería de datos para pronosticar las ventas en una serie temporal. Antes de ejecutar el código de ejemplo, asegúrese de que la base de datos db, pasada como parámetro para CreateSalesForecastingMiningStructure, contiene en db.DataSourceViews[0] una referencia a la vista dbo.vTimeSeries en la base de datos de ejemplo AdventureWorksDW.

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

Objetos MiningModel

Un modelo de minería de datos es un repositorio de todas las columnas y definiciones de columna que se utilizarán en un algoritmo de minería de datos.

La creación de un objeto MiningModel requiere los pasos siguientes:

  1. Crear el objeto MiningModel y rellenar los atributos básicos.

    Entre los atributos básicos se incluyen el nombre del objeto, el id. de objeto (identificación interna) y la especificación del algoritmo de minería de datos.

  2. Agregar las columnas del modelo de minería de datos. Una de las columnas debe definirse como clave de caso.

  3. Actualizar el objeto MiningModel en el servidor mediante el método Update del objeto.

    Los objetos MiningModel se pueden procesar con independencia de otros modelos en el elemento MiningStructure primario.

El código de ejemplo siguiente crea un modelo de pronóstico de serie temporal de Microsoft basado en la estructura de minería de datos "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;
}