Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SQLServer08_DM_Nesterov

.pdf
Скачиваний:
167
Добавлен:
07.02.2016
Размер:
16.46 Mб
Скачать

Инструкция NATURAL PREDICTION JOIN автоматически сопоставляет имена столбцов исходного запроса, совпадающих с именами столбцов модели. В случае использования инструкции NATURAL PREDICTION предложение ON можно пропустить.

В списке select expression list и выражении condition expression можно указывать прогнозирующие функции, не возвращающие табличного выражения.

Рассмотрим теперь несколько примеров построения прогнозов.

Одноэлементный запрос (прогноз в реальном времени)

Одноэлементным будем называть запрос, в котором исходные данные для прогнозирования не выбираются из источника, а явно указаны в тексте запроса. Такой запрос может формироваться «налету», например, на основе введенных пользователем данных, и тут же выдавать результаты прогноза.

Ниже приведен пример подобного прогнозирующего запроса к модели TM Decision Tree для оценки того, станет ли покупателем велосипеда человек в возрасте 35 лет, проживающий в 5-10 милях от места работы, владеющий одним домом, двумя автомобилями, с двумя детьми в семье (значения перечислены в том порядке, как идут в листинге). Запрос возвращает прогнозируемое логическое значение столбца Bike Buyer и набор табличных значений, возвращенных функцией 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],

81

2 AS [Number Cars Owned],

2 AS [Total Children]) AS t

Здесь нужно отметить, что за счет использования конструкции NATURAL PREDICTION JOIN определять соответствия между столбцами модели и набора входных данных не потребовалось.

Запрос с использованием функции OPENQUERY

Втом случае, когда требуется сделать прогноз для множества вариантов, которые берутся из таблицы базы данных, можно использовать функцию OPENQUERY, аналогично тому, как это делалось при заполнении структуры. При этом предварительно требуется создать представление источника данных (например, с помощью BI Dev

Studio).

Вприведенном ниже примере имена столбцов таблицы отличаются от имен столбцов, содержащихся в модели интеллектуального анализа данных, поэтому нужно использовать предложение ON. Запрос возвращает список имен (FirstName) и фамилий (LastName) каждого человека в таблице ProspectiveBuyer наряду с логическим столбцом, указывающим на вероятность покупки им велосипеда, где 0 означает «вероятно, не будет покупать велосипед», а 1 означает «вероятно, купит велосипед». Последний столбец содержит значение вероятности прогнозируемого результата, возвращаемое функ-

цией PredictProbability.

SELECT t.[LastName], t.[FirstName],

[TM Decision Tree].[Bike Buyer],

PredictProbability([Bike Buyer]) From

[TM Decision Tree] PREDICTION JOIN

OPENQUERY([Adventure Works DW2008R2],

'SELECT [LastName], [FirstName], [MaritalStatus],

82

[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]

Использование функции Predict

Функция Predict возвращает спрогнозированное значение или набор значений для заданного столбца. Она является полиморфной, и ее поведение зависит от того, подставляется ли в качестве аргумента имя обычного столбца или вложенной таблицы. Синтаксис будет следующим:

Predict(<scalar column reference>, [option1], [option2], [option n], [INCLUDE_NODE_ID], n)

или

Predict(<table column reference>, [option1], [option2], [option n], [INCLUDE_NODE_ID], n)

В то же время, просто выбор прогнозируемого столбца в заголовке SELECT, аналогичен вызову функции PREDICT с параметрами по умолчанию. Например, если при создании модели указано что столбец Gender (пол) – прогнозируемый, то SELECT [Gender]

83

будет аналогично Predict([Gender], EXCLUDE_NULL). Где опция EXCLUDE_NULL указывает на то, что пустые значения исключаются.

Более подробно с возможностями функции PREDICT можно ознакомиться в справочнике по функциям расширений интеллектуального анализа данных [13].

Прогнозирование наиболее вероятного значения

Если использовать следующий синтаксис оператора SELECT:

SELECT <expression list> [TOP <n>] FROM <model> [WHERE <condition list>]

[ORDER BY <expression> [DESC|ASC]]

и в списке expression list указать только прогнозируемые столбцы, то оператор выполнит пустое прогнозирующее соединение и возвратит наиболее вероятные значения для указанных столбцов. Для создания прогноза используется только содержимое модели интеллектуального анализа данных. Например:

SELECT ([Bike Buyer]) FROM [TM_Naive_Bayes]

выдаст наиболее часто встречающееся значение столбца Bike Buyer.

Создание копии модели – оператор SELECT INTO

В заключение обзора возможностей оператора SELECT, рассмотрим создание копии существующей модели интеллектуального анализа данных. Для этого используется синтаксис:

SELECT INTO <new model>

USING <algorithm> [(<parameter list>)]

[WITH DRILLTHROUGH[,] [FILTER(<expression>)]] FROM <existing model>

где new model – имя для новой создаваемой модели;

algorithm – название используемого новой моделью алгоритма интеллектуального анализа данных;

84

parameter list – cписок через запятую параметров алгоритма; expression – выражение, определяющее фильтр для значений, попадающих в новую модель;

existing model – имя существующей модели для копирования. Если существующая модель является обученной, новая модель

автоматически обрабатывается при выполнении этой инструкции. В противном случае, новая модель остается необработанной.

Например, приведенный ниже фрагмент кода создает новую модель New_Clustering на базе существующей модели интеллектуального анализа данных TM Clustering. В обоих случаях используется алгоритм кластеризации. Но в новой модели параметр CLUSTER_COUNT изменяется так, чтобы существовало максимум пять кластеров, тогда как значение по умолчанию равно 10.

SELECT * INTO [New_Clustering]

USING [Microsoft_Clustering] (CLUSTER_COUNT = 5) FROM [TM Clustering]

85

4.ОСОБЕННОСТИ ИСПОЛЬЗОВАНИЯ ВСТРОЕННЫХ АЛГОРИТМОВ ИНТЕЛЛЕКТУАЛЬНОГО АНАЛИЗА СУБД MS SQL SERVER 2008

4.1УПРОЩЕННЫЙ АЛГОРИТМ БАЙЕСА

Впредыдущих разделах был рассмотрен формат команд DMX для создания структур и моделей интеллектуального анализа данных.

Вчастности, создать структуру, включающую одну модель можно с помощью следующей команды:

CREATE [SESSION] MINING MODEL <model>

(

[(<column definition list>)]

)

USING <algorithm> [(<parameter list>)] [WITH DRILLTHROUGH]

Если создается модель, использующая упрощенный алгоритм Байеса, то в качестве названия алгоритма надо указать

Microsoft_Naive_Bayes. Кроме того надо учитывать следующее:

-тип содержимого для входного атрибута может быть

Cyclical, Discrete, Discretized, Key, Table и Ordered;

для прогнозируемого – Cyclical, Discrete, Discretized, Table и Ordered;

-обработка атрибутов типа Continuous (непрерывные) не допускается;

-должен быть определен хотя бы один выходной атрибут;

-алгоритм не поддерживает детализацию, соответственно опция

WITH DRILLTHROUGH неприменима.

Рассмотрим пример создания модели, прогнозирующей значение атрибута Bike Buyer (покупатель велосипеда) на основе значений атрибутов Age (возраст), Number Cars Owned (число машин в собственности), ключевой атрибут – Customer Key.

86

CREATE MINING MODEL vTM1_NB ( [Customer Key] LONG KEY, [Age] LONG DISCRETIZED,

[Number Cars Owned] LONG DISCRETE, [Bike Buyer] LONG DISCRETE PREDICT_ONLY) USING Microsoft_Naive_Bayes

После выполнения данной инструкции будет создана структура vTM1_NB_Structure и модель vTM1_NB со значениями параметров, принятыми по умолчанию. Эти параметры приведены на рисунке 4.1 (окно просмотра параметров алгоритма из среды BI Dev Studio).

Рис.4.1. Параметры по умолчанию для упрощенного алгоритма Байеса.

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

MAXIMUM_INPUT_ATTRIBUTES – указывает максимальное ко-

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

87

самые важные и проигнорирует остальные. Установка этого значения равным 0, отключает выбор характеристик для входных атрибутов, т.е. рассматриваться будут все входные атрибуты. Значение по умолчанию – 255.

MAXIMUM_OUTPUT_ATTRIBUTES – аналогично задает макси-

мальное количество выходных атрибутов, которые алгоритм может обработать перед вызовом выбора характеристик. Установка этого значения равным 0 отключает выбор характеристик для выходных атрибутов. Значение по умолчанию равно 255.

MINIMUM_DEPENDENCY_PROBABILITY – задает минималь-

ную или «пороговую» вероятность того, что входной атрибут влияет на значение выходного. Значение используется для ограничения размера содержимого, формируемого алгоритмом. Это свойство может быть установлено равным от 0 до 1. Большие значение уменьшают количество атрибутов в содержимом модели. Значение по умолчанию равно 0,5.

MAXIMUM_STATES – указывает максимальное количество состояний атрибутов, поддерживаемое алгоритмом. Если количество состояний атрибутов превышает максимально возможное, то алгоритм использует наиболее частые состояния атрибутов, а остальные – считает отсутствующими. Значение по умолчанию – 100.

4.2 ДЕРЕВЬЯ РЕШЕНИЙ И ЛИНЕЙНАЯ РЕГРЕССИЯ

При использовании языка DMX, создание модели для прогнозирования дискретного атрибута с помощью алгоритма Microsoft Decision Trees может выглядеть примерно следующим образом:

CREATE MINING MODEL vTM1_DT ( [Customer Key] LONG KEY, [Age] LONG CONTINUOUS,

[Number Cars Owned] LONG DISCRETE, [Bike Buyer] LONG DISCRETE PREDICT_ONLY) USING Microsoft_Decision_Trees

88

Обратите внимание, что в отличие от рассмотренного ранее примера создания модели на базе упрощенного алгоритма Байеса, в данном случае допустим тип содержимого Continuous, и необязательно проводить дискретизацию непрерывных числовых параметров при создании структуры и модели. В то же время надо учитывать, что если прогнозируемый атрибут дискретен, а входные данные непрерывны, вход непрерывных столбцов автоматически дискретизуется [6].

Несколько иначе будет выглядеть создание модели для прогнозирования значений непрерывного атрибута. Здесь алгоритму понадобится использовать независимую переменную-регрессор. Можно это явно указать при создании модели. В приведенном ниже примере мы хотим прогнозировать годовой доход в зависимости от возраста и числа машин. При этом возраст можно явно указать в качестве потенциального регрессора.

CREATE MINING MODEL vTM2_DT

(

[Customer Key] LONG KEY,

[Age] LONG REGRESSOR CONTINUOUS,

[Number Cars Owned] LONG DISCRETE,

[Yearly Income] LONG CONTINUOUS PREDICT_ONLY

)

USING Microsoft_Decision_Trees

В то же время, как отмечается в MSDN [6], если столбец указан как регрессор, это не значит, что он будет использован в этом качестве в окончательной модели. И наоборот, алгоритм дерева принятия решений секционирует набор данных на области со значимыми шаблонами, даже если для столбца не задан флаг REGRESSOR.

Можно применить параметр модели FORCE_REGRESSOR для обеспечения того, чтобы использовался конкретный регрессор. Этот параметр может применяться с алгоритмом дерева принятия решений

иалгоритмом линейной регрессии.

Ираз уж речь зашла об алгоритме линейной регрессии рассмотрим, как создать соответствующую модель.

89

CREATE MINING MODEL X_LR

(

[ID] LONG KEY,

[X]LONG REGRESSOR CONTINUOUS,

[Y]LONG CONTINUOUS PREDICT

)

USING Microsoft_Linear_Regression

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

1) Каждая модель должна содержать один числовой или текстовый столбец, который однозначно идентифицирует каждую запись (тип key). Составные ключи не допускаются.

2)Необходимо наличие как минимум одного прогнозируемого столбца. В модель можно включить несколько прогнозируемых атрибутов, однако они должны иметь непрерывные числовые типы данных. Тип данных datetime нельзя использовать в качестве прогнозируемого атрибута даже в случае, если собственный формат хранения данных является числовым.

3)Во входных столбцах должны содержаться непрерывные числовые данные, кроме того, они должны иметь подходящий тип.

Теперь перейдем к рассмотрению возможных параметров моделей деревьев решений и линейной регрессии, которые можно использовать для «тонкой настройки» алгоритма.

COMPLEXITY_PENALTY – управляет ростом дерева решений. Это число в диапазоне от 0 до 1 устанавливающее, какой штраф алгоритм применяет к сложным деревьям. Низкое значение увеличивает количество разбиений, а высокое количество – уменьшает. Если число входных атрибутов от 1 до 9, то значением по умолчанию является 0,5; если от 10 до 99 – 0,9; для 100 и более атрибутов значением по умолчанию является 0,99.

90

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]