Поделиться через


Программирование объектов интеллектуального анализа данных AMO

Программирование объектов интеллектуального анализа данных при помощи объектов AMO просто и понятно. Первый шаг заключается в создании модели структуры данных для поддержки проекта интеллектуального анализа. Затем создается модель интеллектуального анализа данных, поддерживающая алгоритм интеллектуального анализа, который будет использоваться, чтобы прогнозировать или находить невидимые связи, лежащие в основе данных. Создав проект интеллектуального анализа данных (в том числе структуру и алгоритмы), можно приступить к обработке моделей интеллектуального анализа данных для получения обученных моделей, которые в последствии будут использоваться при выполнении запросов и прогнозировании из клиентского приложения.

Следует однако помнить, что объекты AMO не предназначены для запросов; объекты AMO используются для управления и администрирования структурами и моделями интеллектуального анализа данных. Для запроса данных используйте объекты, описанные в разделе ADOMD.NET.

Этот раздел состоит из следующих подразделов.

  • Объекты MiningStructure

  • Объекты MiningModel

Объекты MiningStructure

Структура интеллектуального анализа данных — это определение структуры данных, которое используется для создания всех моделей интеллектуального анализа данных. Структура интеллектуального анализа данных содержит привязку к представлению источника данных, определенному в базе данных, а также определения для всех столбцов, задействованных в моделях интеллектуального анализа данных. Структура может содержать несколько моделей интеллектуального анализа данных,

Для создания объекта MiningStructure необходимо выполнить следующие действия.

  1. Создайте объект MiningStructure и заполните основные атрибуты. Среди базовых атрибутов имя объекта, идентификатор объекта (внутренняя идентификация) и привязка к источнику данных.

  2. Создайте столбцы для модели. Столбцы могут быть скалярными определениями или определениями таблицы.

    У каждого столбца должно быть имя и внутренний идентификатор, тип, определение содержимого и привязка.

  3. Обновите объект MiningStructure на сервере, используя метод Update объекта.

    Структуры интеллектуального анализа данных можно обрабатывать, а после их обработки производиться обработка или повторное обучение дочерних моделей интеллектуального анализа.

Следующий образец кода создает структуру интеллектуального анализа данных для прогнозирования объема продаж во временных рядах. Перед выполнением этого образца кода, удостоверьтесь, что база данных db, передаваемая методу CreateSalesForecastingMiningStructure в качестве параметра, в db.DataSourceViews[0] содержит ссылку на представление dbo.vTimeSeries в образце базы данных 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;
}

Объекты MiningModel

Модель интеллектуального анализа является репозиторием для всех столбцов и определений столбцов, которые будут использованы в алгоритме интеллектуального анализа.

Для создания объекта MiningModel необходимо выполнить следующие действия.

  1. Создайте объект MiningModel и заполните основные атрибуты.

    Среди базовых атрибутов имя объекта, идентификатор объекта (внутренняя идентификация) и спецификация алгоритма интеллектуального анализа.

  2. Добавьте столбцы модели интеллектуального анализа данных. Один из них должен быть определен, как ключ варианта.

  3. Обновите объект MiningModel на сервере, используя метод Update объекта.

    Объекты MiningModel могут обрабатываться в родительском объекте MiningStructure независимо от других моделей.

Следующий образец кода создает модель прогнозирования временных рядов (Майкрософт), основанную на структуре интеллектуального анализа «Структура прогнозирования продаж».

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