挖掘模型中的引用的两种不同类型的列作为键:事例键和嵌套键;事例键指出事例表的实体的标示,往往是数据表的主键可以作为事例键;嵌套键则选择的是嵌套行的命名实体,就是进行建模的属性列作为嵌套键
http://msdn.microsoft.com/zh-cn/library/ms175659.aspx
1.创建挖掘结构
create mining structure[名字]
(
[custid] long key,--数据类型和内容类型
[name] textdiscreate,
[age] longcontinuous
,[purchases]table--嵌套表
(
[product] textkey,
[quantity] longcontinuous
)
)
//数据类型:long,double,text,date,boolean,table(嵌套表)
//内容类型:key,discrete,continuous,discredtized,keytime,key sequence
2.创建挖掘模型:挖掘模型对比挖掘结构是列被表示为输出还是输入以及指定了算法以及算法需要的参数
Alter mining structure[名字]
Add mining model[挖掘模型名字]
(
[custid] ,
[name] ,
[purchases]
(
[product]predict
)
)usingmicrosoft_decision_trees ---这里是要指定的算法
--withfilter(custid>2) 这个是过滤器,可以根据自己的要求进行调整
3.填充挖掘结构,就是所说的训练数据
insert into miningstructure [名字]
(
[custid],[name],[age],
[purchases](skip,[product] ,[quantity] )
--skip是为了适应下面的shape引入的,它指出了存在于数据源中而又不用于填充的那些列
--引用shape的结果是输入集中的每个嵌套表都包含事例表外键的一个列,这个例子中就是custid,自己的理解是虚拟的赋予一列在上面为了和数据库中嵌套表的事例表的键进行连接,保证映射的成功;因为在数据库中与嵌套表对应的数据库表名中有存在custid这一列(因为和主表的连接需要用到key=custid),而在建立的挖掘结构中没有custid这列,所以为了匹配起来在上面用skip
)
shape--针对主表(事例表)
{
openquery
(数据源名字,'select[key],[name] ,[age]from数据库表名 order by[key]')
}
APPEND--针对有嵌套表的挖掘结构中的表的数据获取
(
{
openquery
(数据源名字,'selectcustid,[product],[quantity] from数据库中与嵌套表对应的数据库表名 order bycustid')
} relate [key] to[custid]--主键和外键相匹配类似于SQL中的联合表的时候的那种情况
) aspurchases
--这边的数据源名字是在SQLAnalisis中自己获取数据库连接起的名字
--自己在DMX中执行连接数据库建立起来的数据源的操作语句是
CallASSprocs.CreateDateSource('数据源名字',
'Provider=SQLNCLI11.0;Data Source=数据库引擎的连接名;
Integrated Security=SSPI;Initial Catalog=所要连接的数据库名',
'ImpersonateCurrentUser','','')
--ASSprocs.dll是提供的一个程序集,需要在SQLAnalisis的程序集中把这个加进去
--上面的很多东西需要自己去修改,'Provider=SQLNCLI11.0是SQL2012的客户端的连接的一个东西,SQL2008的是'Provider=SQLNCLI10.0
4.查询,删除结构以及模型数据
--例如
select * from miningstructure [名字].cases--查询所有的例子
select * from[挖掘模型名字]
delete from miningstructure [名字].cases--删除缓存
deletefrommining structure [名字] --删除所有数据
drop mining structure[名字] --移除挖掘结构
5.预测
select predict(product)as predictname from [挖掘模型名字]
predictionjoin
APPEND--针对有嵌套表的挖掘结构中的表的数据获取
(
{
openquery
(数据源名字,'selectcustid,[product],[quantity] from数据库中与嵌套表对应的数据库表名 order by custid ')
} relate [key] to[custid] --主键和外键相匹配类似于SQL中的联合表的时候的那种情况
) aspurchases
AS t
on[挖掘模型名字].age=t.age --这边还可以写很多自己限定的条件
------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
--自行车购买者 DMX 教程的练习
--http://msdn.microsoft.com/zh-cn/library/bb895168.aspx
1.下载AdventureWorksDW2012数据库,因为自己下载下来的只有mdf的,少了一个log的数据库文件;处理方法是首先在数据库里建立一个名字为AdventureWorksDW2012的数据库;其次,进入SQL配置管理器停掉数据库引擎,把下载下来的AdventureWorksDW2012.mdf复制过来进入数据库文件夹DATA下替换建立起来的AdventureWorksDW2012.mdf,并且删除掉数据库DATA文件夹下AdventureWorksDW2012.log;重新启动数据库引擎;那么数据库的操作步骤就完成了
2.打开VS2010,新建一个Analisi项目,取名为AdventureWorksDW;在数据源那边新建数据源,把刚才在数据库中建立起来的AdventureWorksDW2012连接起来;以及在数据源视图那新建数据源视图,步骤一路到底;弄好后保存这个项目,再单击右键项目AdventureWorksDW进程,执行部署项目
3.打开Microsoft Analysis server,就可以在数据库中看到刚才在VS2010中部署的项目,
接下来就可以执行下面一系列的操作了
--建立挖掘结构
CREATE MINING STRUCTURE [Bike Buyer]
(
[Customer Key] LONG KEY,
[Age]LONGDISCRETIZED(Automatic,10),
[Bike Buyer] LONGDISCRETE,
[Commute Distance] TEXTDISCRETE,
[Education] TEXTDISCRETE,
[Gender] TEXT DISCRETE,
[House Owner Flag] TEXTDISCRETE,
[Marital Status] TEXTDISCRETE,
[Number Cars Owned]LONGDISCRETE,
[Number Children At Home]LONGDISCRETE,
[Occupation] TEXTDISCRETE,
[Region] TEXT DISCRETE,
[Total Children]LONGDISCRETE,
[Yearly Income] DOUBLECONTINUOUS
)
WITH HOLDOUT (30 PERCENT or 1000 CASES)
--挖掘模型
ALTER MINING STRUCTURE [Bike Buyer]
ADD MINING MODEL [Decision Tree]
(
[Customer Key],
[Age],
[Bike Buyer] PREDICT,
[Commute Distance],
[Education],
[Gender],
[House Owner Flag],
[Marital Status],
[Number Cars Owned],
[Number Children AtHome],
[Occupation],
[Region],
[Total Children],
[Yearly Income]
) USING Microsoft_Decision_Trees
WITH DRILLTHROUGH
--处理挖掘结构,训练数据
INSERT INTO MINING STRUCTURE [Bike Buyer]
(
[Customer Key],
[Age],
[Bike Buyer],
[Commute Distance],
[Education],
[Gender],
[House Owner Flag],
[Marital Status],
[Number Cars Owned],
[Number Children AtHome],
[Occupation],
[Region],
[Total Children],
[YearlyIncome]
)
OPENQUERY([Adventure Works2012],
'SELECT CustomerKey, Age,BikeBuyer,
CommuteDistance,EnglishEducation,
Gender,HouseOwnerFlag,MaritalStatus,
NumberCarsOwned,NumberChildrenAtHome,
EnglishOccupation,Region,TotalChildren,
YearlyIncome
FROMdbo.vTargetMail')
---返回挖掘模型的内容
//SELECT
SELECT * FROM [Clustering].CONTENT
SELECT * FROM [DecisionTree].CASES
SELECT DISTINCT [Bike Buyer] FROM [Decision Tree]
----
SELECT [Bike Buyer] AS Buyer,PredictHistogram([Bike Buyer]) ASStatistics FROM [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
--
SELECT TOP 10t.[LastName],t.[FirstName],[Decision Tree].[BikeBuyer],PredictProbability([Bike Buyer])
FROM [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
[Decision Tree].[Marital Status] =t.[MaritalStatus] AND
[Decision Tree].[Gender] = t.[Gender] AND
[Decision Tree].[Yearly Income] =t.[YearlyIncome] AND
[Decision Tree].[Total Children] =t.[TotalChildren] AND
[Decision Tree].[Number Children At Home] =t.[NumberChildrenAtHome] AND
[Decision Tree].[Education] = t.[Education]AND
[Decision Tree].[Occupation] = t.[Occupation]AND
[Decision Tree].[House Owner Flag] =t.[HouseOwnerFlag] AND
[Decision Tree].[Number Cars Owned] =t.[NumberCarsOwned]
WHERE [Decision Tree].[Bike Buyer] =1
ORDER BY PredictProbability([Bike Buyer]) DESC
--------------------------------------------------------------------------------------------------
DMX函数学习编辑:
//PredictNodeId (DMX) PredictNodeId()
SELECT [Bike Buyer],PredictNodeId([BikeBuyer]) --DW2012
From [Decision Tree]
NATURAL PREDICTION JOIN
(SELECT 28 AS [Age], '2-5 Miles' AS [Commute Distance], 'GraduateDegree' AS [Education], 0 AS [Number Cars Owned],
0 AS [Number Children At Home]) AS t
SELECT NODE_CAPTION FROM[Decision Tree].CONTENT WHERE NODE_UNIQUE_NAME= '00000000100'
--
//BottomCount (DMX)BottomCount(
SELECT
BottomCount
(
Predict([Association].[v Assoc Seq LineItems],INCLUDE_STATISTICS,10),
$SUPPORT,
3)
FROM [Association] NATURAL PREDICTION JOIN
(SELECT (SELECT 'Women''s Mountain Shorts' as [Model]) AS [v AssocSeq Line Items]) AS t
//BottomCount 函数的第一个参数为表列的名称。 在此示例中,嵌套表是通过调用 Predict 函数和使用INCLUDE_STATISTICS 参数返回的。
//
//BottomCount 函数的第二个参数是您用于对结果进行排序的嵌套表中的列。 在此示例中,INCLUDE_STATISTICS选项返回 $SUPPORT、$PROBABILTY 和 $ADJUSTED PROBABILITY 列。 此示例使用$SUPPORT,因为支持值不带有小数,所以很容易进行验证。
//
//BottomCount 函数的第三个参数指定行数。 若要获取按 $SUPPORT 排序的排名最低的最后三个行,请键入 3。
//BottomPercent (DMX)BottomPercent(
, , )//函数的第三个参数指定百分比(双精度)。 若要获取表示支持的最下面百分之五十的行,可键入 50。
//BottomSum (DMX)按升序返回表中最下面的行,这些行的累积合计至少达到了指定值。BottomSum(
, , )SELECT
BottomSum
(
Predict([Association].[v Assoc Seq LineItems],INCLUDE_STATISTICS,10),
$PROBABILITY,
.1)
FROM
[Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Women''s Mountain Shorts' as [Model]) AS [v AssocSeq Line Items]) AS t
//BottomSum 函数的第一个参数为表列的名称。 在此示例中,嵌套表是通过调用 Predict 函数和使用INCLUDE_STATISTICS 参数返回的。
//
//BottomSum 函数的第二个参数是您用于对结果进行排序的嵌套表中的列。 在此示例中,INCLUDE_STATISTICS选项返回 $SUPPORT、$PROBABILTY 和 $ADJUSTED PROBABILITY 列。 此示例使用$PROBABILITY 返回概率总值至少为 50% 的行。
//
//BottomSum 函数的第三个参数指定目标和(双精度)。 若要获取概率总值为 10% 的最小计数的产品行,请键入 .1。
//Cluster (DMX)返回最可能包含输入事例的分类。Cluster()只有在基础数据挖掘模型支持聚类分析时,才可使用此函数。
//Cluster 函数将返回分类名称的标量值。 但是,如果将该函数用作其他函数的参数,则必须将其视为 。
SELECT --Cycless
PredictHistogram(Cluster())
FROM
[Clustering]
NATURAL PREDICTION JOIN
(SELECT 28 AS [Age],
'2-5 Miles' AS [Commute Distance],
'Graduate Degree' AS [Education],
0 AS [Number Cars Owned],
0 AS [Number Children At Home]) AS t
// 从 Clustering挖掘模型的每个分类中返回单个事例的距离,以及单个事例存在于每个分类中的概率。
//ClusterDistance(DMX)函数返回输入事例与指定分类之间的距离;如果未指定分类,则返回输入事例与可能性最大的分类之间的距离。
//ClusterDistance([])只有在基础数据挖掘模型支持聚类分析时,才可使用此函数
--示例 1:获取到可能性最大的分类的分类距离;示例返回从指定事例到该事例最有可能属于的分类的距离以及所属分类
SELECT
ClusterDistance(), Cluster()
FROM
[Clustering]
NATURAL PREDICTION JOIN
(SELECT 28 AS [Age],
'2-5 Miles'AS [Commute Distance],
'GraduateDegree' AS [Education],
0 AS [NumberCars Owned],
0 AS [NumberChildren At Home]) AS t
--实例二;获取到指定分类之间的距离
//下面的语句使用挖掘模型内容架构行集返回挖掘模型中分类的节点 ID 和节点标题的列表。
//然后,就可以将所返回的节点标题用作 ClusterDistance 函数中的分类标识符参数
SELECT NODE_UNIQUE_NAME, NODE_CAPTION
FROM [Clustering].CONTENT
WHERE NODE_TYPE = 5
SELECT ClusterDistance('分类 2')AS [Cluster 2 Distance] FROM[Clustering]
NATURAL PREDICTION JOIN
(SELECT 28 AS [Age], '2-5 Miles' AS [Commute Distance], 'GraduateDegree' AS [Education],
0 AS [Number Cars Owned],0 AS [Number Children At Home]) AS t
//ClusterProbability (DMX) 返回输入事例属于指定分类的概率。
//ClusterProbability([]) 只有在基础数据挖掘模型支持聚类分析时,此函数才可用。
--SELECT NODE_CAPTION FROM .CONTENT以下语法使用挖掘模型内容架构行集来返回挖掘模型中存在的节点标题。
--回指定实例存在于标记为 Cluster 2 的群集中的概率。
SELECT
ClusterProbability('分类 2')From[Clustering]
NATURAL PREDICTION JOIN
(SELECT 28 AS [Age], '2-5 Miles' AS [Commute Distance], 'GraduateDegree' AS [Education], 0 AS [Number Cars Owned], 0 AS [NumberChildren At Home]) AS t
//Exists (DMX)如果指定子查询至少返回一行,则返回 true。
---//EXISTS(SELECT * FROM <列名> [WHERE <谓词列表>] 形式的SELECT 语句)
//添加到 EXISTS 的子查询参数中的列的列表是无关紧要的;函数仅检查满足条件的行是否存在。
SELECT * FROM [Market Basket].CASES--挖掘结构--DW2012
WHERE EXISTS
(
SELECT * FROM [v Assoc Seq Line Items]--挖掘模型的列,属于挖掘结构中的嵌套表
WHERE [Model] = 'Patch kit'
)
//IsDescendant (DMX)
//IsDescendant()
//IsDescendant 只用于 SELECT FROM .CONTENT (DMX) 和 SELECT FROM<模型>.DIMENSION_CONTENT (DMX) 查询。
--以下示例返回所有属于 IsDescendant 函数中所指定节点后代的事例
SELECT MODEL_NAME, NODE_NAME FROM [TM Decision Tree].CONTENT
WHERE NODE_TYPE = 1
SELECT * FROM [TM Decision Tree].CONTENT
WHERE IsDescendant('0')
//IsInNode (DMX)指示指定的节点是否包含当前事例。
//IsInNode()IsInNode 只用于 SELECT FROM <模型>.CASES (DMX) 和SELECT FROM <模型>.SAMPLE_CASES (DMX) 查询
//支持钻取功能,并返回用于为模型定型的事例。如果对挖掘结构和挖掘模型都启用了钻取功能,并且具有相应的权限,则还可以返回未包括在模型中的结构列。
//如果未对挖掘模型启用钻取功能,则此语句将失败。
////SELECT MODEL_NAME, NODE_NAME FROM [Reds].CONTENT
////WHERE NODE_TYPE = 1
////Select * from [Targeted Mailing].Cases
////WHERE IsInNode('TS')
//IsTestCase (DMX)
//IsTestCase()指示事例是否用作指定数据挖掘模型或挖掘结构的测试事例
SELECT * FROM [Targeted Mailing].CASES WHERE IsTestCase()--挖掘结构
//IsTrainingCase (DMX)指示事例是否用作指定数据挖掘模型或挖掘结构的定型事例。
//IsTrainingCase()
--查询仅返回用于定型挖掘模型的那些事例。 而且,定型事例仅限于 40 岁以下的客户。
SELECT * FROM [TM Clustering].CASES WHERE IsTrainingCase() AND[Age] <40
//Lag (DMX)返回当前事例的日期与定型集的最近日期之间的时间段。 如果对 KEY TIME 列位于嵌套表中的模型使用Lag 函数,则该函数必须位于嵌套的 Select 语句中。
//Lag()
SELECT *,Lag()as diff FROM [Forecasting].CASESWHERE Lag() < 12
//Predict (DMX) Predict 函数为指定列返回一个预测值或一组值。标量列引用或表列引用。
//Predict(, [option1], [option2], [option n], [INCLUDE_NODE_ID],n)
//Predict(
//返回类型取决于应用此函数的列的类型。INCLUSIVE、EXCLUSIVE、INPUT_ONLY 和INCLUDE_STATISTICS 只适用于表列引用;
//EXCLUDE_NULL 和 INCLUDE_NULL 只适用于标量列引用。
//INCLUDE_NODE_ID 参数在结果中返回 $NODEID 列。 NODE_ID 是为特定事例而对其执行预测的内容节点。对表列使用 Predict 时,此参数是可选的。
//n 参数适用于表列。 该参数根据预测类型设置返回的行数。 如果基础列是序列,则该参数将调用 PredictSequence函数。
// 如果基础列是时序,则该参数将调用 PredictTimeSeries 函数。
//对于关联类型的预测,该参数将调用 PredictAssociation 函数。
//将 INCLUDE_STATISTICS 传递给对表值列的预测时,将在生成的表中添加 $Probability 和$Support 列。 这些列说明了关联的嵌套表记录的存在概率。
SELECT Predict([Association].[v Assoc Seq LineItems],INCLUDE_STATISTICS,4)
FROM[Association] --Adventure Works 数据库中四种最可能一起销售的产品因为该函数针对关联规则挖掘模型进行预测
// PredictAdjustedProbability (DMX)返回指定状态调整后的概率。
//PredictAdjustedProbability(, [])
//如果未提供预测状态,将使用具有最大可预测概率的状态,不包括缺少状态存储桶。 若要包括“缺少状态”存储桶,请将 设置为INCLUDE_NULL。
//若要返回缺少状态调整后的概率,请将 设置为 NULL。
SELECT [Bike Buyer], PredictAdjustedProbability([Bike Buyer]) AS[Adjusted Probability]
From[TM Decision Tree]
NATURAL PREDICTION JOIN
(SELECT 28 AS [Age], '2-5 Miles' AS [CommuteDistance], 'Graduate Degree' AS [Education],0 AS[Number Cars Owned],0 AS [Number Children At Home]) AS t
//PredictAssociation (DMX)预测关联的成员身份。
//PredictAssociation(
//含可预测嵌套表的分类算法和聚类分析算法。 分类算法包括 Microsoft 决策树、Microsoft Naive Bayes 和Microsoft 神经网络算法
//PredictAssociation 函数的选项包括EXCLUDE_NULL、INCLUDE_NULL、INCLUSIVE、EXCLUSIVE(默认值)、INPUT_ONLY、INCLUDE_STATISTICS和 INCLUDE_NODE_ID。
//INCLUDE_STATISTICS 只返回 $Probability 和 $AdjustedProbability。
//如果指定了数值参数 n,则 PredictAssociation 函数将根据概率返回前 n 个最可能的值:
//PredictAssociation(colref, [$AdjustedProbability], n)
SELECT PredictAssociation([Association].[v Assoc Seq LineItems],4)
From [Association]---数据库中四种最可能一起销售的产品。
//PredictCaseLikelihood (DMX)此函数返回输入事例适合现有模型的可能性。 仅适用于聚类分析模型。 使用Microsoft 聚类分析和 Microsoft 顺序分析和聚类分析算法生成的模型。
//PredictCaseLikelihood([NORMALIZED|NONNORMALIZED])
//NORMALIZED
//返回值包含事例在模型中的概率除以事例不在模型中的概率所得的值。
//NONNORMALIZED
//返回值包含事例的原始概率,即事例属性概率的乘积。
SELECT
PredictCaseLikelihood() ASDefault_Likelihood,
PredictCaseLikelihood(NORMALIZED) ASNormalized_Likelihood,
PredictCaseLikelihood(NONNORMALIZED) ASRaw_Likelihood
FROM
[TM Clustering]--数据库的聚类分析模型中出现指定事例的可能性。
NATURAL PREDICTION JOIN
(SELECT 28 AS [Age],
'2-5 Miles' AS [Commute Distance],
'Graduate Degree' AS [Education],
0 AS [Number Cars Owned],
0 AS [Number Children At Home]) AS t
//
//PredictHistogram返回一个表示预测给定列的直方图的表。
//PredictHistogram( | )
//标量列
//对于 ,PredictHistogram 函数返回的直方图包含以下列:
//$Support
//$Probability
//$ProbabilityVariance
// Microsoft 数据挖掘算法不支持 $ProbabilityVariance。对于 Microsoft 算法,此列始终为0。
//$ProbabilityStdev
// Microsoft 数据挖掘算法不支持 $ProbabilityStdev。对于 Microsoft 算法,此列始终为0。
//$AdjustedProbability
//$AdjustedProbability 列是对 Microsoft OLE DB for Data Mining 规范的Analysis Services 扩展。
//群集列
//PredictHistogram 函数为 返回的直方图包含以下列:
//$Cluster(表示群集名称)
//$Distance
//$Probability
SELECT[TM Decision Tree].[BikeBuyer],TopCount(PredictHistogram([BikeBuyer]),$AdjustedProbability,3)
From [TM Decision Tree] --单独查询中 Bike Buyer列的预测状态。该查询还根据使用 PredictHistogram函数获取的校正后概率,返回“自行车购买者”属性最可能的两种状态
NATURAL PREDICTION JOIN
(SELECT 28 AS [Age], '2-5 Miles' AS [Commute Distance], 'GraduateDegree' AS [Education], 0 AS [Number Cars Owned], 0 AS [NumberChildren At Home]) AS t
//PredictNodeId返回事例所属的节点的 Node_ID。
//PredictNodeId()
SELECT[Bike Buyer],PredictNodeId([Bike Buyer])
From[TM Decision Tree]--返回指定的个人是否可能购买自行车,并且还返回个人最可能属于的节点的nodeID
NATURAL PREDICTION JOIN
(SELECT 28 AS [Age], '2-5 Miles' AS [Commute Distance], 'GraduateDegree' AS [Education], 0 AS [Number Cars Owned], 0 AS [NumberChildren At Home]) AS t
SELECT NODE_CAPTION --节点内容
FROM [TM Decision Tree].CONTENt WHERE NODE_UNIQUE_NAME='00000000100'
//PredictProbability (DMX)返回指定状态的概率。
//PredictProbability(, [])
//如果省略预测状态,则将使用概率最大的状态,不包括“缺失状态”存储桶。若要包括“缺失状态”存储桶,请将 设置为INCLUDE_NULL。若要返回缺失状态的概率,请将 设置为 NULL。
SELECT [Bike Buyer],
PredictProbability([Bike Buyer],1) AS [BikeBuyer = Yes],
PredictProbability([Bike Buyer], 0) AS [BikeBuyer = No],
PredictSupport([Bike Buyer]) AS[Support],--PredictSupport (DMX)返回指定状态的支持值。PredictSupport(,[])单独查询预测某个人是否购买自行车,并且还确定对该预测的支持。
PredictStdev([Bike Buyer]) AS [StandardDeviation]--PredictStdev (DMX)返回指定列的预测标准偏差。PredictStdev()
FROM [TM Decision Tree]
NATURAL PREDICTION JOIN
(SELECT 28 AS [Age],'2-5 Miles' AS [Commute Distance],'GraduateDegree' AS [Education],0 AS [Number Cars Owned],0 AS [NumberChildren At Home]) AS t
//PredictSequence为一组指定的序列数据预测将来的序列值。
//PredictSequence(
//PredictSequence()
//PredictSequence()
//如果指定了 n 参数,则将返回下列值:
//如果 n 大于 0,则返回后 n 个步骤中最可能的顺序值。
//如果指定了 n-start 和 n-end,则返回从 n-start 到 n-end 的顺序值。
SELECT PredictSequence([Sequence Clustering].[v Assoc Seq LineItems],5)
From [Sequence Clustering]--客户最可能购买的五种产品的顺序。
//PredictTimeSeries (DMX)返回时序数据的未来预测值。 时序数据是连续的,可以存储在嵌套表或事例表中。PredictTimeSeries 函数将始终返回嵌套表。
//PredictTimeSeries(
//PredictTimeSeries(, n)
//PredictTimeSeries(, n-start, n-end)
//PredictTimeSeries()
//PredictTimeSeries(, n)
//PredictTimeSeries(, n-start, n-end)
//PredictTimeSeries(, n, REPLACE_MODEL_CASES | EXTEND_MODEL_CASES)PREDICTION JOIN
//PredictTimeSeries(, n-start, n-end, REPLACE_MODEL_CASES |EXTEND_MODEL_CASES) PREDICTION JOIN
//PredictTimeSeries(, n, REPLACE_MODEL_CASES | EXTEND_MODEL_CASES)PREDICTION JOIN
//PredictTimeSeries(, n-start, n-end, REPLACE_MODEL_CASES |EXTEND_MODEL_CASES) PREDICTION JOIN
//,
//指定要预测的列的名称。 列可以包含标量数据或表格格式数据。
//n指定要预测的后续步长数。 如果没有为 n 指定值,则默认为 1。
//n 不能是 0。 如果没有执行过至少一次预测,则函数将返回一个错误。
//n-start, n-end
//指定时序步长的范围。n-start 必须为整数,并且不能为 0。n-end 必须是大于 n-start 的整数。
//
//定义用于进行预测的外部数据。
//REPLACE_MODEL_CASES | EXTEND_MODEL_CASES
//指示如何处理新数据。
//REPLACE_MODEL_CASES 指定应使用新数据替换模型中的数据点。 但是,预测基于现有挖掘模型中的模式。
//EXTEND_MODEL_CASES 指定应将新数据添加到原始定型数据集。仅在新数据已用完之后才根据组合的数据集执行未来预测。
//这些参数仅在使用 PREDICTION JOIN 语句添加新数据时才可用。 如果使用 PREDICTION JOIN查询并且没有指定参数,则默认值为 EXTEND_MODEL_CASES。
//
--示例 1:预测时间段数
SELECT FLATTENED [Forecasting].[ModelRegion],PredictTimeSeries([Forecasting].[Quantity],3)AS t
FROM[Forecasting] WHERE [Model Region] = 'M200 Europe'OR [ModelRegion] = 'M200 Pacific'
--示例 2:添加新数据和使用 REPLACE_MODEL_CASES
SELECT [Forecasting].[Model Region],PredictTimeSeries([Forecasting].[Quantity],3,REPLACE_MODEL_CASES)
FROM[Forecasting]
PREDICTION JOIN
OPENQUERY([AdventureWorksDW2012],
'SELECT[ModelRegion], [Quantity]*2 as Quantity, [Amount]*2 asAmount,[TimeIndex]
FROM [dbo].vTimeSeries WHERE ModelRegion =N''M200 Pacific'' ') AS t
ON [Forecasting].[Model Region] = t.[ModelRegion] AND
//[Forecasting].[Reporting Date] = t.[ReportingDate]
AND [Forecasting].[Quantity] = t.[Quantity]AND[Forecasting].[Amount] = t.[Amount] and [Forecasting].[TimeIndex] = t.[TimeIndex]
--示例 3:添加新数据和使用 EXTEND_MODEL_CASES
SELECT [Model Region], PredictTimeSeries([Forecasting].[Quantity],5, EXTEND_MODEL_CASES)
FROM [Forecasting]
NATURAL PREDICTION JOIN
(SELECT 1 as [ReportingDate],10 as [Quantity],'M200 Europe' AS [Model Region],200508 as[Time Index]
UNIONSELECT 2 as [Reporting Date], 15 as [Quantity],'M200 Europe' AS [Model Region],200509 as [Time Index]) AS T
WHERE ([Model Region] = 'M200 Europe' OR [Model Region] = 'M200Pacific')
--返回序列中的统计值
SELECT FLATTENED [Model Region],
(SELECT $Time, [Quantity] as [PREDICTION],PredictVariance([Quantity]) AS [VARIANCE],PredictStdev([Quantity])AS [STDEV]
FROM PredictTimeSeries([Quantity], 3) AS t) AS t
FROM Forecasting WHERE [Model Region] = 'M200 Europe' OR [ModelRegion] = 'M200 North America'
//RangeMax (DMX)返回为离散化列发现的预测存储桶的高端值。
//RangeMax()
// RangeMax 函数可用于 SELECT DISTINCT FROM <模型> (DMX) 查询。与这种类型的查询一起使用时,标量列引用可以包含连续或离散的可预测列或输入列。
//与 SELECT FROM <模型> PREDICTION JOIN (DMX)一起使用时,RangeMin、RangeMid 和 RangeMax 函数返回指定存储桶的实际边界值。例如,如果对一个离散化列执行预测,查询将返回该离散化列中存储桶数的预测值。 RangeMin、RangeMid 和 RangeMax函数用于说明预测所指定的存储桶。
//当 RangeMax 函数与 PREDICTION JOIN 语句一起使用时,标量列引用只能包含可预测的离散列。
SELECT DISTINCT
RangeMin([Yearly Income]) AS [Bucket Minimum],
RangeMid([Yearly Income]) AS [Bucket Average],
RangeMax([Yearly Income]) AS [Bucket Maximum]
FROM [TM Decision Tree]
//StructureColumn(DMX)返回对应于指定事例的结构列的值,或者返回指定事例中的嵌套表的表值。--启用钻取权限,不然没办法,会有错误
//StructureColumn('structure columnname')结构列名称。事例或嵌套表挖掘结构列的名称。
//此函数是多态函数,可在允许有表达式(包括 SELECT 表达式列表、WHERE 条件表达式和 ORDER BY表达式)的语句中的任意位置使用。
//挖掘结构中列的名称是字符串值,因此必须用单引号括起来:例如,StructureColumn('列 1')。如果多个列具有相同的名称,则该名称在包含 SELECT 语句的上下文中解析。
//从使用 StructureColumn 函数的查询返回的结果受模型中任何筛选器存在的影响。也就是说,模型筛选器控制包含在挖掘模型中的事例。 因此,结构列查询可以只返回挖掘模型中使用的那些事例。有关说明挖掘模型筛选器对事例表和嵌套表的影响的代码示例,
//有关如何在 DMX SELECT 语句中使用此函数的详细信息,请参阅 SELECT FROM <模型>.CASES(DMX) 或 SELECT FROM <结构>.CASES
--示例查询 1:从挖掘结构返回列--DM
SELECT Gender,StructureColumn('CarMake')
FROM [ClusterDrillthrough7].CASES --挖掘模型一部分定义的 Gender 列
--示例查询 2:对结构列应用筛选器
--示例查询 3:选择嵌套表中的列
////select Gender,(select Product ,StructureColumn('Quantity') fromPurchases)
////from [PredictGenderNested-Trees7].CASES
--示例查询 4:筛选和返回嵌套表列
//////SELECT Gender,StructureColumn('CarMake')
//////FROM [ClusterDrillthrough7].CASES
SELECT Predict ([Association].[v Assoc Seq Line Items],INCLUDE_STATISTICS, 3, $SUPPORT)
FROM
[Association]--结果包含按支持值排序的前 3 个预测。 您可以将 $SUPPORT 替换为 $PROBABILITY 或$ADJUSTED_PROBABILITY,以便返回按概率或调整后的概率排名的预测。
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Women''s Mountain Shorts' as [Model]) AS [v AssocSeq Line Items]) AS t
SELECT
TopPercent--TopPercent 函数以降序形式返回表中最前面的几行,这些行的累积合计至少达到指定百分比
(
Predict([Association].[v Assoc Seq LineItems],INCLUDE_STATISTICS,10),
$SUPPORT,
50)
FROM
[Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Women''s Mountain Shorts' as [Model]) AS [v AssocSeq Line Items]) AS t
SELECT FLATTENED
TopSum--以降序形式返回表中最前面的几行,这些行的累积合计至少达到了指定值。TopSum 函数的第三个参数指定目标和(双精度)。若要获取概率总值为 50% 的最前面的产品行,请键入 .5。
(
Predict([Association].[v Assoc Seq LineItems],INCLUDE_STATISTICS,10),
$PROBABILITY,
.5)
FROM
[Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Women''s Mountain Shorts' as [Model]) AS [v AssocSeq Line Items]) AS t
--------------------------------------------------------------------------------------------------
算法的学习:
A. Microsoft时序算法:主要是根据过去的历史来预测未来某时段的序列值。时序算法可以应用于简单预测;也可以预测相互依赖的序列(找出序列之间的关系)。
http://msdn.microsoft.com/zh-cn/library/ms174923.aspx
1.DMX
--挖掘结构
CREATE MINING STRUCTURE [Wine Sales]
(
[Month]DATE KEY TIME,--key time是区别于其它结构的主要元素
[Fortified]DOUBLE CONTINUOUS,
[DryWhite] DOUBLECONTINUOUS,
[Sweet White] DOUBLECONTINUOUS,
[Red]DOUBLE CONTINUOUS,
[Rose]DOUBLE CONTINUOUS,
[Sparkling]DOUBLE CONTINUOUS,
[Average Red] DOUBLECONTINUOUS,
[Average White] DOUBLE CONTINUOUS)
--挖掘模型
ALTER MINING STRUCTURE [Wine Sales]
ADD MINING MODEL [Reds]
(
[Month],
[Fortified]PREDICT,
[Red]PREDICT,
[Rose]PREDICT
) USING Microsoft_Time_Series
WITH DRILLTHROUGH----所有时序模型必须启用
--训练模型(这边自己遇到的问题是在训练模型插入的时候,因为提示Missing_value_Substation错误,是因为在时间序列里面存在缺失值,所以要到VS里面,点击这个挖掘结构,点击右侧的挖掘模型,找到预测的列,单击右键,设置算法参数,找到Missing_value_Substation,中间那个值填写为Mean或者Previous或者数字)
INSERT INTO MINING STRUCTURE [Wine Sales]
( [Month], [Fortified], [Red], [Rose], [Average Red],[Dry White],[Sweet White], [Sparkling], [Average White])
OPENQUERY ([Chapter8Data],
'SELECTMonth,[Fortified], [Red], [Rose],([Fortified] + [Red] +[Rose]) / 3,[Dry White], [Sweet White],[Sparkling],([Dry White] + [Sweet White] + [Sparkling]) /3 FROM [Wine Sales]
ORDER BY [Month]')
--预测,下一年红酒的月销量
SELECT FLATTENED PredictTimeSeries([Red], 12) AS ForecastFROM [Reds]
// 返回辅助的统计信息,标准差,方差以及预测的节点Id
SELECT FLATTENED(SELECT *, PredictStdev([Red])AS [Stdev],PredictVariance([Red]) AS[Variance],
PredictNodeID([Red]) AS[NodeID]FROM PredictTimeSeries([Red],12))AS Forecast FROM [Reds]
// 执行假设场景的预测,指定了下两个月的销售量之后,预测红酒的未来预测值
SELECT FLATTENED PredictTimeSeries([Red], 3,12, EXTEND_MODEL_CASES) FROM [Reds]
NATURAL PREDICTION JOIN (SELECT 1 AS [Month], 4520 AS[Red]UNION SELECT 2 AS [Month], 4000 AS [Red]) ast
--浏览
http://msdn.microsoft.com/zh-cn/library/ms175331.aspx#BKMK_Tree
上面这张图有一部分是可以用公式的:根据右上角计算出的各个系数,
Fortified-6 < 1915.308
事例总计: 16
树节点公式:
Red = 528.054+ 0.608 * Red(-24) + 0.315 *Red(-12)
ARIMA 公式:
ARIMA({1,-0.153577793189906,5.56824005496368E-02,-1.25160605215983E-02,-0.268578985722401,-8.30790597773989E-02,0.43396139673502},1,{1,-8.34078413160105E-02})X ({1},0,{1,-0.243013868109919})(4) 截获:18.0740541690093