Usando DB2 XQuery para Extrair Resultados de Mineração de Dados Armazenados como PMML

Disseminar seus resultados de mineração de dados de forma efetiva

Mineração de dados é o processo de localizar regras e padrões em dados estruturados. A mineração de dados do DB2® usa o Intelligent Miner, que faz parte do InfoSphere® Warehouse. O Intelligent Miner® armazena esses resultado no formato Predictive Model Markup Language (PMML), que é baseado em XML. Desde o lançamento do DB2 9, as informações armazenadas em XML podem ser processadas de forma eficiente usando XQuery. Descubra como é fácil usar o DB2 XQuery para criar seus próprios métodos de acesso com base em seu resultados de mineração de dados.

Benjamin G. Leonhardi, Software Engineer, WSO2 Inc

Author Photo: Benjamin LeonhardiBenjamin Leonhardi é engenheiro de software para mineração de dados do InfoSphere Warehouse no IBM Research & Development Lab em Boeblingen, Alemanha. Ele trabalha com visualização de mineração, mineração de texto e soluções para relatórios de mineração.



Michael Haide, Software Developer, WSO2 Inc

Photo of Michael HaideMichael Haide é líder de equipe para Mineração de Dados do InfoSphere Warehouse no Laboratório de Pesquisa e Desenvolvimento da IBM em Boeblingen, Alemanha. Ele trabalha com kernel de mineração de dados e integração de banco de dados. Também trabalhou diversos anos no DB2 Net Search Extender como líder de equipe e arquiteto.



21/Mai/2009

Introdução

Este artigo mostra como combinar a funcionalidade XQuery do DB2 com os resultados de mineração de dados armazenados em XML usando a Mineração de Dados do InfoSphere Warehouse.

A Mineração de Dados do InfoSphere Warehouse fornece algoritmos para todas as tarefas comuns de mineração de dados, como tarefas da lista a seguir e os aplicativos de exemplo das tarefas:

  • Armazenamento em cluster, incluindo localizar segmentos de clientes importantes ou comportamento fraudulento
  • Regras de associação, incluindo melhora de vendas cruzadas ou de layout de loja
  • Padrões sequenciais, incluindo marketing seletivo ou previsão de falhas de peças
  • Classificação, incluindo análise de rotatividade ou diagnóstico médico
  • Regressão, incluindo previsão de reclamação de seguros ou gerenciamento de risco

Os resultados de todas essas tarefas de mineração de dados são chamados de modelos de mineração de dados e são armazenados em uma tabela usando o padrão PMML. Esse padrão é baseado em XML para permitir troca fácil entre diferentes provedores de mineração de dados. Esse modelo pode, então, ser aplicado a novos dados, o que é chamado de pontuação.

Por exemplo, pode haver a necessidade de classificar novos clientes considerando o risco de inadimplência. Um modelo PMML precisa armazenar todas as informações importantes sobre os resultados de mineração. O Intelligent Miner fornece um conjunto de funções do extrator SQL para obter as informações mais importantes do modelo.

Se for necessário extrair mais informações ou informações diferentes, este artigo descreve como isso pode ser feito. Este artigo também mostra o poder do DB2 XQuery e como usá-lo em funções definidas pelo usuário (UDFs) do DB2 ou em procedimentos armazenados do DB2 (STPs).


Entendendo XQuery

No DB2 9, pureXML introduziu o tipo de dados XML e possibilitou consultar e trabalhar com documentos XML no banco de dados DB2 de forma muito eficiente.

Há duas linguagens de consulta que podem ser usadas para extrair informações de documentos XML. A linguagem XPath é usada para navegar pela árvore XML e selecionar nós de acordo com as restrições fornecidas. XQuery é um superconjunto de XPath e inclui as expressões For, Let, Order by, Where e Return (também conhecidas como as expressões FLWOR [pronunciado flower]) para possibilitar consultas no estilo SQL mais complexas em documentos XML. Também é possível transformar documentos XML com XQuery de maneira semelhante a XSLT.

Dados de Amostra

Para usar pureXML, o banco de dados precisa ser codificado em UTF-8. Esse é o padrão para bancos de dados desde o release do DB2 9.5. Uma coluna XML pode ser criada como qualquer outra coluna. O código na Lista 1 cria uma pequena tabela de teste com uma coluna ID e uma coluna XML.

Lista 1. Criando uma Pequena Tabela de teste
db2 "CREATE TABLE XMLTEST (ID int, XMLCOLUMN XML)"

Para inserir XML na tabela, use a instrução INSERT, conforme mostrado na Lista 2. A cadeia de caracteres no comando é analisada na coluna XML. Certifique-se de usar o escape correto para aspas.

Lista 2. Inserindo XML
db2 "INSERT INTO XMLTEST VALUES (1, '<Person ... />')"

Os dados XML de amostra mostrados na Lista 3 serão usados posteriormente neste artigo. Cada fragmento XML Person é salvo em uma linha separada da coluna XML.

Lista 3. Inserindo XML
<Person>
	<Name>John Smith</Name>
	<Tel publish="false">555-8659</Tel>
</Person>
...
<Person>
	<Name>Mark Muster</Name>
	<Tel publish="true">555-7765</Tel>
</Person>

Usando XQuery para Recuperar Dados

As expressões XQuery podem ser usadas em expressões SQL. Para usar expressões XQuery fora do SQL, elas devem ser precedidas por XQUERY. Se XQuery for usado fora de uma consulta SQL, a coluna de entrada deve ser especificada com o comando db2-fn:xmlcolumn com um parâmetro para a coluna que contém a origem XML, conforme mostrado na Lista 4.

Lista 4. Usando Expressões XQuery Fora do SQL
db2 "XQUERY db2-fn:xmlcolumn('XMLTEST.XML')"

O conceito mais importante ao trabalhar com documentos XML é o caminho XML, que fornece uma maneira de endereçar nós e elementos na árvore XML. A expressão XPath na Lista 5 retorna os nós NAME das pessoas no documento, fornecendo um caminho a partir do nó-raiz do documento XML.

Lista 5. Retornando Nós de Nomes
XQUERY db2-fn:xmlcolumn('XMLTEST.XML')/Person/Name
...
<Name>John Smith</Name>
<Name>Mark Muster</Name>
2 record(s) selected.

XQuery fornece expressões no estilo SQL sofisticadas para consultar diversos documentos XML. O exemplo na Lista 6 usa as expressões FOR e WHERE para consultar pessoas cujos números de telefone não estão publicados. Atributos de nós XML podem ser acessados com o qualificador @. Observe que a expressão usada para verificar o atributo de publicação está entre colchetes.

Lista 6. Consultando Números de Telefone das Pessoas
XQUERY for $x IN db2-fn:xmlcolumn('XMLTEST.XML')/Person/Tel
    where $x[@publish='false'] return $x
...
<Tel publish="false">555-8659</Tel>
1 record(s) selected.

Apesar de XQuery pode ser usado para extrair nós XML e valores de um documento XML armazenado em uma tabela do DB2, é necessário ter uma maneira para extrair informações como uma tabela estruturada que pode ser lida por ferramentas que não podem ler XML. O método usado para isso no DB2 é a expressão XMLTABLE. Essa expressão cria uma tabela a partir da expressão XQuery. XMLTABLE é usada na instrução FROM de uma consulta SELECT. O primeiro argumento especifica a expressão XQuery que retorna os argumentos XML. O argumento COLUMNS especifica as colunas de saída da tabela, incluindo o nome da coluna, o tipo e a expressão XQuery relativa para cada fragmento XML.

Lista 7. Usando a Expressão XMLTABLE
select * from
    XMLTABLE ('db2-fn:xmlcolumn("XMLTEST.XML")/Person'
	    	COLUMNS
				name VARCHAR(20) PATH 'Name',
				tel VARCHAR(20) PATH 'Tel',
				published VARCHAR(5) PATH 'Tel/@publish'
		) AS X;

...
						
NAME                 TEL                  PUBLISHED
-------------------- -------------------- ---------
John Smith           555-8659             false
Mark Muster          555-7765             true

  2 record(s) selected.

Usando esse tipo de instrução select do DB2, é possível extrair todas as informações em documentos XML e passar as mesmas adiante como dados de tabela SQL. Para obter informações adicionais, consulte Recursos.


Entendendo PMML

Predictive Model Markup Language (PMML) é uma linguagem de marcações XML para descrever modelos de mineração de dados e para possibilitar a troca de modelos de mineração entre diferentes provedores de mineração de dados. Trocar o modelo possibilita que outros programas pontuem com relação a esses modelos de mineração de dados sem criar os próprios modelos. Consulte Recursos para obter a especificação PMML publicada no Web site do Grupo de Mineração de Dados.

Um modelo PMML geralmente segue esta estrutura:

  • Um nó raiz PMML, que mostra a versão de PMML usada
  • Um cabeçalho, que fornece informações gerais sobre o modelo, incluindo nome e data
  • Uma MiningBuildTask, que fornece informações sobre a configuração usada para construir o modelo
  • Um DataDictionary, que oferece informações sobre os campos usados para criar o modelo, incluindo o nome, o tipo e os valores

As informações do modelo dependem do modelo usado. A Lista 8 mostra a estrutura PMML para um modelo de armazenamento em cluster.

Lista 8. Estrutura PMML para um Modelo em Cluster
<?xml version="1.0" encoding="UTF-8" ?>

<PMML version="3.0" xmlns="http://www.dmg.org/PMML-3_0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.dmg.org/PMML-3_0 http://www.dmg.org/v3-0/pmml-3-0.xsd">
 <Header copyright="Copyright IBM Corp. 2002, 2007 All Rights Reserved">
  <Application name="IBM DB2 Intelligent Miner" version="9.5"/>
  <Timestamp>2008-11-23 23:03:09</Timestamp>
 </Header>
 <MiningBuildTask>
 	...
 <DataDictionary numberOfFields="8">
  ...
 <ClusteringModel modelName="BANK.CUSTOMERS_SEGMENTS" modelClass="centerBased"
    functionName="clustering" algorithmName="Kohonen" numberOfClusters="5"
    x-execTime="0.070000171661377" x-similarityThreshold="0.5"
    x-quality="0.780511795527719">	
    ...

O próximo exemplo usa um modelo de armazenamento em cluster baseado no algoritmo Kohonen. PMML suporta modelos de armazenamento em cluster baseados em centro e baseados em distribuição. Ambos têm o elemento ClusteringModel como um elemento de nível superior. Uma lista de clusters e uma medida para calcular a distância ou semelhança para novos registros para os diferentes clusters são incluídas. A Lista 9 mostra um modelo de cluster Kohonen baseado em centro.

Lista 9. Usando um Modelo de Cluster Kohonen Baseado em Centro
<ClusteringModel modelName="BANK.CUSTOMERS_SEGMENTS" modelClass="centerBased"
    functionName="clustering" algorithmName="Kohonen" numberOfClusters="5"
    x-execTime="0.070000171661377" x-similarityThreshold="0.5"
    x-quality="0.780511795527719">
 + <Extension name="Matrix">
 + <Extension name="X-Correlations">
 + <MiningSchema>
 + <ModelStats>
 <ComparisonMeasure kind="distance">
  <squaredEuclidean/>
 </ComparisonMeasure>
 <ClusteringField field="AGE" compareFunction="absDiff"
     x-quality="0.291742616514616"/>
 <ClusteringField field="AVERAGE_BALANCE" compareFunction="absDiff"
     x-quality="0.223507903713586"/>
 <ClusteringField field="GENDER" compareFunction="absDiff"
     x-quality="0.67909000081883"/>
 <ClusteringField field="ID" compareFunction="absDiff"
     x-quality="0.32252228279477"/>
 <ClusteringField field="MARITAL_STATUS" compareFunction="absDiff"
     x-quality="0.593752740606671"/>
 <ClusteringField field="NBR_YEARS" compareFunction="absDiff"
     x-quality="0.34454192375915"/>
 <ClusteringField field="NOT_USED" compareFunction="absDiff"
     x-quality="0.198193321261319"/>
 <ClusteringField field="SAVING_ACCOUNT" compareFunction="absDiff"
     x-quality="0.663013938830898"/>
 + <CenterFields>
 <Cluster name="1" x-quality="0.786176824083955">
 ...

Todos os atributos iniciados por x- são específicos do fornecedor e podem ser ignorados. Consulte Recursos para obter detalhes adicionais e exemplos de PMML no Web site do Grupo de Mineração de Dados.


Entendendo o Intelligent Miner

O Intelligent Miner é integrado ao DB2 usando UDFs e STPs. É possível usar um conjunto de instruções SQL ou a interface gráfica do InfoSphere Warehouse DesignStudio para criar um modelo de mineração de dados. A interface gráfica é a abordagem mais conveniente. Os modelos PMML são armazenados nas tabelas do DB2, que podem ser usadas para pontuar novos dados ou extrair informações.

Por exemplo, imagine um cenário no qual há dados de clientes de banco dos quais você deseja usar armazenamento em cluster para determinar os diferentes segmentos de clientes. Assegure que todas as informações relevantes dos clientes estejam combinadas em uma tabela ou visualização, conforme mostrado na Lista 10.

Lista 10. Vendo Dados de Clientes de Banco
db2 select * from bank.customers fetch first 3 rows only

ID     AGE  GENDER  MARITAL_STATUS  NBR_YEARS  SAVING_ACCOUNT  AVERAGE_BALANCE NOT_USED
------ --- -------  --------------  ---------   -------------   --------------  --------
120921  34    m          s             3              n                -23       n
223423  55    m          m             12             y                123       n
937212  25    m          s             2              y                388       n

  3 record(s) selected.

Para criar o modelo de armazenamento em cluster nos dados de amostra, use o procedimento armazenado IDMMX.BuildClusModel. Os parâmetros para o procedimento armazenado IDMMX.BuildClusModel são:

  • Nome do modelo
  • Nome da tabela ou visualização
  • Parâmetros específicos de mineração de dados

A Lista 11 mostra o comando para criar o modelo.

Lista 11. Criando o Modelo
db2 "call IDMMX.BuildClusModel('BANK.CUSTOMERS_SEGMENTS', 'BANK.CUSTOMERS',
'DM_setAlgorithm(''Kohonen'')')"

Quando o modelo é criado, use o Intelligent Miner Visualizer para consultar o modelo de maneira gráfica ou use as funções de extração existentes do Intelligent Miner para obter algumas das informações através de SQL. Por exemplo, você poderia extrair uma visão geral do modelo em cluster que mostra o número de clusters, os campos usados e a qualidade do modelo. A Lista 12 mostra o SQL a ser usado.

Lista 12. Usando um SQL para Extrair uma Visão Geral do Modelo de Cluster
SELECT
	"ID" AS "CLUSTERID",
	CAST ("NAME" AS CHAR(20)) AS "CLUSTERNAME",
	"SIZE",
	CAST ("HOMOGENEITY" AS DEC(5,2)) AS "HOMOGENEITY"
FROM TABLE
  (IDMMX.DM_getClusters((
	              SELECT "MODEL"
               	FROM IDMMX."CLUSTERMODELS"
	              WHERE "MODELNAME"='BANK.CUSTOMERS_SEGMENTS')))
	AS "CLUSTERS"
	ORDER BY SIZE DESC;

A Lista 13 mostra os resultados do SQL na Lista 12.

Lista 13. A Visão Geral Resultante do Modelos de Cluster
MODELNAME            NUMBER_CLUSTERS NUMBER_FIELDS MODEL_QUALITY
-------------------- --------------- ------------- -------------
BANK.CUSTOMERS_SEGME               7             7          0.81

1 record(s) selected.

Usando XQuery e Intelligent Miner Juntos

A maior parte das informações pode ser extraída com as funções de mineração de dados disponíveis, mas algumas informações não podem ser extraídas. É possível usar funções XQuery com funções do Intelligent Miner para ler as partes ocultas diretamente do modelo PMML.

O Intelligent Miner atualmente não permite extrair detalhes dos campos complementares do cluster. Um campo pode ser ativo ou complementar, dependendo do valor que tem para calcular os clusters. Por exemplo, os campos que são chaves principais no DB2 que sempre têm valores diferentes são movidos automaticamente para campos complementares, pois não podem fornecer insights para os clusters.

É possível localizar as informações ocultas no modelo PMML no nó XML MiningField. Se o atributo usageType tiver o valor Supplementary, isso indica um complementar. Um campo ativo é o tipo de uso padrão, portanto, não é indicado no arquivo PMML.

A Lista 14 mostra um exemplo de MiningSchema de PMML.

Lista 14. Codificando MiningSchema de PMML
<MiningSchema>
 <MiningField name="AGE"/>
 <MiningField name="AVERAGE_BALANCE"/>
	...
 <MiningField name="SAVING_ACCOUNT"/>
 <MiningField name="ID" usageType="supplementary"/>
</MiningSchema>

A Lista 15 mostra como um UDF no DB2 poderia ser implementado para extrair todos os campos do cluster e para mostrar o tipo de uso desses campos.

Lista 15. Implementando um UDF no DB2
CREATE FUNCTION getClusterMiningFields (mname varchar(128))
    RETURNS TABLE (name      varchar(20),
                   usagetype varchar(20))
    LANGUAGE SQL

		BEGIN ATOMIC RETURN
		   select X.name,
              CASE WHEN X.usageType IS NULL THEN 'active'
                   ELSE X.usageType END
       from XMLTable('$DATA//*:MiningField' PASSING
                     XMLPARSE(document (
                              select IDMMX.DM_expClusModel(cm.MODEL)
                              from IDMMX.CLUSTERMODELS cm
                              where MODELNAME=mname)) as "DATA"
                     columns
                     name varchar(20) path '@name',
                     usageType varchar(20) path '@usageType') as X;
		END@

Verifique em mais detalhes as diferentes partes da função. O UDF é declarado como uma função de tabela, o que significa que retorna uma tabela temporária e não apenas um único valor. Como é gravada em SQL, LANGUAGE é SQL. Para todas as outras opções de função de criação, os padrões são usados, o que frequentemente é um bom ponto de partida.

O corpo do UDF é implementado entre os tokens BEGIN e END. Todas as colunas de resultados são especificadas na parte selecionada da instrução SQL/XQuery. No exemplo, as colunas são X.name e X.usageType, que são colunas de saída da expressão XMLTABLE. A instrução de caso para X.usageType indica que o atributo XML ativo não é gravado no documento PMML.

XMLPARSE é necessário, pois o documento PMML em si não está armazenado diretamente em uma coluna XML. O documento precisa ser exportado de uma coluna BLOB, usando a função IDMMX.DM_expClusModel e, então, o documento deve ser copiado para um valor XML usando a função XMLPARSE.

Quando o documento estiver disponível como um valor XML, é possível processá-lo com XQuery, conforme mostrando no exemplo de XQuery nativo na Lista 15.

Para chamar a instrução da função de criação, coloque as instruções em um arquivo e chame-o com a sintaxe mostrada na Lista 16. Observe que o caractere convencional de fim de instrução não é usado, pois o caractere é necessário no UDF.

Lista 16. Chamando o Arquivo que Contém Instruções de Função de Criação
db2 -td@ -vf createClusterFieldUDF.db2

Ao chamar o UDF em uma instrução select , obtém-se as informações sobre os campos, incluindo quais campos são ativos ou complementares, conforme mostrado na Lista 17.

Lista 17. Lendo as Informações sobre os Campos
db2 select t1.name, t1.usagetype from table
(getClusterMiningFields('BankCustomerSegments')) t1				

NAME                 USAGETYPE
-------------------- --------------------
AGE                  active
NBR_YEARS_CLI        active
GENDER               active
MARITAL_STATUS       active
PROFESSION           active
SAVINGS_ACCOUNT      active
HAS_LIFE_INSURANCE   active
INT_CREDITCARD       active
ONLINE_ACCESS        active
JOINED_ACCOUNTS      active
BANKCARD             active
CLIENT_ID            supplementary
AVERAGE_BALANCE      active
NO_CRED_TRANS        active
NO_DEBIT_TRANS       active

  15 record(s) selected.

A mesma funcionalidade também poderia ser colocada em um STP. A sintaxe para criar o STP é diferente, mas o código em si é exatamente o mesmo, conforme mostrado na Lista 18.

Lista 18. Usando STP
CREATE PROCEDURE getClusterMiningFields
(
  in mname varchar(128)
)
  LANGUAGE SQL
  RESULT SETS 1
BEGIN
  DECLARE cursor1 CURSOR WITH RETURN FOR
		   select X.name,
              CASE WHEN X.usageType IS NULL THEN 'active'
                   ELSE X.usageType END
       from XMLTable('$DATA//*:MiningField' PASSING
                     XMLPARSE(document (
                              select IDMMX.DM_expClusModel(cm.MODEL)
                              from IDMMX.CLUSTERMODELS cm
                              where MODELNAME=mname)) as "DATA"
                     columns
                     name varchar(20) path '@name',
                     usageType varchar(20) path '@usageType') as X;
  OPEN cursor1;
END@

É possível chamar STP a partir da janela de linha de comando do DB2 usando a instrução de chamada. A saída, conforme mostrado na Lista 19, é a mesma que você viu na implementação do UDF.

Lista 19. Resultados de Chamar o DTP a partir da Janela de Linha e Comando do DB2
db2 call getClusterMiningFields('BankCustomerSegments')

  Result set 1
  --------------

  NAME                 2
  -------------------- --------------------
  AGE                  active
  NBR_YEARS_CLI        active
  GENDER               active
  MARITAL_STATUS       active
  PROFESSION           active
  SAVINGS_ACCOUNT      active
  HAS_LIFE_INSURANCE   active
  INT_CREDITCARD       active
  ONLINE_ACCESS        active
  JOINED_ACCOUNTS      active
  BANKCARD             active
  CLIENT_ID            supplementary
  AVERAGE_BALANCE      active
  NO_CRED_TRANS        active
  NO_DEBIT_TRANS       active

  15 record(s) selected.

  Return Status = 0

Usando Ferramenta do InfoSphere Warehouse para um Exemplo de Função Definida pelo Usuário

O InfoSphere Warehouse DesignStudio está disponível com a ferramenta integrada para desenvolvimento de STPs e UDFs Java® e SQL. O segundo exemplo deste artigo cria um UDF que lê informações de modelo de um Modelo de Associação. Essas informações estão disponíveis no Association Visualizer, mas não possuem nenhuma função extratora SQL correspondente. A ferramentas ajuda na criação, implementação e teste do UDF.

Para usar a ferramenta:

  1. Abra o InfoSphere Warehouse DesignStudio.
  2. Alterne para a perspectiva Dados selecionando Janela > Abrir Perspectiva > Outra.
  3. Se a perspectiva Dados não estiver na lista, selecione Mostrar Tudo e selecione Dados na lista. Deverá ver um Explorador de Projetos Dados no canto esquerdo.
  4. Crie um novo Projeto de Desenvolvimento de Dados selecionando Arquivo > Novo > Projeto de Desenvolvimento de Dados.
  5. Nome do novo projeto PMMLExtraction.
  6. Selecione um banco de dados que seja ativado para mineração e que contenha um modelo de Associação. Para este exemplo, selecione o banco de dados de amostra DWESAMP e clique em Concluir. Deve-se ter agora um novo projeto Desenvolvimento de Dados que possui subpastas para UDFs, STPs e outros objetos de banco de dados, conforme mostrado na Figura 1.
Figura 1. Perspectiva Dados do DesignStudio
Catura de tela: janela ASSOCINFORMATIONEXTRACTOR em Design Studio mostrando DWESAMP selecionadona janela do banco de dados Explorer

Clique aqui para obter uma visualização maior da Figura 1.

Para criar uma função SQL definida pelo usuário:

  1. Crie um novo UDF selecionando Novo > Função Definida pelo Usuário e clique com o botão direito do mouse na pasta Funções Definidas pelo Usuário .
  2. Altere o nome do UDF para AssocInformationExtractor e certifique-se de que Language seja SQL.
  3. Clique em Concluir. Isso criar um UDF muito básico. Agora é possível incluir a lógica desejada.

Os modelos de associação contêm diversas estatísticas globais, incluindo o número de transações e o número de conjuntos de itens. É possível visualizar essas estatísticas no Association Visualizer do InfoSphere Warehouse na guia Estatísticas, conforme mostrado na Figura 2.

Figura 2. Estatísticas Globais no Association Visualizer
Catura de tela: Janela Association Visualizer mostrando Estatísticas Globais e Estatísticas para Visible Objects para MBA.RULES

Essas informações são salvas no modelo PMML como atributos do nó do modelo de Associação, conforme mostrado na Lista 20.

Lista 20. Atributos do Modelo de Associação
<PMML ...

	<AssociationModel
		modelName="MBA.RULES"
		functionName="associationRules"
		algorithmName="SIDE"
		numberOfTransactions="34734"
		maxNumberOfItemsPerTA="242"
		avgNumberOfItemsPerTA="2.87349571025508"
		minimumSupport="0.001"
		minimumConfidence="0.1"
		lengthLimit="4"
		numberOfItems="25"
		numberOfItemsets="62"
		numberOfRules="74"
		x-quality="1">

O UDF em si é muito semelhante ao que foi feito no primeiro exemplo deste artigo. Obtém o nome do modelo como um parâmetro e retorna uma tabela com uma coluna para cada estatística. Os modelos de Associação são agrupados com modelos de Sequência como modelos de Regra, que são salvos na tabela IDMMX.RULEMODELS. Como há somente um nó AssociationModel no modelo PMML, seu xPath pode ser gravado como $DATA//*:AssociationModel, o que procura um nó AssociationModel com quaisquer nós-pais. A Lista 21 mostra o código completo do UDF a ser inserido na visualização Origem do editor no DesignStudio.

Lista 21. Código do UDF para a Visualização Origem
CREATE FUNCTION ASSOCINFORMATIONEXTRACTOR (mname varchar(128))
  RETURNS TABLE (numberTransactions int,
  				 averageNumberItemsPerTransaction real,
  				 maximumNumberItemsPerTransaction int,
  				 numberItemSets int,
  				 numberSingletonItemSets int,
  				 minimumRuleSupport real,
  				 minimumRuleConfidence real,
  				 maximumRuleLength int)
  LANGUAGE SQL
  MODIFIES SQL DATA
  NO EXTERNAL ACTION
  DETERMINISTIC

BEGIN ATOMIC

  RETURN select X.numberTransactions,
  				X.averageNumberItemsPerTransaction,
  				X.maximumNumberItemsPerTransaction,
  				X.numberItemSets,
  				X.numberSingletonItemSets,
  				X.minimumRuleSupport,
  				X.minimumRuleConfidence,
  				X.maximumRuleLength	from
     XMLTable('$DATA//*:AssociationModel' PASSING XMLPARSE(document
        (select IDMMX.DM_expRuleModel(cm.MODEL) FROM IDMMX.RULEMODELS cm
        where MODELNAME=mname)) as "DATA"
        columns
        numberTransactions int  path '@numberOfTransactions',
        averageNumberItemsPerTransaction real path '@avgNumberOfItemsPerTA',
        maximumNumberItemsPerTransaction int path '@maxNumberOfItemsPerTA',
        numberItemSets int path '@numberOfItemsets',
        numberSingletonItemSets int path '@numberOfItems',
        minimumRuleSupport real path '@minimumSupport',
        minimumRuleConfidence real path '@minimumConfidence',
        maximumRuleLength int path '@lengthLimit'
        ) as X ;

END

Para implementar esse UDF no banco de dados:

  1. Clique com o botão direito do mouse no Explorador de Projetos Dados e selecione Implementar.
  2. Insira o esquema para o UDF, como o exemplo DB2XML. As outras configurações padrão implementam isso no banco de dados atual, eliminam UDFs com um nome semelhante e constroem o código para UDFs Java.
  3. Clique em Concluir para implementar o UDF. Você verá uma mensagem Implementação bem-sucedida na visualização Saída de Dados na parte inferior à direita.
  4. Use o procedimento a partir da linha de comando ou execute-o a partir do DesignStudio clicando com o botão direito do mouse em Executar.
  5. Na janela Especificar Valores de Parâmetros, insira o nome do modelo de um modelo de Associação existente. Para o exemplo do InfoSphere Warehouse, insira MBA.RULES. Na visualização saída de dados, é possível ver o conjunto resultante com estatísticas globais do modelo, conforme mostrado na Figura 3.
Figura 3. Conjunto de Resultados de Estatísticas Globais
Catura de tela: guia de saída de dados mostrando resultados de ASSOCINFORMATIONEXTRACTOR(mname VARCHAR(128))

Também é possível usar a ferramenta InfoSphere Warehouse Data para desenvolver e depurar UDFs e STPs.


Conclusão

O artigo mostrou como é fácil gravar suas próprias funções de extração PMML usando XQuery combinado ao Intelligent Miner e passar os resultados como dados relacionais para seu SQL. Nenhuma linguagem de programação é necessária e o processo de criação de UDFs é mais fácil, pois é suportado por ferramentas gráficas.

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=423849
ArticleTitle=Usando DB2 XQuery para Extrair Resultados de Mineração de Dados Armazenados como PMML
publish-date=05212009