AMO 数据挖掘对象的编程
使用 AMO 对数据挖掘对象进行编程非常简单直接。 第一步是创建数据结构模型以支持挖掘项目。 然后创建数据挖掘模型,该模型支持您要用于预测或查找数据下未看到的关系的挖掘算法。 创建挖掘项目(包括结构和算法)后,可以处理挖掘模型以获取定型的模型,稍后从客户端应用程序进行查询和预测时将使用该模型。
请记住 AMO 不用于查询,而是用于管理挖掘结构和模型。 若要查询数据,请使用使用 ADOMD.NET 进行开发。
本主题包含以下各节:
MiningStructure 对象
MiningModel 对象
MiningStructure 对象
挖掘结构是用于创建所有挖掘模型的数据结构的定义。 挖掘结构包含与数据库中定义的数据源视图的绑定,以及组成挖掘模型的所有列的定义。 一个挖掘结构可包含多个挖掘模型。
创建 MiningStructure 对象需要执行下列步骤:
创建 MiningStructure 对象并填充基本属性。 这些基本属性包括对象名称、对象 ID(内部标识)和数据源绑定。
创建模型的列。 列可以为标量,也可以为表定义。
每一列都需要名称、内部 ID、类型、内容定义和绑定。
使用 MiningStructure 对象的 Update 方法将该对象更新到服务器。
可对挖掘结构进行处理,处理挖掘结构时,会对子挖掘模型进行处理和重新定型。
下面的示例代码创建挖掘结构来预测一段时序中的销售情况。 运行该示例代码前,请确保作为 CreateSalesForecastingMiningStructure 的参数传递的数据库 db 包含在 db.DataSourceViews[0](对 Adventure Works DW Multidimensional 2012 示例数据库中 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 对象需要执行下列步骤:
创建 MiningModel 对象并填充基本属性。
这些基本属性包括对象名称、对象 ID(内部标识)和挖掘算法规范。
添加挖掘模型的列。 必须将其中一列定义为事例键。
使用 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;
}