AMO 데이터 마이닝 개체 프로그래밍

AMO를 사용하여 데이터 마이닝 개체를 프로그래밍하는 과정은 매우 간단합니다. 첫 번째 단계는 마이닝 프로젝트를 지원하는 데이터 구조 모델을 만드는 것입니다. 그런 다음 데이터 내부의 보이지 않는 관계를 예측하거나 찾는 데 사용할 마이닝 알고리즘을 지원하는 데이터 마이닝 모델을 만듭니다. 구조 및 알고리즘을 포함하여 만든 마이닝 프로젝트를 통해 마이닝 모델을 처리하여 나중에 클라이언트 응용 프로그램에서 쿼리 또는 예측하는 데 사용하는 학습된 모델을 얻을 수 있습니다.

한 가지 기억할 것은 AMO의 목적은 쿼리가 아니라 마이닝 구조 및 모델 관리라는 점입니다. 데이터를 쿼리하려면 ADOMD.NET를 사용합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

  • MiningStructure 개체

  • MiningModel 개체

MiningStructure 개체

마이닝 구조는 모든 마이닝 모델을 만드는 데 사용되는 데이터 구조의 정의입니다. 마이닝 구조에는 데이터베이스에 정의된 데이터 원본 뷰에 대한 바인딩이 포함되며 마이닝 모델에 참여하는 모든 열에 대한 정의가 포함됩니다. 하나의 마이닝 구조에서 둘 이상의 마이닝 모델을 가질 수 있습니다.

MiningStructure 개체를 만들려면 다음 단계를 수행합니다.

  1. MiningStructure 개체를 만들고 기본 특성을 채웁니다. 기본 특성에는 개체 이름, 개체 ID(내부 식별) 및 데이터 원본 바인딩이 있습니다.

  2. 모델에 대한 열을 만듭니다. 열은 스칼라 또는 테이블 정의가 될 수 있습니다.

    각 열에는 이름 및 내부 ID, 형식, 내용 정의 및 바인딩이 필요합니다.

  3. 개체의 Update 메서드를 사용하여 MiningStructure 개체를 서버로 업데이트합니다.

    마이닝 구조는 처리될 수 있으며 마이닝 구조가 처리될 때 자식 마이닝 모델이 처리되거나 유지됩니다.

다음 코드 예제에서는 시계열로 판매량을 예측하는 마이닝 구조를 만듭니다. 예제 코드를 실행하기 전에 CreateSalesForecastingMiningStructure의 매개 변수로 전달된 db 데이터베이스가 db.DataSourceViews[0]에서 AdventureWorksDW 예제 데이터베이스의 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(내부 식별) 및 마이닝 알고리즘 사양이 있습니다.

  2. 마이닝 모델의 열을 추가합니다. 열 중 하나는 사례 키로 정의되어야 합니다.

  3. 개체의 Update 메서드를 사용하여 MiningModel 개체를 서버로 업데이트합니다.

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