SELECT FROM <模型> PREDICTION JOIN (DMX)

使用挖掘模型来预测外部数据源中的列状态。PREDICTION JOIN 语句将源查询中的每个事例与挖掘模型进行匹配。

语法

SELECT [FLATTENED] [TOP <n>] <select expression list> 
FROM <model> | <sub select> [NATURAL] PREDICTION JOIN 
<source data query> [ON <join mapping list>] 
[WHERE <condition expression>]
[ORDER BY <expression> [DESC|ASC]]

参数

  • n
    可选。一个指定要返回行数的整数。

  • select expression list
    从挖掘模型中派生的一组以逗号分隔的列标识符和表达式。

  • model
    模型标识符。

  • sub select
    嵌入的 Select 语句。

  • source data query
    源查询。

  • join mapping list
    可选。一种逻辑表达式,可以将模型中的列与源查询中的列进行比较。

  • condition expression
    可选。一个限制从列列表返回的值的条件。

  • expression
    可选。一个返回标量值的表达式。

注释

ON 子句定义了源查询中的列与挖掘模型中的列之间的映射。该映射用于将源查询中的列定向到挖掘模型中的列,这样在创建预测时便可将这些列用作输入。<join mapping list> 中的列是使用等号 (=) 建立关联的,如以下示例所示:

[MiningModel].ColumnA = [source data query].Column1 AND 
[MiningModel].ColumnB = [source data query].Column2 AND
...

如果要在 ON 子句中绑定一个嵌套表,请确保将键列与非键列进行绑定,以便算法可以正确地标识嵌套列记录所属的事例。

用于预测联接的源查询可以是表,也可以是单独查询。

您可以指定不返回 <select expression list> 和 <condition expression> 中表表达式的预测函数。

NATURAL PREDICTION JOIN 自动将源查询中与挖掘模型中列名匹配的列名映射到一起。如果使用 NATURAL PREDICTION,则可忽略 ON 子句。

WHERE 条件只能用于可预测列或相关列。

ORDER by 子句只接受单个列作为参数;即,您不能对多个列进行排序。

示例 1:单独查询

下面的示例演示如何创建用于实时预测某个人是否会购买自行车的查询。在此查询中,数据没有存储在表或其他数据源中,而是直接输入到查询中。查询中的人员具有下列特性:

  • 35 岁

  • 拥有一套住房

  • 拥有两部汽车

  • 家中有两个孩子

查询使用 TM 决策树挖掘模型以及对象的已知特征,返回一个说明此人是否购买了自行车的布尔值,以及一组由 PredictHistogram 函数返回的说明预测方式的表格值。

SELECT
  [TM Decision Tree].[Bike Buyer],
  PredictHistogram([Bike Buyer])
FROM
  [TM Decision Tree]
NATURAL PREDICTION JOIN
(SELECT 35 AS [Age],
  '5-10 Miles' AS [Commute Distance],
  '1' AS [House Owner Flag],
  2 AS [Number Cars Owned],
  2 AS [Total Children]) AS t

示例 2:使用 OPENQUERY

下面的示例演示如何使用外部数据集中存储的潜在客户列表创建批预测查询。因为表是已定义的 Analysis Services 实例数据源视图的一部分,因此查询可以使用 OPENQUERY 来检索数据。由于表中的列名与挖掘模型中的列名不同,因此必须使用 ON 子句将表中的列映射到模型中的列。

查询返回表中每个人的姓氏和名字,以及指示每个人是否会购买自行车的布尔列;其中,0 表示“可能不会购买自行车”,1 表示“可能会购买自行车”。最后一列包含预测结果的概率。

SELECT
  t.[LastName],
  t.[FirstName],
  [TM Decision Tree].[Bike Buyer],
  PredictProbability([Bike Buyer])
From
  [TM Decision Tree]
PREDICTION JOIN
  OPENQUERY([Adventure Works DW],
    'SELECT
      [LastName],
      [FirstName],
      [MaritalStatus],
      [Gender],
      [YearlyIncome],
      [TotalChildren],
      [NumberChildrenAtHome],
      [Education],
      [Occupation],
      [HouseOwnerFlag],
      [NumberCarsOwned]
    FROM
      [dbo].[ProspectiveBuyer]
    ') AS t
ON
  [TM Decision Tree].[Marital Status] = t.[MaritalStatus] AND
  [TM Decision Tree].[Gender] = t.[Gender] AND
  [TM Decision Tree].[Yearly Income] = t.[YearlyIncome] AND
  [TM Decision Tree].[Total Children] = t.[TotalChildren] AND
  [TM Decision Tree].[Number Children At Home] = t.[NumberChildrenAtHome] AND
  [TM Decision Tree].[Education] = t.[Education] AND
  [TM Decision Tree].[Occupation] = t.[Occupation] AND
  [TM Decision Tree].[House Owner Flag] = t.[HouseOwnerFlag] AND
  [TM Decision Tree].[Number Cars Owned] = t.[NumberCarsOwned]

若要将数据集限制为仅包含经预测可能会购买自行车的客户,然后按照客户的名称对列表进行排序,则可向前一个示例中添加一个 WHERE 子句和一个 ORDER BY 子句:

WHERE [BIKE Buyer]
ORDER BY [LastName] ASC

示例 3:预测关联

下例说明如何使用由 Microsoft 关联算法生成的模型创建预测。关联模型生成的预测可用于推荐相关产品。例如,下面的查询返回三种产品,购买这三种产品的同时最有可能还会购买后面的三种产品:

  • Mountain Bottle Cage

  • Mountain Tire Tube

  • Mountain-200

Predict (DMX) 函数是多态函数,可用于所有模型类型。可以使用 value3 作为函数的参数来限制查询返回的项的数目。NATURAL PREDICTION JOIN 子句后的 SELECT 列表提供用作预测的输入的值。

SELECT FLATTENED
  PREDICT([Association].[v Assoc Seq Line Items], 3)
FROM
  [Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Mountain Bottle Cage' AS [Model]
  UNION SELECT 'Mountain Tire Tube' AS [Model]
  UNION SELECT 'Mountain-200' AS [Model]) AS [v Assoc Seq Line Items ]) AS t

示例结果:

Expression.Model

HL Mountain Tire

Water Bottle

Fender Set - Mountain

由于包含可预测属性 [v Assoc Seq Line Items] 的列是一个表列,因此查询将返回一个包含嵌套表的列。默认情况下,嵌套表列名为 Expression。如果提供程序不支持分层行集,您可以使用此示例中显示的 FLATTENED 关键字来使结果更易于查看。