Escolar Documentos
Profissional Documentos
Cultura Documentos
Aprovada por:
___________________________________________________
Prof. Nelson Francisco Favilla Ebecken, D.Sc.
___________________________________________________
Prof. Alexandre Gonçalves Evsukoff, Dr.
___________________________________________________
Prof. Alvaro Luiz Gayoso de Azeredo Coutinho, D.Sc.
___________________________________________________
Profa. Marta Lima de Queirós Mattoso, D.Sc.
___________________________________________________
Prof. Sérgio Scheer, D.Sc.
ii
Resumo da Tese apresentada à COPPE/UFRJ como parte dos requisitos necessários
para a obtenção do grau de Doutor em Ciências (D.Sc.)
Maio / 2003
iii
Abstract of Thesis presented to COPPE/UFRJ as a partial fulfillment of the requirements
for the degree of Doctor of Science (D.Sc.)
May / 2003
iv
DEDICATÓRIA
À minha esposa, Adevanilde, e aos meus filhos, Sandra e Marcio, pelo incentivo
e compreensão pelas incontáveis horas extras, dedicadas a esta tese, que foram
suprimidas do convívio familiar.
v
AGRADECIMENTOS
vi
CONTEÚDO
I. Introdução_______________________________________________________________________________ 1
II. Trabalhos Correlatos à Integração da Tecnologia de DM com SGBDs _______________________ 5
II.1 Projeto Quest________________________________________________________________________ 5
II.2 Projeto dbMiner _____________________________________________________________________ 5
II.3 Outros Trabalhos_____________________________________________________________________ 6
II.4 Tecnologia OLE DB DM_______________________________________________________________ 6
III. Processo de KDD ________________________________________________________________________ 8
IV. Classificador SNBi ______________________________________________________________________ 11
IV.1 Formulação do Classificador SNBi ___________________________________________________ 12
IV.2 Algoritmos de Treinamento e Predição do Classificador SNBi__________________________ 15
V. Provedor de Recursos de Mineração de Dados DMclcMine _______________________________ 18
V.1 Sistemas de Integração com SGBDs _________________________________________________ 18
V.1.1 Sistemas Externos ______________________________________________________________ 18
V.1.2 Sistemas Internos ______________________________________________________________ 19
V.1.3 Sistemas Acoplados ___________________________________________________________ 19
V.1.3.1 Sistemas de Acoplamento Íntimo __________________________________________ 19
V.1.3.2 Sistemas de Acoplamento por API _________________________________________ 20
V.2 Tecnologia OLE DB DM _____________________________________________________________ 20
V.3 Arquitetura de Acesso Universal de Dados ___________________________________________ 22
V.4 Ferramentas _______________________________________________________________________ 23
V.5 Implementação do Provedor DMclcMine____________________________________________ 23
V.5.1 Exemplo AllElet ________________________________________________________________ 24
V.5.2 Operações Fundamentais de um Provedor de Recursos de DM __________________ 25
V.5.3 Criando o Modelo de DM ______________________________________________________ 25
V.5.4 Povoando o Modelo de DM ___________________________________________________ 26
V.5.5 Predizendo Atributos___________________________________________________________ 30
V.5.6 Expondo o Modelo de DM _____________________________________________________ 30
VI. Experimentos Computacionais__________________________________________________________ 34
VI.1 Waveform - Reconhecimento de Formas de Onda __________________________________ 35
VI.2 Meteo - Previsão de Tempo ________________________________________________________ 39
VI.3 Insurance - Dados de Seguro de Vida _______________________________________________ 41
VI.3.1 Dados Preparados ____________________________________________________________ 42
VI.3.2 Dados Originais _______________________________________________________________ 44
VI.4 Estudo de Desempenho____________________________________________________________ 45
VI.4.1 Variação do Número de Atributos de Dados ___________________________________ 45
VI.4.2 Variação do Número de Casos ________________________________________________ 46
VI.4.3 Variação do Número de Estados dos Atributos de Dados________________________ 51
VI.4.4 Variação do Número de Atributos de Predição _________________________________ 52
vii
VII. Conclusão ____________________________________________________________________________ 53
VIII. Trabalhos Futuros______________________________________________________________________ 54
Referências_______________________________________________________________________________ 55
Referências Complementares _____________________________________________________________ 65
Apêndice A. Classificador Bayesiano Simples _______________________________________________ 78
Apêndice B. Tecnologia OLE DB ___________________________________________________________ 82
Apêndice C. Detalhes da Implementação _________________________________________________ 84
C.1 Preparando o Ambiente de Desenvolvimento _______________________________________ 84
C.2 Kit de Recursos OLE DB DM _________________________________________________________ 85
C.3 Implementando o Provedor Exemplo________________________________________________ 86
C.4 Nomeando Variáveis_______________________________________________________________ 88
C.5 Implementando o Modo de Funcionamento Isolado _________________________________ 89
C.6 Criando um Novo Provedor_________________________________________________________ 91
C.7 Modificando o Nome de um Algoritmo______________________________________________ 93
C.8 Corrigindo os Arquivos de Análise de Comandos_____________________________________ 94
C.9 Implementando um Novo Algoritmo ________________________________________________ 94
C.10 Inserindo Suporte para uma Nova Propriedade _____________________________________ 96
C.11 Inserindo Códigos de Erros_________________________________________________________ 96
C.12 Armazenando e Recuperando Arquivos XML _______________________________________ 97
C.13 Corrigindo Erros de Programação __________________________________________________ 98
C.13.1 Executando _________________________________________________________________ 99
C.13.2 Removendo Arquivos Indesejados ____________________________________________ 99
C.14 Construindo a Versão Final _______________________________________________________ 100
C.15 Arquivos Modificados ____________________________________________________________ 101
C.16 Listagens ________________________________________________________________________ 104
Apêndice D. Parâmetros do Classificador MSDT____________________________________________ 152
D.1 COMPLEXITY_PENALTY _____________________________________________________________ 152
D.2 MINIMUM_LEAF_CASES ____________________________________________________________ 152
D.3 SCORE_METHOD __________________________________________________________________ 152
D.4 SPLIT_METHOD ____________________________________________________________________ 153
Apêndice E. Detalhes dos Experimentos Computacionais __________________________________ 154
E.1 Utilitários DTS ______________________________________________________________________ 154
E.2 Waveform - Reconhecimento de Formas de Onda __________________________________ 155
E.2.1 Geração de Dados ___________________________________________________________ 158
E.2.2 Criação do Banco de Dados __________________________________________________ 161
E.2.3 Utilitários DTS__________________________________________________________________ 165
E.2.4 Comandos SQL DM ___________________________________________________________ 168
E.3 Meteo - Previsão de Tempo ________________________________________________________ 169
E.3.1 Criação do Banco de Dados __________________________________________________ 170
E.3.2 Utilitários DTS__________________________________________________________________ 176
E.3.3 Comandos SQL DM ___________________________________________________________ 178
E.4 Insurance - Dados de Seguro de Vida_______________________________________________ 180
viii
E.4.1 Criação do Banco de Dados __________________________________________________ 187
E.4.2 Utilitários DTS__________________________________________________________________ 201
E.4.3 Comandos SQL DM ___________________________________________________________ 203
E.5 Estudo de Desempenho ___________________________________________________________ 206
E.5.1 Geração de Dados ___________________________________________________________ 206
E.5.2 Criação do Banco de Dados __________________________________________________ 207
E.5.3 Utilitários DTS__________________________________________________________________ 213
E.5.4 Comandos SQL DM ___________________________________________________________ 215
ix
FIGURAS
x
TABELAS
xi
LISTAGENS
xii
CONVENÇÕES
Exemplo Descrição
Recupere s tj
xiii
SIGLAS
DLL Dynamic Link Library Arquivo que contém funções que são
vinculadas ao aplicativo que as utiliza
em tempo de execução
xiv
Sigla Descrição em inglês Descrição
SQLOLEDB Microsoft® OLE DB Provider for SQL Provedor OLE DB de Dados do MSSQL
Server
xv
I. Introdução
1
Server™ 2000 Enterprise) (MICROSOFT, 20001), que possuem recursos para manipulação
de terabytes de dados com processamento paralelo de consultas (através de
múltiplos servidores com multiprocessadores) utilizando microcomputadores
(MICROSOFT, 19981).
Este SGBD pode ser utilizado em servidores equipados com até 32 processadores
e 64 gigabytes de memória. Aplicações que exigem o processamento de uma
quantidade muito elevada de dados podem fazer uso de uma federação de
servidores (agrupamento de servidores que trabalham em conjunto). Recursos de
OLAP (Online Analytical Processing) e de DM (Data Mining) são disponibilizados através
do módulo de Serviços de Análise (Analysis Services) do MSSQL.
Os recursos de DM são integrados internamente com as fontes de dados
relacionais e os cubos de dados de OLAP, sendo implementados com o uso da
tecnologia OLE DB DM (Object Linking and Embedding Database for Data Mining), que
são um conjunto de interfaces que permite a integração de recursos de DM entre
aplicativos (MICROSOFT, 20002, 2002; SEIDMAN, 2001; VILLE, 2001). Novos recursos de
DM podem ser implementados por pesquisadores e desenvolvedores de software
através desta tecnologia (NETZ et alii, 2000, 2001; FAYYAD, CHAUDHURI & BRADLEY,
2000; SETH, 2001).
Esta conjuntura sugere estudos sobre a integração de SGBDs com a tecnologia
de KDD com a finalidade de ampliar o alcance desta tecnologia mediante custos
acessíveis, através da utilização de microcomputadores.
Esta integração, realizada através do acoplamento de técnicas de DM e OLAP
em ambientes de desenvolvimento de aplicativos de bancos de dados, é assunto de
interesse atual, tendo sido abordado em trabalhos apresentados em vários congressos,
tais como:
• Data Mining 1998 (International Conference on Data Mining), ocorrido em
Setembro / 1998 no Rio de Janeiro – Brasil;
• Data Mining 2000 (Second International Conference on Data Mining Methods
and Databases for Engineering, Finance and other Fields), ocorrido em Julho /
2000 em Cambridge – Inglaterra;
• KDD-2001 (The Seventh ACM SIGKDD International Conference on Knowledge
Discovery and Data Mining) realizado em Agosto / 2001 em São Francisco -
Califórnia – EUA;
• ICDM'01 (The 2001 IEEE International Conference on Data Mining) realizado no
Vale do Silício, Califórnia, EUA em Novembro / 2001;
• KDD-2002 (The Eighth ACM SIGKDD International Conference on Knowledge
Discovery and Data Mining) realizado em Julho / 2002 em Edmonton - Alberta
– Canadá;
2
• Data Mining 2002 (Third International Conference on Data Mining Methods
and Databases for Engineering, Finance and Other Fields), ocorrido em
Setembro / 2002 em Bolonha – Itália;
• ICDM'02 (The 2002 IEEE International Conference on Data Mining) realizado em
Maebashi, Japão em Dezembro / 2002.
Este esforço para disponibilizar recursos agrupados de KDD com custo acessível,
também poder ser encontrado no trabalho realizado pela Universidade Waikato de
Hamilton, Nova Zelândia, que criou o sistema WEKA (Waikato Environment for
Knowledge Analysis), uma ferramenta que agrega vários algoritmos de DM
implementados em linguagem JAVA (WITTEN & FRANK, 2000). No entanto em
contraponto à grande vantagem proporcionada pela portabilidade, existe o baixo
desempenho introduzido pelo uso das Máquinas Virtuais JAVA.
Assim, o objetivo principal desta tese é conseguir uma forte integração de
recursos de DM com um SGBD relacional de uso comercial, desenvolvendo e
implementando um algoritmo de DM com recursos que possam ser utilizados de forma
direta e transparente por este SGBD e por outros aplicativos.
Os trabalhos correlatos à integração de recursos de DM com SGBDs são
discutidos no capítulo II.
As diversas etapas do processo de KDD e a inserção deste processo no contexto
da solução de um problema, são descritos no capítulo III.
Os algoritmos de treinamento e predição do classificador SNBi (Simple Naïve
Bayes Incremental), um classificador Bayesiano, com atributos de dados contínuos,
múltiplos atributos de predição e atualização incremental dos dados de treinamento,
são mostrados no capítulo IV.
A implementação deste classificador, normalizada por uma especificação
adequada, como um provedor de recursos de DM, que pode ser utilizado tanto por
um aplicativo isolado, como por um SGBD, como parte integrante do mesmo, é
apresentada em detalhes no capítulo V, juntamente com a lista das ferramentas
utilizadas para realizar esta implementação e os experimentos computacionais.
Também neste capítulo são apresentados procedimentos para visualização, através
da Internet, de múltiplas árvores de decisão produzidas por provedores de recursos de
DM.
Experimentos computacionais, realizados para avaliar o comportamento da
implementação em comparação com outros classificadores, são mostrados no
capítulo VI.
As conclusões são listadas no capítulo VII juntamente com o resumo das
contribuições desta tese.
3
Sugestões para o desenvolvimento de trabalhos futuros são encontradas no
capítulo VIII.
Encerrando, são incluídas todas as referências citadas ao longo do texto, bem
como as referências complementares que foram utilizadas como base de formação
para a composição desta tese.
Como complemento, vários apêndices são incluídos para descrever os detalhes:
da formulação do Classificador Bayesiano Simples (Apêndice A); da implementação
do provedor de recursos de DM com os respectivos códigos fonte (Apêndice C); e dos
dados e procedimentos dos experimentos computacionais (Apêndice E).
A documentação essencial da tecnologia OLE DB, que fundamenta a
tecnologia OLE DB DM é descrita no Apêndice B e os parâmetros do classificador MSDT
(Microsoft® Decision Trees) utilizados nos experimentos computacionais, são listados no
Apêndice D.
4
II. Trabalhos Correlatos à Integração da Tecnologia de DM
comVisando
SGBDsa escolha da abordagem mais adequada para a integração da
tecnologia de DM com SGBDs, foram estudadas as várias abordagens existentes,
conforme mostram as citações dos trabalhos mostradas a seguir. As vantagens e
desvantagens destas abordagens são destacadas no capítulo V.
5
Outro trabalho (HAN et alii, 19961) mostrou um anteprojeto da DMQL (Data
Mining Query Language), uma linguagem de consultas para DM.
Vários outros trabalhos (HAN, 1997; HAN, CHEE & CHIANG, 1998; STEFANOVIC,
1997; TAM, 1998; ZHU, 1998; CHEN, 1999) mostraram o uso de técnicas de OLAP
implementadas em um SGBD com recursos de DM.
Todos estes trabalhos foram desenvolvidos no contexto do sistema dbMiner (HAN
et alii, 199623; HAN & KAMBER, 2001), um projeto de pesquisa que evoluiu para um
produto comercial (DBMINER, 2002).
JOHN (1997) forneceu algumas sugestões relativas ao uso de SQL por algoritmos
de ML (Machine Learning), com a finalidade de integrar estes algoritmos com SGBDs.
FREITAS & LAVINGTON (19961,2,3,4) e FREITAS (19971,2,3) mostraram em vários
trabalhos pesquisas para definir primitivas de SQL adequadas ao uso por algoritmos de
DM.
SOUSA (1998) e SOUSA, MATTOSO & EBECKEN (19981,2,3) apresentaram uma
implementação de um algoritmo de classificação através de árvores de decisão,
utilizando um conjunto de procedimentos armazenados escritos na linguagem
proprietária PL/SQL, em um servidor de processamento paralelo da Oracle®.
BEZERRA & XEXÉO (1998, 1999) e BEZERRA (1999) mostraram trabalhos de
implementação de funcionalidades internas para extração e armazenamento de
regras em um SGBD de uso experimental.
6
Em Março de 2001, o recurso de agregação de provedores de recursos de DM
do MSSQL Analysis Services foi incluído no Service Pack 1 (pacote de atualização de
software) (SETH, 2001).
Completando o conjunto de ferramentas, o kit de recursos OLE DB DM
(MICROSOFT, 2002) foi lançado em Junho de 2001 e atualizado em Março de 2002.
Este kit inclui o código fonte de um provedor de recursos de DM que implementa o
Classificador Bayesiano Simples para atributos discretos.
NETZ et alii (2000, 2001) e FAYYAD, CHAUDHURI & BRADLEY (2000) apresentaram
trabalhos descrevendo a tecnologia OLE DB DM. SEIDMAN (2001) publicou um
excelente manual de referência para o uso desta tecnologia.
7
III. Processo de KDD
Interpretação e Avaliação
Conhecimento
Mineração dos Dados
p(x)=0.02
Seleção e Pré-processamento
Padrões e Modelos
Consolidação de Dados
Dados Consolidados
Fontes de Dados
Figura III.1. Etapas do processo de KDD (FAYYAD, PIATETSKY-SHAPIRO & SMYTH, 19961,2)
O processo de KDD com suas várias etapas pode ser visto na Figura III.1. Estas
etapas e as tarefas correspondentes são descritas sucintamente como segue:
1. Consolidação de Dados: A partir de fontes diversas, os dados são consolidados
em um repositório de dados (data warehouse) (SETH, GUATAM & BALINT, 2002).
a. Criar ou escolher um banco de dados de trabalho;
b. Definir o subconjunto de atributos;
c. Remover as exceções óbvias;
8
d. Definir a estratégia de abordagem de valores de atributos ausentes;
e. Determinar as probabilidades prévias de classes.
2. Seleção e Pré-processamento (PYLE, 1999).
a. Gerar uma amostragem de dados: escolher o método de amostragem;
considerar a complexidade da amostragem; tratar das questões dos erros
sistemáticos;
b. Reduzir a dimensionalidade de atributos: remover redundâncias e
correlações de atributos; combinar atributos (somar, multiplicar, subtrair);
c. Reduzir intervalo de atributos: agrupar valores de atributos discretos;
quantificar valores de atributos contínuos;
d. Transformar dados: descorrelacionar e normalizar valores, mapear séries
temporais para representações estáticas;
e. Codificar dados: organizar os dados de forma apropriada para o uso pela
ferramenta de DM; continuar o processo de redução de
dimensionalidade sem que haja perda de informação.
3. Mineração dos Dados (MENESES & GRINSTEIN, 1998).
a. Escolher a tarefa de mineração: classificação, regressão, agrupamento,
associação, sumarização;
b. Escolher o algoritmo de mineração: Redes Neurais Artificiais; Sistemas
Indutivos de Árvores de Decisão e Regras de Produção; Algoritmos
Genéticos; Algoritmos de Agrupamento do Vizinho Mais Próximo;
Algoritmos Estatísticos (Paramétricos e não paramétricos).
4. Interpretação e Avaliação (NAGAI, 2000).
a. Avaliação: Validação estatística e testes de significância; Revisão
qualitativa por especialistas; Pesquisas piloto para avaliar a acurácia do
modelo;
b. Interpretação: Modelos indutivos de árvores e de regras podem ser lidos
diretamente; Resultados de agrupamentos poder ser tabelados ou
representados graficamente; histogramas de distribuição de valores
podem ser plotados; Código fonte de programas pode ser
automaticamente gerado por alguns sistemas.
Recentemente foi proposto um padrão (CRISP-DM) que fornece um conjunto de
metodologias, práticas e definições das atividades que envolvem o processo de KDD
(CHAPMAN, 2000). O modelo do processo proposto por este padrão é bastante
parecido com o exposto neste capítulo, sendo obviamente muito mais completo e
abrangente.
9
O esquema mostrado pela Figura III.2 ilustra o posicionamento do processo de
KDD no contexto do ciclo de solução de um problema, destacando as características
de interatividade e iteratividade deste ciclo.
Processo de KDD
Problema Conhecimento
10
IV. Classificador SNBi
11
Existem abordagens que procuram traduzir a dependência entre atributos e são
conhecidas como Redes Bayesianas (HANSON, STUTZ & CHEESEMAN, 1991; CHEESEMAN
& STUTZ, 1995).
MADIGAN & RIDGEWAY (2002) apresentaram um trabalho ilustrando as
características dos algoritmos Bayesianos para aplicações de DM.
atributo de predição t
p número total de atributos de predição
t = 1, p índice de atributo de predição
Seja um conjunto de dados, para o qual as classes são desconhecidas,
composto por:
u número total de casos desconhecidos
12
P(c tj | Y t ) > P(ckt | Y t ) para 1 ≤ k ≤ mt , k ≠ j (IV-1)
atributo de predição t, calculada pela expressão seguinte (ver fórmulas A-4 e A-5 do
Apêndice A):
s tj n
t t
P(c j | Y ) =
v ∏
P( yit | c tj ) (IV-2)
i=1
onde:
para o atributo de predição t, são calculadas a partir dos dados de treinamento pelas
fórmulas seguintes, dependendo do tipo do atributo ait . Se ait for discreto, então (ver
rjith
t t
P( yi | c j ) = (IV-3)
s tj
onde:
Se por outro lado, ait for um valor contínuo, então será utilizada a fórmula
onde:
13
e número neperiano
rjit1
z tji
∑ xijtk
µ jit = = k =1 (IV-5)
rjit1 rjit1
onde:
treinamento de classe c tj
atributo ait
onde:
treinamento de classe c tj
14
rjit1 número de casos de treinamento de classe c tj tendo qualquer
atributo ait
Para que o classificador Bayesiano descrito no item anterior possa funcionar com
atualização incremental dos dados de treinamento, é necessário o armazenamento
de alguns dados, recuperados quando novos dados de treinamento são inseridos. As
Listagens IV.1 e IV.2 descrevem, respectivamente, o algoritmo de treinamento de
dados e o algoritmo de predição de dados deste classificador.
Recupere oit (número de atributos possíveis para cada atributo ait , para o atributo de
predição t
Para h = 1, oit Recupere rjith (número de casos de classe c tj tendo o valor x ij , de ordem
Recupere z tji (somatória dos valores x ij para o atributo ait dos casos de classe c tj , para
o atributo de predição t)
15
Recupere qtji (somatória dos quadrados dos valores x ij para o atributo ait dos casos de
Incremente s tj
Para i = 1, n (número de atributos de dados)
Defina a ordem h do atributo atual (h = 0 para atributo ausente)
Incremente rjith
Se o atributo for contínuo
Adicione x ij a z tji
Adicione ( x ij )2 a qtji
Fim de Se o atributo for contínuo
Fim de Para i = 1, n
Fim de Para t = 1 ate p
Fim de Para cada caso de treinamento novo
Adicione vn a v
s tj
t
Faça P = (probabilidade a priori das classes)
j v
Para i = 1, n (número de atributos de dados)
Defina a ordem h do atributo atual (h = 0 para atributo ausente)
Se o atributo for discreto
rjith
t
Multiplique P por
j
s tj
Senão (o atributo é contínuo)
t ztji
Faça µ ji = t1 (fórmula IV-5)
rji
16
ztji2
qtji −
rjit1
Faça σ t = (fórmula IV-6)
ji rjit1 −1
2
1 y i − µ ji
t t
−
1 2 σ jit
Multiplique P t por e (fórmula IV-4)
j
2πσ jit
17
V. Provedor de Recursos de Mineração de Dados DMclcMine
18
V.1.2 Sistemas Internos
19
SATTLER & DUNEMANN (2001) desenvolveram primitivas para classificadores de
árvores de decisão utilizando funções definidas pelo usuário, implementadas em C
usando a OCI (interface de chamadas de procedimentos da Oracle®).
Esta abordagem apresenta como principal desvantagem a total falta de
portabilidade e o elevado custo de desenvolvimento, já que exige que os algoritmos
de DM sejam desenvolvidos em linguagens proprietárias utilizando estruturas de dados
específicas de cada SGBD.
Todavia, o uso indiscriminado de SQLs para o cálculo de contagens e
probabilidades conduz a repetidas varreduras de dados que acarretam um baixo
desempenho no tempo de processamento, inviabilizando completamente o
procedimento adotado (BERNHARDT, CHAUDHURI S. & FAYYAD, 1999).
A intimidade do acoplamento obtido através de recursos internos de um SGBD é
diretamente proporcional à intimidade que o desenvolvedor obrigatoriamente terá
com o fabricante do mesmo, criando uma dependência de longo prazo, que pode
ser prejudicial.
20
Esta padronização possibilita a total portabilidade destes provedores, que se
constituem em sistemas acoplados por API, que podem aproveitar os recursos internos
de SGBDs, bem como de qualquer fonte de dados que seja compatível com esta API.
Utilizando esta tecnologia um SGBD pode gerenciar diferentes aplicativos
desenvolvidos por desenvolvedores distintos para cada tarefa que constitui o processo
de KDD, por exemplo, preparação de dados, mineração de dados, visualização e
avaliação.
Esta integração entre as diferentes etapas deste processo é possibilitada pelo
armazenamento do modelo de DM que fica disponível para utilização por qualquer
aplicativo que utilize esta tecnologia.
Visando a portabilidade e o livre intercâmbio de informações o armazenamento
é realizado através da especificação PMML (Predictive Model Markup Language)
(DMG, 2002), que é uma linguagem de marcação para modelos estatísticos e de DM
baseada em XML (Extensible Markup Language) (WC3, 2000).
Além do mais, esta tecnologia permite que um provedor de recursos de DM
tenha total portabilidade, podendo funcionar com um aplicativo independente, sem
a presença de qualquer SGBD. Basta a existência de uma conexão com uma fonte de
dados qualquer, que pode ser até mesmo formada por arquivos lineares tipo texto.
É importante salientar que esta tecnologia, apesar de ter sido criada pela
Microsoft®, é totalmente independente de qualquer fabricante, de qualquer software
ou de qualquer provedor de dados.
De uma forma geral, esta abordagem apresenta as vantagens de todas as
abordagens citadas anteriormente. A única provável desvantagem é a perda de
desempenho em relação àquela apresentada pelos sistemas internos, ocasionada
pelas repetidas cópias de memória causadas pelos rompimentos sucessivos da
ligação com o SGBD, inerentes à esta forma de acoplamento.
No entanto as vantagens claramente superam esta pequena desvantagem.
Além disso se faz necessária uma implementação cuidadosa e eficiente dos
algoritmos de DM para otimizar o uso das funcionalidades internas disponíveis do SGBD
(CHAUDHURI, 1998).
Do ponto de vista do pesquisador de DM esta tecnologia é altamente
promissora, já que possibilita a qualquer pesquisador, com um mínimo de esforço,
portar ou desenvolver seu algoritmo de DM, seu visualizador de resultados, ou outro
aplicativo qualquer, em uma linguagem de programação não proprietária, para que
este se torne um provedor de recursos de DM, pronto para uso integrado com um
SGBD.
21
V.3 Arquitetura de Acesso Universal de Dados
Consumidores de dados
Aplicativo Browser
Provedores OLE DB
Armazenadores de dados
22
V.4 Ferramentas
23
tanto de forma isolada, utilizado diretamente por um aplicativo, como de forma
agregada, utilizado em conjunto com o MSSQL. Estas modificações, bem como
detalhes da implementação, são descritos no Apêndice C.
A implementação será apresentada no contexto da descrição das operações
fundamentais de um provedor de recursos de DM, expostas nos itens a seguir.
24
Tabela V.2. AllElet - Estatísticas do modelo marginal
>40 low
5 4
Ausentes 0 0 0 0 0
25
Todas as operações necessárias para esta tarefa estão disponíveis no provedor
exemplo, não sendo necessária nenhuma modificação em implementações de novos
algoritmos.
O comando SQL DM para criar o modelo com dois atributos de predição do
conjunto de dados da Tabela V.1 é mostrado a seguir:
CREATE MINING MODEL [AllElet_SNBi] ([NumReg] LONG KEY, [Age] TEXT DISCRETE,
[Income] TEXT DISCRETE, [Student] TEXT DISCRETE PREDICT, [CreditRating] TEXT
DISCRETE, [BuysComputer] TEXT DISCRETE PREDICT) USING Simple_Naive_Bayes
Utilizando o utilitário DMSamp (KIM & CARROLL, 2002) para executar o comando
acima, será criado o correspondente modelo de DM armazenado no formato texto
através da especificação PMML (DMG, 2002), versão 1.0. Esta é uma linguagem de
marcação para modelos estatísticos e de DM baseada em XML (WC3, 2000). O
arquivo deste modelo de DM é reproduzido pela Listagem V.1.
<?xml version="1.0"?>
<pmml name = "AllElet_SNBi" GUID = "{4888A64B-C5A3-4CF8-AFB7-593495434496}"
creation-time = "2003-05-03T01:35:34" modified-time = "2003-05-03T01:35:34">
<statements>
<statement type = "CREATE" value = "CREATE MINING MODEL [AllElet_SNBi]
([NumReg] LONG KEY, [Age] TEXT DISCRETE, [Income] TEXT DISCRETE,
[Student] TEXT DISCRETE PREDICT, [CreditRating] TEXT DISCRETE,
[BuysComputer] TEXT DISCRETE PREDICT) USING Simple_Naive_Bayes"/>
</statements>
<data-dictionary column-ordering = "ORDINAL" column-count = "6">
<key name = "NumReg" datatype = "LONG" isinput = "true" column-ordinal = "0"/>
<categorical name = "Age" isinput = "true"
datatype = "TEXT" column-ordinal = "1"/>
<categorical name = "Income" isinput = "true"
datatype = "TEXT" column-ordinal = "2"/>
<categorical name = "Student" isinput = "true" ispredict = "true"
datatype = "TEXT" column-ordinal = "3"/>
<categorical name = "CreditRating" isinput = "true"
datatype = "TEXT" column-ordinal = "4"/>
<categorical name = "BuysComputer" isinput = "true" ispredict = "true"
datatype = "TEXT" column-ordinal = "5"/>
</data-dictionary>
<Simple-naive-bayes-model/>
</pmml>
26
Este comando é gerado automaticamente pelo Gerenciador de Serviços de
Análise. Todo o suporte necessário para o funcionamento deste comando na inserção
de casos no modelo DM deve ser desenvolvido para novos algoritmos. O
desenvolvedor deve dedicar atenção especial nesta tarefa. A estrutura de dados
interna que representa o modelo é definida e todas as funções relativas ao
treinamento do conjunto de dados, montagem da árvore do modelo,
armazenamento e recuperação do modelo são desenvolvidas nesta etapa. A
estrutura de dados deve ser compatível com o processamento das duas últimas
operações: de predição de atributos e de exposição do modelo de DM.
<?xml version="1.0"?>
<pmml name = "AllElet_SNBi" GUID = "{4888A64B-C5A3-4CF8-AFB7-593495434496}"
creation-time = "2003-05-03T01:35:34" modified-time = "2003-05-03T02:46:44">
<statements>
<statement type = "CREATE" value = "CREATE MINING MODEL [AllElet_SNBi]
([NumReg] LONG KEY, [Age] TEXT DISCRETE, [Income] TEXT DISCRETE,
[Student] TEXT DISCRETE PREDICT, [CreditRating] TEXT DISCRETE,
[BuysComputer] TEXT DISCRETE PREDICT) USING Simple_Naive_Bayes"/>
</statements>
<data-dictionary column-ordering = "ORDINAL" column-count = "6">
<key name = "NumReg" datatype = "LONG" isinput = "true" column-ordinal = "0"/>
<categorical name = "Age" isinput = "true"
datatype = "TEXT" column-ordinal = "1">
<category missing = "true"/>
<category value = "<=30"/>
<category value = "31-40"/>
<category value = ">40"/>
</categorical>
<categorical name = "Income" isinput = "true"
datatype = "TEXT" column-ordinal = "2">
<category missing = "true"/>
<category value = "high"/>
<category value = "medium"/>
<category value = "low"/>
</categorical>
<categorical name = "Student" isinput = "true" ispredict = "true"
datatype = "TEXT" column-ordinal = "3">
<category missing = "true"/>
<category value = "no"/>
<category value = "yes"/>
</categorical>
<categorical name = "CreditRating" isinput = "true"
datatype = "TEXT" column-ordinal = "4">
<category missing = "true"/>
<category value = "fair"/>
<category value = "excellent"/>
</categorical>
<categorical name = "BuysComputer" isinput = "true" ispredict = "true"
datatype = "TEXT" column-ordinal = "5">
<category missing = "true"/>
<category value = "no"/>
<category value = "yes"/>
</categorical>
</data-dictionary>
<global-statistics>
<data-distribution>
<simple-attribute name = "Age"/>
<state missing = "true" support = "0"/>
<state value = "<=30" support = "5"/>
<state value = "31-40" support = "4"/>
27
<state value = ">40" support = "5"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "Income"/>
<state missing = "true" support = "0"/>
<state value = "high" support = "4"/>
<state value = "medium" support = "6"/>
<state value = "low" support = "4"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "Student"/>
<state missing = "true" support = "0"/>
<state value = "no" support = "7"/>
<state value = "yes" support = "7"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "CreditRating"/>
<state missing = "true" support = "0"/>
<state value = "fair" support = "8"/>
<state value = "excellent" support = "6"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "BuysComputer"/>
<state missing = "true" support = "0"/>
<state value = "no" support = "5"/>
<state value = "yes" support = "9"/>
</data-distribution>
</global-statistics>
<Simple-naive-bayes-model>
<info name = "Count of Cases" value = "14"/>
<info name = "Count of Trees" value = "2"/>
<data-distribution>
<simple-attribute name = "Student"/>
<state missing = "true" support = "0"/>
<state value = "no" support = "7">
<data-distribution>
<simple-attribute name = "Age"/>
<state value = "<=30" support = "3"/>
<state value = "31-40" support = "2"/>
<state value = ">40" support = "2"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "Income"/>
<state value = "high" support = "3"/>
<state value = "medium" support = "4"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "CreditRating"/>
<state value = "fair" support = "4"/>
<state value = "excellent" support = "3"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "BuysComputer"/>
<state value = "no" support = "4"/>
<state value = "yes" support = "3"/>
</data-distribution>
</state>
<state value = "yes" support = "7">
<data-distribution>
<simple-attribute name = "Age"/>
<state value = "<=30" support = "2"/>
<state value = "31-40" support = "2"/>
<state value = ">40" support = "3"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "Income"/>
<state value = "high" support = "1"/>
<state value = "medium" support = "2"/>
<state value = "low" support = "4"/>
</data-distribution>
<data-distribution>
28
<simple-attribute name = "CreditRating"/>
<state value = "fair" support = "4"/>
<state value = "excellent" support = "3"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "BuysComputer"/>
<state value = "no" support = "1"/>
<state value = "yes" support = "6"/>
</data-distribution>
</state>
</data-distribution>
<data-distribution>
<simple-attribute name = "BuysComputer"/>
<state missing = "true" support = "0"/>
<state value = "no" support = "5">
<data-distribution>
<simple-attribute name = "Age"/>
<state value = "<=30" support = "3"/>
<state value = ">40" support = "2"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "Income"/>
<state value = "high" support = "2"/>
<state value = "medium" support = "2"/>
<state value = "low" support = "1"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "Student"/>
<state value = "no" support = "4"/>
<state value = "yes" support = "1"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "CreditRating"/>
<state value = "fair" support = "2"/>
<state value = "excellent" support = "3"/>
</data-distribution>
</state>
<state value = "yes" support = "9">
<data-distribution>
<simple-attribute name = "Age"/>
<state value = "<=30" support = "2"/>
<state value = "31-40" support = "4"/>
<state value = ">40" support = "3"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "Income"/>
<state value = "high" support = "2"/>
<state value = "medium" support = "4"/>
<state value = "low" support = "3"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "Student"/>
<state value = "no" support = "3"/>
<state value = "yes" support = "6"/>
</data-distribution>
<data-distribution>
<simple-attribute name = "CreditRating"/>
<state value = "fair" support = "6"/>
<state value = "excellent" support = "3"/>
</data-distribution>
</state>
</data-distribution>
</Simple-naive-bayes-model>
</pmml>
29
valores possíveis dos atributos e incluídos no arquivo as estatísticas globais e os dados
estatísticos que definem o modelo de DM conforme mostra a Listagem V.2.
A criação do comando SQL DM necessário para esta tarefa pode ser feita com
o auxílio do utilitário DMSamp (KIM & CARROLL, 2002) ou com o auxílio de utilitários DTS
(Data Transformation Services). O desenvolvedor deve implementar todo o suporte
para o funcionamento deste comando. Para o exemplo adotado o comando é o que
segue:
30
Figura V.2. AllElet - Árvores do modelo para os atributos de predição
31
Figura V.3. AllElet - Árvore do atributo de predição BuysComputer
32
Figura V.4. AllElet - Conteúdo da tabela virtual do modelo de DM
A Figura V.5 mostra a mesma árvore de predição da Figura V.3, produzida por
outra interessante ferramenta: ThinClientTree criada por TANG (20021) e modificada por
CUROTTO (2002) para suportar outros algoritmos além do MSDT (CHICKERING, GEIGER &
HECKERMAN, 1994).
Figura V.5. AllElet – Árvore do atributo de predição BuysComputer exibida pelo Internet Explorer
33
VI. Experimentos Computacionais
34
O segundo procedimento é o da validação cruzada. Este é um procedimento
que resulta do processamento de N conjuntos de dados de treinamento e teste
obtidos a partir do conjunto total de dados. Para realizar este procedimento o
conjunto total de dados é dividido em N partes aproximadamente iguais com
distribuição uniforme randômica das classes do atributo de predição. Cada uma
destas N partes se constitui nos N conjuntos de dados de teste. Os N conjuntos de
dados de treinamento são formados pelas N-1 partes restantes (com a exclusão da
parte utilizada para teste). Desta forma em cada processamento um conjunto de
dados de treinamento com dados diferentes é utilizado e testado em um conjunto
com dados não pertencentes ao conjunto de dados de treinamento. A acurácia dos
classificadores escolhidos para teste é obtida pela média da acurácia dos N
resultados. Em todos os experimentos foi adotado N = 10.
Nas tabelas que mostram os resultados dos experimentos, os melhores valores
são destacados em negrito e as colunas dos valores do classificador SNBi são
destacadas com fundo cinza claro.
Deve ser obserbado que os tempos de processamento mostrados por estas
tabelas são os tempos decorridos e não o tempo real do processador para a tarefa
considerada. Durante os experimentos o equipamento foi utilizado como servidor
isolado, sem nenhum cliente conectado e somente de forma eventual ocorreu a
utilização de um editor de textos em conjunto com a execução das tarefas.
O Apêndice E mostra todos os detalhes necessários para o processamento dos
experimentos tais como programas e utilitários utilizados.
35
A Tabela VI.1 mostra a lista dos parâmetros dos classificadores utilizados neste
experimento, enquanto que os resultados de tempos de processamento e acurácia
obtidos são mostrados nas Tabelas VI.2 e VI.3.
Os resultados do classificador MSDT (MSDT1 e MSDT2) identificados pelo sinal de
interrogação (?) significam que a execução deste classificador falhou e o processo
não obteve uma terminação normal. Este erro foi reportado para a Microsoft®, sendo
qualificado como um erro de programação que deverá ser corrigido em futuras
versões do provedor. Para preencher esta lacuna as tabelas apresentam também o
resultado do classificador MSDT2d, que utiliza atributos de dados discretizados ao invés
de atributos de dados contínuos.
Classificador Parâmetros
36
Tabela VI.2. Waveform - Tempos de processamento (s)
a 5 3 2 3 4 3 1
b 5 58 4 13 46 6 6
Treinamento c 8 107 6 25 85 8 13
d 47 981 45 307 912 69 282
e 428 9629 429 ? ? 934 12684
a 1 2 2 1 1 1 0
b 22 40 22 18 19 19 0
Predição do
Treinamento
c 45 74 44 35 35 37 0
d 430 693 413 333 328 352 1
e 4111 6704 4079 ? ? 3801 13
a 23 64 21 18 18 18 1
b 22 64 22 19 18 17 1
Predição do
Teste
c 22 63 22 18 19 17 1
d 21 61 22 17 20 17 1
e 29 59 36 ? ? 23 1
a 29 69 25 22 23 22 2
b 49 165 48 50 83 42 7
Total c 75 244 72 78 139 62 14
d 498 1735 480 657 1260 438 284
e 4568 16392 4544 ? ? 4758 12698
37
14000
C45
12000
Tempo de Treinamento (s)
WEKA
10000
8000
6000
4000
2000
MSDT2 MSDT2d
i
MSDT1 SNB d
0 i
SNB
0 200000 400000 600000 800000 1000000
Número de Casos
38
classificador C45 no treinamento. Além disso, se for considerado o produto tempo x
Treinamento 41 356
Predição Treinamento 198 162
Predição Teste 27 22
Total 266 540
39
Dois tipos de procedimentos foram utilizados no experimento. No primeiro deles a
massa de dados foi separada em dois conjuntos de dados: treinamento e teste. Esta
separação foi realizada utilizando uma distribuição randômica uniforme procurando
manter a mesma distribuição das classes. Os dados de treinamento são compostos por
18264 casos (68,97% da massa de dados) e os dados de teste são compostos por 8218
casos (31,03& da massa de dados).
A lista dos parâmetros dos classificadores utilizados é mostrada pela Tabela VI.6.
Classificador Parâmetros
Treinamento 10 10 28 20 19
Predição do Treinamento 72 69 58 59 0
Predição do Teste 33 32 26 27 1
Total 115 111 112 106 20
40
Os tempos de processamento de todos os classificadores foram equiparáveis,
com exceção do classificador C45 que teve disparado o melhor desempenho.
Os resultados de acurácia dos modelos do classificador SNBi foram os piores
entre todos, ao contrário do experimento anterior.
Os resultados do procedimento de validação cruzada realizado com os
classificadores SNBi2 e MSDT1 são mostrados nas Tabelas VI.9 e VI.10.
Este conjunto de dados foi extraído do data warehouse MASY (STAUDT, KIETZ &
REIMER, 1998) da companhia de seguros européia SwissLife com a finalidade de servir
para uma competição denominada KDD Sisyphus I (KIETZ & STAUDT, 1998) que acabou
não se completando. É um problema de grande dimensão e complexidade, tendo
sido exaustivamente preparado e estudado por COSTA (1999). Também foi objeto de
estudo por BLOCKEEL & STRUYF (20011), GÄRTNER (20011,2) e GÄRTNER, WU & FLACH
(2001).
41
Este experimento foi dividido em duas partes: a primeira delas estuda os dados
preparados (COSTA, 1999) e a segunda estuda os dados na sua forma original. Os
resultados obtidos pelas duas partes são comparados.
Os dados originais são multirelacionais e compostos por 10 tabelas. Para uso
neste experimento uma consulta SQL gerou uma tabela única a partir destas tabelas
(ver Apêndice E, item E.4).
As descrições dos parâmetros dos classificadores utilizados neste experimento se
encontram relacionadas na Tabela VI.11. Alguns atributos de dados são discretos e de
tipos idênticos para todos os classificadores utilizados.
Classificador Parâmetros
SNBi Nenhum
42
compostos por 89543 casos (68,80% da massa de dados) e os dados de teste são
compostos por 40600 casos (31,20% da massa de dados). As Tabelas VI.12 e VI.13
mostram os resultados de tempo de processamento e acurácia.
Apesar de obter o menor tempo de treinamento entre os classificadores
comparados, o classificador SNBi mostrou novamente o pior resultado para acurácia.
Por sua vez, o classificador C45 apresentou um excelente desempenho em todos os
resultados. Deve ser notado o elevado tempo de processamento utilizado pelo
classificador MSDT2 que por outro lado apresentou um resultado de acurácia próximo
ao do classificador C45. Provavelmente isto se deve ao fato que o classificador MSDT2
utiliza o método da entropia para controlar o crescimento de uma árvore de decisão,
que é o mesmo método utilizado pelo classificador C45.
O procedimento de validação cruzada realizado com os classificadores SNBi e
MSDT1 é mostrado nas Tabelas VI.14 e VI.15.
Tabela VI.14. Insurance – dados preparados - Tempos de processamento (s) da validação cruzada
43
VI.3.2 Dados Originais
Tabela VI.18. Insurance – dados originais - Tempos de Processamento (s) da validação cruzada
44
não apresentaram diferenças significativas em relação ao procedimento que utiliza
parte dos dados para teste.
Classificador Parâmetros
SNBi nenhum
45
experimento, conforme mostra a figura citada, este tempo foi de apenas 8673
segundos.
MSDT (8673)
9000
8000
Tempo de Treinamento (s)
7000 i
SNB (6285)
6000
5000
4000
3000
2000
1000
0
0 50 100 150 200
Número de Atributos
46
SNBi ocorreu falta de memória do sistema após 2 horas e 16 minutos decorridos. Nesta
ocasião a memória virtual instalada era de apenas 1024 megabytes. Somente após
esta capacidade de memória ter sido aumentada para 2048 megabytes é que esta
tarefa pode ser completada. No entanto conforme já relatado no item VI.1 esta tarefa
excede a capacidade eficiente do equipamento utilizado devido ao uso intensivo de
memória virtual, que ocasiona o comportamento não linear nos resultados.
Outro problema ocorreu com a tarefa de predição dos dados de treinamento
pelo classificador MSDT para 1.000.000 de casos. Os dados de treinamento são obtidos
a partir de uma consulta simples de uma tabela armazenada no MSSQL, contendo
10.000.000 de registros. Ocorre que existe um limite não configurável de tempo de
espera de 30 segundos para realizar operações de consultas neste servidor. Como
consultas envolvendo esta ordem de grandeza podem ultrapassar este limite, esta
tarefa fica inviabilizada se for utilizada uma consulta. Este é um erro de programação
reportado pela Microsoft® que deverá ser alterado em futuras versões do servidor.
Para contornar este problema podem ser utilizadas tabelas ao invés de consultas. Se o
uso de consultas for necessário, estas poderão ser feitas somente através da
ferramenta de Análise de Consultas (SQL Query Analyser) a qual permite a alteração
deste tempo limite. Este problema curiosamente também foi resolvido com o aumento
da capacidade de memória virtual.
O gráfico da Figura VI.3 mostra o comportamento linear dos dois classificadores
em relação à variação do número de casos, para o tempo de treinamento. No
entanto conforme mostra o gráfico da Figura VI.4 este comportamento linear, para o
classificador SNBi, para a tarefa de predição, somente ocorreu até o número de casos
igual a 100.000.
A partir deste valor ocorreu um comportamento não linear ocasionado pela
elevada demanda de memória exigida pelo classificador para a tarefa de predição.
Este fato pode ser explicado pelos mesmos motivos expostos anteriormente com
relação ao uso de memória virtual. O consumo de memória pelo classificador SNBi
para processar a predição de 1.000.000 de casos foi de aproximadamente 1,6
megabytes.
47
8000
MSDT (7626)
7500
7000 i
SNB (6476)
6500
6000
Tempo de Treinamento (s)
5500
5000
4500
4000
3500
3000
2500
2000
1500
1000
500
0
0 2000000 4000000 6000000 8000000 10000000
Número de Casos
48
MSDTp (11002)
11000
i
SNB (9719)
10000 i
SNB p (9273)
9000
8000
Tempo de Predição (s)
7000
6000
MSDT (4987)
5000
4000
3000
2000
1000
0
0 500000 1000000 1500000 2000000
Número de Casos
49
9500
ia
SNB (8940)
9000
8500
8000
7500
7000 i
SNB (6476)
Tempo de Treinamento (s)
6500
6000
ii
SNB (6314)
5500
5000
4500
4000
3500
3000
2500
2000
1500
1000
500
0
0 2000000 4000000 6000000 8000000 10000000
Número de Casos
50
classificador SNBi incremental são representados na figura pela linha rotulada SNBii.
Pode ser observado, como era óbvio, que os resultados de tempo de processamento
do processo incremental são inferiores aqueles obtidos pelo processo não incremental.
Mas a comparação entre as curvas SNBi e SNBii mostra ainda que o processo
incremental permitiu a obtenção de resultados ligeiramente melhores (~2,5%) do
aqueles obtidos pelo processo não incremental para um mesmo número de casos.
800
i
SNB (716)
700
Tempo de Treinamento (s)
MSDT (672)
600
500
400
300
200
100
0
0 25 50 75 100
Número de Estados
Figura VI.6. Desempenho - Tempo de treinamento x Número de estados dos atributos de dados
51
VI.4.4 Variação do Número de Atributos de Predição
14000
MSDT (12330)
12000
Tempo de Treinamento (s)
10000
8000
6000
i
SNB (4607)
4000
2000
0
0 4 8 12 16 20 24 28 32
Número de Atributos de Predição
52
VII. Conclusão
53
VIII. Trabalhos Futuros
54
REFERÊNCIAS
AGRAWAL, R. & SHIM, K., 1995, Developing Tightly-Coupled Applications on IBM DB2/CS
Relational Database System: Methodology and Experience, IBM Research Report RJ 10005,
IBM Almaden Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/udfrj.pdf.
AGRAWAL, R. & SRIKANT, R., 19941, Fast Algorithms for Mining Association Rules, IBM Research
Report RJ 9839, IBM Almaden Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/vldb94_rj.pdf.
AGRAWAL, R. & SRIKANT, R., 19942, Mining Sequential Patterns, IBM Research Report RJ 9910, IBM
Almaden Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/icde95_rj.pdf.
AGRAWAL, R. et alii, 1992, "An Interval Classifier for Database Mining Applications", In: Proc. of the
VLDB 1992, 18th Int'l Conf. on Very Large Databases, Vancouver, British Columbia,
Canada, pp. 560-573. http://www.almaden.ibm.com/cs/quest/papers/vldb92.pdf.
AGRAWAL, R. et alii, 19952, "Fast Similarity Search in the Presence of Noise, Scaling, and Translation
in Time-Series Databases", In: Proc. of the VLDB 1995, 21st Int'l Conf. on Very Large
Databases, Zurich, Switzerland, pp. 490-501.
http://www.almaden.ibm.com/cs/quest/papers/vldb95_seq.pdf.
AGRAWAL, R. et alii, 19961, "The Quest Data Mining System", In: Proc. of the KDD'96, 2nd Int'l Conf.
on Knowledge Discovery in Databases and Data Mining, Portland, Oregon, USA, pp. 244-
249. http://www.almaden.ibm.com/cs/quest/papers/kdd96_quest.pdf.
AGRAWAL, R., BAYARDO JR., R.J. & SRIKANT, R., 1999, Athena: Mining-based Interactive
Management of Text Databases, IBM Research Report RJ 10153, IBM Almaden Research
Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/people/ragrawal/papers/athena.ps.
AGRAWAL, R., FALOUTSOS, C. & SWAMI, A., 1993, "Efficient Similarity Search in Sequence
Databases", In: Proc. of the 4th Int'l Conf. on Foundations of Data Organization and
Algorithms, Lecture Notes in Computer Science 730, Chicago, Illinois, USA, Springer-Verlag,
pp. 69-84. http://www.almaden.ibm.com/cs/quest/papers/fodo93.pdf.
AGRAWAL, R., IMIELINSKI, T. & SWAMI, A., 19931, "Mining Association Rules between Sets of Items in
Large Databases", In: Proc. of the SIGMOD'93, ACM SIGMOD Int'l Conf. on Management of
Data, Washington DC, USA, pp. 207-216.
http://www.almaden.ibm.com/cs/quest/papers/sigmod93.pdf.
AGRAWAL, R., IMIELINSKI, T. & SWAMI, A., 19932, "Database Mining: A Performance Perspective",
IEEE Transactions on Knowledge and Data Engineering, Vol. 5, No. 6, pp. 914-925.
http://www.almaden.ibm.com/cs/quest/papers/tkde93.pdf.
BAESENS, B. et alii, 2002, "Learning Bayesian Network Classifiers for Credit Scoring using Markov
Chain Monte Carlo Search", In: Proc. of the 16th Int'l Conf. on Pattern Recognition, Quebec
City, Quebec, Canada, Vol. 3, pp. 49-52. http://ieeexplore.ieee.org.
55
BECERRA-FERNANDEZ, I., ZANAKIS, S.H. & WALCZAK, S., 2002, "Knowledge Discovery Techniques for
Predicting Country Investment Risk", Computers & Industrial Engineering, Vol. 43, No. 4, pp.
787-800. http://www.elsevier.com.
BERNHARDT, J., CHAUDHURI S. & FAYYAD, U.M., 1999, "Scalable Classification over SQL
Databases", In: Proc. of the ICDE'99, 15th Int´l Conf. on Data Engineering, Sydney, Australia,
pp. 470-479. ftp://ftp.research.microsoft.com/users/AutoAdmin/icde99.pdf.
BEZERRA, E., 1999, Explorando Paralelismo em Primitivas de Mineração de Dados para a Tarefa
de Classificação, Tese de Mestrado, COPPE/UFPR, Rio de Janeiro, RJ, Brasil.
http://www.cos.ufrj.br/~bezerra/publications/Thesis/MSc/thesis.html.
BEZERRA, E. & XEXÉO, G.B., 1998, "Constructing Data Mining Functionalities in a DBMS", In: Data
Mining (Proc. of the Int'l Conf. on Data Mining), Rio de Janeiro, RJ, Brazil, Ebecken, N. F. F.
(ed.), WIT Press, pp. 367-381. http://www.witpress.com.
BEZERRA, E. & XEXÉO, G.B., 1999, "Uma Primitiva para dar Suporte à Tarefa de Classificação em
Mineração de Dados", In: Proc. of the XIV Brazilian Simposium on Data Bases, Florianópolis,
SC, Brazil. http://www.cos.ufrj.br/~bezerra/publications/sbbd99.pdf.
BEZERRA, E., MATTOSO, M.L.Q & XEXÉO, G.B., 2000, "An Analysis of the integration between data
mining applications and database systems", In: Data Mining II (Proc. of the 2nd Int'l Conf.
on Data Mining), Cambridge, UK, Ebecken, N. & Brebbia, C.A. (eds.), WIT Press, pp. 151-
160. http://www.witpress.com.
BLAKE, C.L. & MERZ, C.J., 1998, UCI Repository of Machine Learning Databases, University of
California, Department of Information and Computer Science, Irvine, CA, USA.
http://www.ics.uci.edu/~mlearn/MLRepository.html.
BLOCKEEL, H. & STRUYF, J., 20011, "Frankenstein Classifiers: Some experiments on the Sisyphus data
set", In: Proc. of IDDM-2001 - ECML/PKDD01 Workshop on Integrating Aspects of Data
Mining, Decision Support and Meta-Learning, Freiburg, Germany, Giraud-Carrier, C.,
Lavrac, N. & Moyle, S. (eds.), pp. 1-12.. http://ai.ijs.si/branax/iddm-2001-proceedings/paper3.pdf.
BLOCKEEL, H. & STRUYF, J., 20012, "Deriving Biased Classifiers for Better ROC Performance", In: Proc.
of the Information Society 2001, Ljubljana, Slovenia, Grobelnik, M. & Mladenic, D. (eds.),
pp. 124-127. http://www.cs.kuleuven.ac.be/~dtai/publications/files/36366.ps.gz.
BOJARCZUK, C.C., LOPES, H.S. & FREITAS, A.A., 1999, "Discovering Comprehensible Classification
Rules using Genetic Programming: a Case Study in a Medical Domain", In: Proc. of the
GECCO'99, Genetic and Evolutionary Computation Conf., Orlando, Florida, USA, pp. 953-
958. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/gecco99.ps.
BOJARCZUK, C.C., LOPES, H.S. & FREITAS, A.A., 2000, "Genetic Programming for Knowledge
Discovery in Chest Pain Diagnosis", IEEE Engineering in Medicine and Biology Magazine,
Vol. 19, No. 4, pp. 38-44. http://www.ppgia.pucpr.br/~alex.
BRADLEY, P.S., FAYYAD, U.M & REINA, C.A., 1999, Scaling EM (Expectation Maximization) Clustering
to Large Databases, Technical Report MSR-TR-98-35, Microsoft Research, Microsoft
Corporation, Redmond, Washington, USA. ftp://ftp.research.microsoft.com/pub/tr/tr-98-35.pdf.
BREIMAN, L. et alii, 1984, Classification And Regression Trees, 1st ed., Boca Raton, Florida, USA,
Chapman & Hall/CRC. http://www.crcpress.com.
56
CHAKRABARTI, S. et alii, 1997, Using Taxonomy, Discriminants, and Signatures for Navigating in Text
Databases, IBM Research Report, IBM Almaden Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/vldb97_txt_j.ps.gz.
CHAPMAN, P. ET ALLI, 2000, CRISP-DM 1.0 - Step-by-step Data Mining Guide, Technical Report,
CRISP-DM consortium, SPSS Inc., USA. http://www.crisp-dm.org.
CHAU, K.W. et alii, 2003, "Application of Data Warehouse and Decision Support System in
Construction Management", Automation in Construction, Vol. 12, No. 2, pp. 213-224.
http://www.elsevier.com.
CHAUDHURI, S., 1998, "Data Mining and Database Systems: Where is the Intersection?", IEEE Data
Engineering Bulletin, Vol. 21, No. 1, pp. 4-8. ftp://ftp.research.microsoft.com/pub/debull/98MAR-
CD.pdf.
CHEESEMAN, P. & STUTZ, J., 1995, "Bayesian Classification (AutoClass): Theory and Results", In:
Advances in Knowledge Discovery and Data Mining, Fayyad, U.M. et alii (eds.), AAAI/MIT
Press, pp. 153-180. http://ic.arc.nasa.gov/ic/projects/bayes-group/images/kdd-95.ps.
CHEN, M.S., HAN, J. & YU, P.S., 1996, "Data Mining: An Overview from a Database Perspective",
IEEE Transactions on Knowledge and Data Engineering, Vol. 8, No. 6, pp. 866-883.
ftp://ftp.fas.sfu.ca/pub/cs/han/kdd/survey97.ps.gz.
CHEN, Q., 1999, Mining Exceptions and Quantitative Association Rules in OLAP Data Cube, M.Sc.
Thesis, Computing Science, Simon Fraser University, Burnaby, British Columbia, Canada.
ftp://fas.sfu.ca/pub/cs/theses/1999/QingChenMSc.ps.gz.
CHEN, S. & LIU, B., 2001, "Generating Classification Rules According to User's Existing Knowledge",
In: Proc. of the SDM-01- 1st SIAM Int'l Conf. on Data Mining, Chicago, Illinois, USA.
http://www.siam.org/meetings/sdm01/pdf/sdm01_15.pdf.
CHICKERING, D.M., GEIGER, D. & HECKERMAN, D., 1994, Learning Bayesian Networks: The
Combination of Knowledge and Statistical Data, Technical Report MSR-TR-94-09, Microsoft
Research, Microsoft Corporation, Redmond, Washington, USA.
ftp://ftp.research.microsoft.com/pub/tr/tr-94-09.ps.
COELHO, P.S.S. & EBECKEN, N.F.F., 2002, "A Comparison of some Classification Techniques", In:
Data Mining III (Proc. of the 3rd Int'l Conf. on Data Mining), Bologna, Italy, Zanasi, A. et alii
(eds.), WIT Press, pp. 573-582. http://www.witpress.com.
COSTA, M.C.A., 1999, Data Mining em Computadores de Alto Desempenho Utilizando-se Redes
Neurais, Tese de Doutorado, COPPE/UFPR, Rio de Janeiro, RJ, Brasil. http://www.coc.ufrj.br.
CRAVEN, M. et alii, 2000, "Learning to Construct Knowledge Bases from the World Wide Web",
Artificial Intelligence, Vol. 118, No. 1-2, pp. 69-113. http://www.cs.wisc.edu/~craven/aij00.ps.gz.
CRAWFORD, S.L., 1989, "Extensions to the CART algorithm", Int'l Journal of Man-Machine Studies,
Vol. 31, No. 2, pp. 197-217. http://dblab.ce.cnu.ac.kr/~dolphin/db/indices/a-
tree/c/Crawford:Stuart_L=.html.
CUROTTO, C.L., 2002, Thin Client Decision Viewer Sample Modified, ASP utility application hosted
by Data Mining Community Web Site. http://communities.msn.com/AnalysisServicesDataMining.
DBMINER TECHNOLOGY INC., 2002, DBMiner, DBMiner Technology Inc., Vancouver, British
Columbia, Canada. http://www.dbminer.com.
57
DMG - DATA MINING GROUP, 2002, PMML - Predictive Model Markup Language Version 2.0
Specification, Data Mining Group. http://www.dmg.org.
DOMINGOS, P. & PAZZANI, M., 1996, "Beyond Independence: Conditions for the Optimality of the
Simple Bayesian Classifier", In: Proc. of the 13th Int'l Conf. on Machine Learning, Bari, Italy,
pp. 105-112. http://www.cs.washington.edu/homes/pedrod/papers/mlc96.pdf.
DOMINGOS, P. & PAZZANI, M., 1997, "On the Optimality of the Simple Bayesian Classifier under
Zero-One Loss", Machine Learning, Vol. 29, No. 2-3, pp. 103-130.
http://www.cs.washington.edu/homes/pedrod/papers/mlj97.pdf.
FAIRBAIRN, E.M.R. et alii, 1999, "Retroanálise Neural Para a Identificação dos Parâmetros Elásticos
da Barragem Casca de Funil", In: Anais do XXIII Seminário Nacional de Grandes Barragens,
Belo Horizonte, MG, Brazil, V.1, pp 339-345. http://www.coc.ufrj.br/~alvaro/papers/funil.ps.gz.
FAYYAD, U.M., CHAUDHURI, S. & BRADLEY, P.S., 2000, "Data Mining and its Role in Database
Systems. Tutorial", VLDB 2000, 26th Int´l Conf. on Very Large Databases, Cairo, Egypt,
Tutorial. http://www.research.microsoft.com/dmx/VLDB2000Tut/VLDB2000Tut-Web.pdf.
FAYYAD, U.M., PIATETSKY-SHAPIRO, G. & SMYTH, P., 1995, "From Data Mining to Knowledge
Discovery: An Overview", In: Advances in Knowledge Discovery and Data Mining, Fayyad,
U.M. et alii (eds.), AAAI/MIT Press, pp. 1-36. http://mitpress.mit.edu.
FAYYAD, U.M., PIATETSKY-SHAPIRO, G. & SMYTH, P., 19961, "From Data Mining to Knowledge
Discovery in Databases", AI Magazine, Vol. 17, No. 3, pp. 37-54.
http://kdnuggets.com/gpspubs/aimag-kdd-overview-1996-Fayyad.pdf.
FAYYAD, U.M., PIATETSKY-SHAPIRO, G. & SMYTH, P., 19962, "Knowledge Discovery and Data Mining:
Towards a Unifying Framework", In: Proc. of the KDD'96, 2nd Int'l Conf. on Knowledge
Discovery and Data Mining, Portland, Oregon, USA. pp. 82-88.
http://citeseer.nj.nec.com/fayyad96knowledge.html.
FRANK, E. et alii, 2000, "Technical Note: Naive Bayes for Regression", Machine Learning, Vol. 41,
No. 1, pp. 5-25. http://www.cs.waikato.ac.nz/~ml/publications/2000/Frank-et-al-Naive-Bayes.pdf.
FREITAS, A.A., 19971, "A Genetic Programming Framework for Two Data Mining Tasks: Classification
and Generalized Rule Induction", In: Genetic Programming 1997 (Proc. of the 2nd Annual
Conf.), Stanford, UK, Deb, K. et alii (eds.), Morgan Kaufmann Publishers, pp. 96-101.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/gp97.ps.
FREITAS, A.A., 19973, "Towards Large-scale Knowledge Discovery in Databases (KDD) by Exploiting
Parallelism in Generic KDD Primitives", In: Proc. of the 3rd Int'l Workshop on Next-Generation
Info. Technologies and Systems, Neve Ilan, Israel, pp. 33-43.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/ngits97.ps.
FREITAS, A.A., 19981, "A Multi-Criteria Approach for the Evaluation of Rule Interestingness", In: Data
Mining (Proc. of the Int'l Conf. on Data Mining), Rio de Janeiro, RJ, Brazil, Ebecken, N. F. F.
(ed.), WIT Press, pp. 7-20. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/dmrio98.ps.
58
FREITAS, A.A., 19982, "On Objective Measures of Rule Surprisingness", In: Principles of Data Mining &
Knowledge Discovery (Proc. of the PKDD'98, 2th European Conf.), Lecture Notes in Artificial
Intelligence 1510, Nantes, France, Zytkow, J. M. & Quafafon, M. (eds.), Springer-Verlag, pp.
1-9. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/pkdd98.ps.
FREITAS, A.A. & LAVINGTON, S.H., 19961, "Parallel Data Mining for Very Large Relational
Databases", In: Proc. of the HPCN'96, Int'l Conf. on High-Performance Computing and
Networking, Lecture Notes in Computer Science 1067, Brussels, Belgium, Liddel, H. et alii
(eds.), Springer-Verlag, pp. 158-163. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/hpcn96.ps.
FREITAS, A.A. & LAVINGTON, S.H., 19962, "Using SQL Primitives and Parallel DB Servers to Speed Up
Knowledge Discovery in Large Relational Databases", In: Cybernetics and Systems'96 (Proc.
of the 13th European Meeting on Cybernetics and Systems Research), Vienna, Austria,
Trappl, R. (eds.), pp. 955-960. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/cyber96.ps.
FREITAS, A.A. & LAVINGTON, S.H., 19963, "Speeding up Knowledge Discovery in Large Relational
Databases by Means of a New Discretization Algorithm", In: Advances in Databases (Proc.
of the BNCOD-14, 14th British Nat. Conf. on Databases), Lecture Notes in Artificial
Intelligence 1094, Edinburgh, UK, Morrison, R. & Kennedy, J. (eds.), Springer-Verlag, pp. 124-
133. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/bncod96.ps.
FREITAS, A.A. & LAVINGTON, S.H., 19964, "A Framework for Data-Parallel Knowledge Discovery in
Databases", In: Proc. of the IEE Colloquium on Knowledge Discovery and Data Mining,
London, UK, Digest No. 96/198, pp. 6/1-6/4.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/iee96.ps.
FU, Y. & HAN, J., 1995, "Meta-Rule-Guided Mining of Association Rules in Relational Databases", In:
Proc. of the KDOOD'95, Int'l Workshop. on Knowledge Discovery and Deductive and
Object-Oriented Databases, Singapore, Malaysia, pp. 39-46.
ftp://ftp.fas.sfu.ca/pub/cs/han/kdd/kdood95.ps.gz.
GÄRTNER, T., 20011, The Contribution of the University of Bristol to the Sisyphus Data Mining
Problem, Technical Report, University of Bristol, Bristol, UK.
http://www.cs.bris.ac.uk/~SolEuNet/Library/Ps/gaertner-sisyphus.pdf.
GÄRTNER, T., 20012, ROC analysis on Sisyphus Data, Technical Report, University of Bristol, Bristol,
UK. http://www.cs.bris.ac.uk/~SolEuNet/Library/Ps/gaertner-sisyphus-roc.pdf.
GÄRTNER, T., WU, S. & FLACH, P. A., 2001, "Data Mining on the Sisyphus Dataset: Evaluation and
Integration of Results", In: Proc. of IDDM-2001 - ECML/PKDD01 Workshop on Integrating
Aspects of Data Mining, Decision Support and Meta-Learning, Freiburg, Germany, Giraud-
Carrier, C., Lavrac, N. & Moyle, S. (eds.), pp. 69-80.. http://ai.ijs.si/branax/iddm-2001-
proceedings/paper10.pdf.
HAN, J., 1997, "OLAP Mining: An Integration of OLAP with Data Mining", In: Proc. of the DS-7, IFIP
Conf. on Data Semantics, Leysin, Switzerland, pp. 1-11.
ftp://ftp.fas.sfu.ca/pub/cs/han/kdd/olapm.ps.gz.
HAN, J. & KAMBER, M., 2001, Data Mining: Concepts and Techniques, 1st ed., San Francisco,
California, USA, Morgan Kaufmann Publishers. http://www.mkp.com.
59
HAN, J. et alii, 19961, "DMQL: A Data Mining Query Language for Relational Databases", DMKD'96,
SIGMOD'96 Workshop on Research Issues on Data Mining and Knowledge Discovery,
Montreal, Quebec, Canada. ftp://ftp.fas.sfu.ca/pub/cs/han/kdd/dmql96.ps.gz.
HAN, J. et alii, 19962, "DBMiner: Interactive Mining of Multiple-Level Knowledge in Relational
Databases", In: Proc. of the SIGMOD'96, ACM SIGMOD Int'l Conf. on Management of Data,
Montreal, Quebec, Canada, pp. 550-550. http://www.acm.org.
HAN, J. et alii, 19963, "DBMiner: A System for Mining Knowledge in Large Relational Databases", In:
Proc. of the KDD'96, 2nd Int'l Conf. on Knowledge Discovery in Databases and Data
Mining, Portland, Oregon, USA, pp. 250-255. ftp://ftp.fas.sfu.ca/pub/cs/han/kdd/kdd96.ps.gz.
HAN, J., CHEE, S. & CHIANG, J.Y., 1998, "Issues for On-Line Analytical Mining of Data Warehouses",
In: Proc. of the DMKD'98, SIGMOD'98 Workshop on Research Issues on Data Mining and
Knowledge Discovery, Seattle, Washington, USA, pp. 2:1-2:5.
ftp://ftp.fas.sfu.ca/pub/cs/han/kdd/dmkd98.ps.gz.
HANSON, R., STUTZ, J. & CHEESEMAN, P., 1991, Bayesian Classification Theory, Technical Report
FIA-90-12-7-01, NASA Ames Research Center, Artificial Intelligence Branch, Moffett Field,
California, USA. http://ic.arc.nasa.gov/ic/projects/bayes-group/images/tr-fia-90-12-7-01.ps.
JOHN, G.H., 1997, Enhancements to the Data Mining Process, Ph.D. Dissertation, Stanford
University, California, USA. http://robotics.stanford.edu/users/gjohn.
JOHN, G.H. & LANGLEY, P., 1995, "Estimating Continuous Distributions in Bayesian Classifiers", In:
Proc. of the UAI'95, 11th Conf. on Uncertainty in Artificial Intelligence, Montreal, Quebec,
Canada, pp. 338-345. http://www.isle.org/~langley/papers/flex.uai95.ps.gz.
KALLES, D., 1994, Decision Trees and Domain Knowledge in Pattern Recognition, Ph.D. Thesis,
University of Manchester Institute of Science and Technology (UMIST), Manchester, UK.
http://www.cti.gr/RD3/users/kallesData/abstractphd.htm.
KIETZ, J.U. & STAUDT, M., 1998, KDD Sisyphus I - Data set, Information Systems Research, CH/IFUE,
Swiss Life, Zurich, Switzerland. http://www.cs.wisc.edu/~lists/archive/dbworld/0426.html.
KIM, P., 2002, Microsoft.public.sqlserver.datamining FAQ (Frequently Asked Questions and
Answers), Resource hosted by Data Mining Community Web Site.
http://communities.msn.com/AnalysisServicesDataMining.
KIM, P. & CARROLL, M., 2002, Making OLE DB for Data Mining queries against a DM provider,
Visual Basic utility application hosted by Data Mining Community Web Site.
http://communities.msn.com/AnalysisServicesDataMining.
KING, M.D. & GREENSTONE, R., 1999, 1999 EOS Reference Handbook, 1999 ed., Greenbelt,
Maryland, USA, NASA/Goddard Space Flight Center.
http://eospso.gsfc.nasa.gov/eos_homepage/misc_html/refbook.html.
KLEMETTINEN, M. et alii, 1994, "Finding Interesting Rules from Large Sets of Discovered Association
Rules", In: Proc. of the CIKM'94, 3rd Int'l Conf. on Information and Knowledge Management,
Gaithersburg, Maryland, USA, pp. 401-407.
http://www.cs.helsinki.fi/research/fdk/datamining/pubs/cikm94.ps.gz.
LANGLEY, P., IBA, W. & THOMPSON, K., 1992, "An Analysis of Bayesian Classifiers", In: Proc. of the
AAAI'92, 10th National Conf. on Artificial Intelligence, San Jose, California, USA, pp. 223-
228. http://www.isle.org/~langley/papers/bayes.aaai92.ps.gz.
60
LEUNG, C.H. & SZE, L., 1998, "A Method to Speed Up the Bayes Classifier", Engineering Applications
of Artificial Intelligence, Vol. 11, No. 3, pp. 419-424. http://www.elsevier.com.
LIU, B. & HSU, W., 1996, "Post-Analysis of Learned Rules", In: Proc. of the AAAI'96, 13th National
Conf. on Artificial Intelligence, Portland, Portland, Oregon, USA, pp. 828-834.
http://www.comp.nus.edu.sg/~liub/publications/aaai96.int.ps.
MADIGAN, D. & RIDGEWAY, G., 2002, Bayesian Data Analysis for Data Mining, Technical Report,
Rutgers University, Piscataway, New Jersew, USA.
http://www.stat.rutgers.edu/~madigan/PAPERS/bayes.ps.
MAES, S. et alii, 2002, "Credit Card Fraud Detection. Applying Bayesian and Neural networks", In:
Proc. of the NF2002, 1st Int'l NAISO Congress on Neuro Fuzzy Technologies, Havana, Cuba.
http://como.vub.ac.be/Members/karl/P100027-01-BM-096.ps.
MICROSOFT CORPORATION, 2002, OLE DB for Data Mining Resource Kit, Microsoft Corporation,
Redmond, Washington, USA. http://www.microsoft.com/data/oledb/DMResKit.htm.NAGAI, W.A.,
2000, Avaliação do Conhecimento Extraído de Problemas de Regressão (Evaluation of
Knowledge Extracted from Regression Problems), Dissertação de Mestrado (M.Sc.
Dissertation), Universidade de São Paulo – São Carlos - SP, Brazil.
http://www.icmc.sc.usp.br/~solange.
NETZ, A. et alii, 2000, "Integration of Data Mining and Relational Databases", In: Proc. of the VLDB
2000, 26th Int´l Conf. on Very Large Data Bases, Cairo, Egypt, pp. 719-722.
ftp://ftp.research.microsoft.com/users/AutoAdmin/vldb00DM.pdf.
61
NETZ, A. et alii, 2001, "Integrating Data Mining with SQL Databases: OLE DB for Data Mining", In:
Proc. of the ICDE'01, 17th Int´l Conf. on Data Engineering, Heidelberg, Germany, pp. 379-
387. ftp://ftp.research.microsoft.com/users/AutoAdmin/netza_oledb.pdf.
PARPINELLI, R.S., LOPES H.S. & FREITAS, A.A., 2001, "An Ant Colony Based System for Data Mining:
Applications to Medical Data", In: Proc. of the GECCO'2001, Genetic and Evolutionary
Computation Conf., San Francisco, California, USA.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/GECCO-2001-Raf.ps.
PERLMAN, G., 1986, The |STAT Handbook Data Analysis Programs on UNIX and MSDOS, online ed.,
Gary Perlman's Home Page. http://www.acm.org/~perlman/stat.
PIATETSKY-SHAPIRO, G. & MATHEUS, C.J., 1994, "The Interestingness of Deviations", In: Proc. of the
KDD'94, AAAI'94 Knowledge Discovery in Databases Workshop, Seattle, Washington, USA,
pp. 25-36. ftp.gte.com/pub/matheus/kd/kdd94-int.ps.
PYLE, D., 1999, Data Preparation for Data Mining, 1st ed., San Francisco, California, USA, Morgan
Kaufmann Publishers. http://www.mkp.com.
QUAH, T. & SRINIVASAN, B., 1999, "Improving Returns on Stock Investment through Neural Network
Selection", Expert Systems with Applications, Vol. 17, No. 4, pp. 295-301.
http://www.elsevier.com.
QUINLAN, J.R., 19931, "A Case Study in Machine Learning", In: Proc. of the ACSC'93, 16th Australian
Computer Science Conf., Brisbane, Australia, pp. 731-737.
http://www.cse.unsw.edu.au/~quinlan/q.acsc93.ps.
QUINLAN, J.R., 19932, C4.5: Programs for Machine Learning, 1st ed., San Mateo, California, USA,
Morgan Kaufmann Publishers. http://www.cse.unsw.edu.au/~quinlan.
RAM, A., 1990, "Kknowledge Goals: A Theory of Interestigness", In: Proc. of the 12th Annual Conf.
of the Cognitive Science Society, Cambridge, Massachusetts, USA, pp. 206-214.
http://www.cc.gatech.edu/faculty/ashwin/papers/er-90-02.ps.Z.
ROUSU, J., ELOMAA, T. & AARTS, R., 1999, "Predicting the Speed of Beer Fermentation in
Laboratory and Industrial Scale", In: Engineering Applications of Bio-Inspired Artificial Neural
Networks (Proc. of the 5th Int'l Work-Conf), Lecture Notes in Computer Science 1607,
Alicante, Spain, Mirá, J. & Sánchez-Andrés, J. V. (eds.), Springer-Verlag, pp. 893-901.
http://www.cs.helsinki.fi/~elomaa/papers/iwann-final.ps.gz.
SANDSTONE TECNOLOGY INC., 2000, Visual Parse++ Version 4.00, Sandstone Tecnology Inc.,
Carlsbad, California, USA. http://www.sand-stone.com.
SARAWAGI, S., THOMAS, S. & AGRAWAL, R., 1998, Integrating Association Rule Mining with
Databases: Alternatives and Implications, IBM Research Report RJ 10107, IBM Almaden
Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/sigmod98_dbi_rj.pdf.
SATTLER, K. & DUNEMANN, O., 2001, "SQL Database Primitives for Decision Tree Classifiers", In: Proc.
of the CIKM 2001, 10th ACM Int'l Conf. on Information and Knowledge Management,
Atlanta, Georgia, USA, pp. 379-386. http://www.acm.org.
SEIDMAN, C., 2001, Data Mining with Microsoft® SQL Server™ 2000 - Technical Reference, 1st ed.,
Redmond, Washington, USA, Microsoft Press. http://www.mspress.microsoft.com.
62
SETH, P., 2001, Third-Party Data Mining Providers, White paper, Microsoft Research, Microsoft
Corporation, Redmond, Washington, USA.
http://www.microsoft.com/sql/techinfo/BI/2000/DMAggregator.doc.
SETH, P., GUATAM, N. & BALINT, R., 2002, Preparing and Mining Data with Microsoft® SQL Server™
2000 and Analysis Services, online ed., Redmond, Washington, USA, Microsoft Online Books.
http://msdn.microsoft.com/library/default.asp?url=/servers/books/sqlserver/mining.asp.
SFORNA, M., 2000, "Data Mining in a Power Company Customer Database", Electric Power
Systems Research, Vol. 55, No. 3, pp. 201-209. http://www.elsevier.com.
SILBERSCHATZ, A., 1995, "On Subjective Measures of Interestingness in Knowledge Discovery", In:
Advances in Knowledge Discovery and Data Mining (Proc. of the KDD'95, 1st Int'l Conf. on
Knowledge Discovery and Data Mining), Montreal, Quebec, Canada, Fayyad, U.M. &
Uthurusamy, R. (eds.), AAAI/MIT Press, pp. 275-281. http://www.bell-
labs.com/user/avi/publication-dir/kdd95.ps.
SILVER, D.L, 1998, Knowledge Discovery and Data Mining, MBA course notes of Dalhousie
University, Nova Scotia, Canada. http://ttg.sba.dal.ca/sba/profs/dsilver.
SKONNARD, A., 1998, "Say UDA for All Your Data Access Needs", Microsoft Interactive Developer,
April, 1998. http://www.microsoft.com/mind/0498/uda/uda.asp.
SONI, S., TANG, Z. & YANG, J., 2002, Performance Study of Microsoft® Data Mining Algorithms,
White paper, Microsoft Research, Microsoft Corporation, Redmond, Washington, USA.
http://www.microsoft.com/SQL/evaluation/compare/AnalysisDMWP.asp.
SOUSA, M.S., MATTOSO, M.L.Q. & EBECKEN, N.F.F., 19983, "Data Mining: a Database Perspective",
In: Data Mining (Proc. of the Int'l Conf. on Data Mining), Rio de Janeiro, RJ, Brazil, Ebecken,
N. F. F. (ed.), WIT Press, pp. 413-431. http://www.cos.ufrj.br/~mauros.
STAUDT, M., KIETZ, J.U. & REIMER, U., 1998, "A Data Mining Support Environment and its Application
on Insurance Data", In: Proc. of the KDD'98, 4th Int'l Conf. on Knowledge Discovery and
Data Mining, New York City, New York, USA, Agrawal, R., Stolorz, P.E. & Piatetsky-Shapiro, G.
(eds.), AAAI Press, pp. 105-111. http://kietz.ch/kdd98.ps.gz.
STEFANOVIC, N., 1997, Design and Implementation of On-Line Analytical Processing (OLAP) of
Spatial Data, M.Sc. Thesis, Computing Science, Simon Fraser University, Burnaby, British
Columbia, Canada. ftp://fas.sfu.ca/pub/cs/theses/1997/NebojsaStefanovicMSc.ps.gz.
63
TAM, Y.J., 1998, Datacube: Its Implementation and Application in OLAP Mining, M.Sc. Thesis,
Computing Science, Simon Fraser University, Burnaby, British Columbia, Canada.
ftp://fas.sfu.ca/pub/cs/theses/1998/YinJennyTamMSc.ps.gz.
TANG, Z., 20021, Thin Client Decision Viewer Sample, ASP utility application hosted by Data Mining
Community Web Site. http://communities.msn.com/AnalysisServicesDataMining.
TOIVONEN, H. et alii, 1995, "Pruning and Grouping Discovered Association Rules", In: Workshop
Notes of the ECML'95 Workshop on Statistics, Machine Learning and Knowledge Discovery
in Databases, Heraklion, Greece, pp. 47-52.
http://www.cs.helsinki.fi/research/fdk/datamining/pubs/crete95.ps.gz.
UTGOFF, P.E., 1989, "Incremental Induction of Decision Trees", Machine Learning, Vol. 4, No. 2, pp.
161-186. http://www.cs.umass.edu/~utgoff.
UTGOFF, P.E., 1994, An Improved Algorithm for Incremental Induction of Decision Trees, Technical
Report 94-07, University of Massachusetts, Department of Computer Science, Amherst,
Massachusetts, USA. ftp://ftp.cs.umass.edu/pub/techrept/techreport/1994/UM-CS-1994-007.ps.
VAILAYA, A. & JAIN, A., 1999, "Incremental Learning for Bayesian Classification of Images", In:
Proc. of the ICIP'99, Int'l Conf. on Image Processing, Kobe, Japan, Vol. 2, pp. 585 -589.
http://ieeexplore.ieee.org.
VANIER, D.J. & DANYLO, N.H., 19981, "Municipal Infrastructure Investment Planning: Managing The
Data", In: Proc. of the 1st Int'l Conf. on New Information Technologies for Decision Making in
Civil Engineering, Montreal, Quebec, Canada, pp. 1-14.
http://www.nrc.ca/irc/fulltext/nrcc42664.pdf.
VANIER, D.J. & DANYLO, N.H., 19982, "Municipal Infrastructure Investment Planning: Asset
Management", In: Proc. of the APWA Int'l Public Works Congress and Exhibition, Las Vegas
Nevada, USA, pp. 25-39. http://www.nrc.ca/irc/fulltext/nrcc42665.pdf.
VILLE, B., 2001, "Data Mining in SQL Server™ 2000", SQL SERVER MAGAZINE, January, 2001.
http://www.sqlmag.com/Articles/Index.cfm?ArticleID=16175.
WC3 - WORLD WIDE WEB CONSORTIUM, 2000, Extensible Markup Language (XML) 1.0 (Second
Edition), Bray, T. et alii (eds.), WC3 - World Wide Web Consortium. http://www.w3.org/TR/REC-
xml.
WITTEN, I.H. & FRANK, E., 2000, Data Mining: Practical Machine Learning Tools with Java
Implementations, 1st ed., San Francisco, California, USA, Morgan Kaufmann Publishers.
http://www.cs.waikato.ac.nz/~ml.
ZHU, H., 1998, On-Line Analytical Mining of Association Rules, M.Sc. Thesis, Computing Science,
Simon Fraser University, Burnaby, British Columbia, Canada.
ftp://fas.sfu.ca/pub/cs/theses/1998/HuaZhuMSc.ps.gz.
64
REFERÊNCIAS COMPLEMENTARES
AGRAWAL, R., 1999, "Data Mining: Crossing the Chasm", KDD'99, 5th ACM SIGKDD Int'l Conf. on
Knowledge Discovery and Data Mining, San Diego, California, USA, Invited Talk.
http://www.almaden.ibm.com/cs/quest/papers/kdd99_chasm.ppt.
AGRAWAL, R. & PSAILA, G., 1995, "Active Data Mining", In: Advances in Knowledge Discovery and
Data Mining (Proc. of the KDD'95, 1st Int'l Conf. on Knowledge Discovery and Data Mining),
Montreal, Quebec, Canada, Fayyad, U.M. & Uthurusamy, R. (eds.), AAAI/MIT Press, pp. 3-8.
http://www.almaden.ibm.com/cs/quest/papers/kdd95_active.pdf.
AGRAWAL, R. & SHAFER, J.C., 1996, Parallel Mining of Association Rules, Research Report 10004,
IBM Almaden Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/rj10004.pdf.
AGRAWAL, R. et alii, 19951, Querying Shapes of Histories, IBM Research Report RJ 9962, IBM
Almaden Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/vldb95_shape_rj.pdf.
AGRAWAL, R. et alii, 19962, "On the Computation of Multidimensional Aggregates", In: Proc. of the
VLDB 1996, 22th Int'l Conf. on Very Large Databases, Mumbai, Bombay, India, pp. 506-521.
http://www.almaden.ibm.com/cs/quest/papers/vldb96_cube.pdf.
AGRAWAL, R. et alii, 1998, "Automatic Subspace Clustering of High Dimensional Data for Data
Mining Applications", In: Proc. of the SIGMOD'98, ACM SIGMOD Int'l Conf. on Management
of Data, Seattle, Washington, USA, pp. 94-105.
http://www.almaden.ibm.com/cs/quest/papers/sigmod98_clique.pdf.
AGRAWAL, R., GUPTA, A. & SARAWAGI, S., 1997, Modeling Multidimensional Databases, IBM
Research Report, IBM Almaden Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/md_model_rj.pdf.
AHA, D.W., 1991, "Incremental Constructive Induction: An Instance-Based Approach", In: Proc. of
the 8h Int'l Workshop on Machine Learning, Evanston, Illinois, USA, pp. 117-121.
http://www.aic.nrl.navy.mil/~aha/papers/aha-imlw91.ps.
AL-SALEH, M.F. & MASOUD, F.A., 2003, "A Note on the Posterior Expected Loss as a Measure of
Accuracy in Bayesian Methods", Applied Mathematics and Computation, Vol. 134, No. 2-3,
pp. 507-514. http://www.elsevier.com.
ARAUJO, D.L.A., LOPES, H.S. & FREITAS, A.A., 1999, "A Parallel Genetic Algorithm for Rule Discovery
in Large Databases", In: Proc. of the IEEE Systems, Man and Cybernetics Conf., Tokyo,
Japan, Vol. III, pp. 940-945. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/smc99.ps.
ARNING, A., AGRAWAL, R. & RAGHAVAN, P., 1996, "A Linear Method for Deviation Detection in
Large Databases", In: Proc. of the KDD'96, 2nd Int'l Conf. on Knowledge Discovery in
Databases and Data Mining, Portland, Oregon, USA, pp. 164-169.
http://www.almaden.ibm.com/cs/quest/papers/kdd96_dev.pdf.
65
ASELTINE, J.H., 1999, WAVE: An Incremental Algorithm for Information Extraction, Technical Report
- Dep. of Computer Science, University of Massachusetts at Amherst, Massachusetts, USA.
http//www-nlp.cs.umass.edu/ciir-pubs/JAseltine1999.pdf.
BAYARDO JR., R.J. & AGRAWAL, R., 1999, "Mining the Most Interesting Rules", In: Proc. of the
KDD'99, 5th ACM SIGKDD Int'l Conf. on Knowledge Discovery and Data Mining, San Diego,
California, USA, pp. 145-154. http://www.almaden.ibm.com/cs/quest/papers/kdd99.pdf.
BAYARDO JR., R.J., AGRAWAL, R. & GUNOPULOS, D., 1999, Constraint-Based Rule Mining in Large,
Dense Databases, IBM Research Report RJ 10146, IBM Almaden Research Center, San
Jose, California, USA. http://www.almaden.ibm.com/cs/quest/papers/icde99_rj.pdf.
BERKMAN, N.C. & SANDHOLM, T.W., 1995, What Should be Minimized in a Decision Tree: A Re-
examination, Technical Report 95-20, University of Massachusetts, Department of
Computer Science, Amherst, Massachusetts, USA.
ftp://ftp.cs.umass.edu/pub/techrept/techreport/1995/UM-CS-1995-020.ps.
BJANGER, M.S., 2000, Induction of Decision Trees from Partially Classifed Data using Belief
Functions, Master's Thesis, Norwegian University of Science and Technology, Department of
Computer and Information Science, Trondheim, Norway.
http://www.hds.utc.fr/~tdenoeux/rapports/Rapport_marte.ps.
BRAZDIL, P.B. & TORGO, L., 19901, Knowledge Integration and Learning, Technical Report, LIACC,
University of Porto, Porto, Portugal. http://www.ncc.up.pt/~ltorgo/Papers/KIL.ps.gz.
BRAZDIL, P.B. & TORGO, L., 19902, "Knowledge Acquisition via Knowledge Integration", In: Current
Trends in Knowledge Acquisition (Proc. of the EKAW'90, 4th European Knowledge
Acquisition for Knowledge Based Systems Workshop), Amsterdam, Netherlands, Wielinga, B.
et alii (eds.), IOS Press, pp. 90-104. http://www.ncc.up.pt/~ltorgo/Papers/KAKI.ps.gz.
BRESLOW, L.A. & AHA, D.W., 1996, Simplifying Decision Trees: A Survey, NCARAI Technical Report
AIC-96-014, Navy Center for Applied Research in Artificial Intelligence, Naval Research
Laboratory, Washington, DC, USA. http://www.aic.nrl.navy.mil/~aha.
BRODLEY, C.E. & UTGOFF, P.E., 1992, Multivariate Versus Univariate Decision Trees, Technical
Report 92-008, University of Massachusetts, Department of Computer Science, Amherst,
Massachusetts, USA. .
BUJA, A. & LEE, Y., 2001, "Data Mining Criteria for Tree-Based Regression and Classification", In:
Proc. of the the KDD'01, 7th ACM SIGKDD Int'l Conf. on Knowledge Discovery and Data
Mining, San Francisco, California, USA, pp. 27-36. http://www.acm.org.
CARVALHO, D.R., 1999, Data Mining através de Indução de Regras e Algoritmos Genéticos,
Dissertação de Mestrado, Pontifícia Universidade Católica do Paraná, Curitiba, PR, Brazil.
avila@ppgia.pucpr.br.
CARVALHO, D.R. & FREITAS, A.A., 20001, "A Genetic Algorithm-Based Solution for the Problem of
Small Disjuncts", In: Principles of Data Mining and Knowledge Discovery (Proc. of
PKDD'2000, 4th European Conf.), Lecture Notes in Artificial Intelligence 1910, Lyon, France,
Zighed, D.A., Komorowski, J. & Zytkow, J. (eds.), Springer-Verlag, pp. 345-352.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/PKDD-2000.ps.
66
CARVALHO, D.R. & FREITAS, A.A., 20002, "A Hybrid Decision Tree/Genetic Algorithm for Coping
with the Problem of Small Disjuncts in Data Mining", In: Proc. of the GECCO'2000, Genetic
and Evolutionary Computation Conf., Las Vegas, Nevada, USA, pp. 1061-1068.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/GECCO-2000-Deb.ps.
CARVALHO, D.R., AVILA, B.C. & FREITAS, A.A., 1999, "A Hybrid Genetic Algorithm/Decision Tree
Approach for Coping with Unbalanced Classes", In: Proc. of the PADD'99, 3rd Int'l Conf. on
the Practical Applications of Knowledge Discovery & Data Mining, London, UK, pp. 61-70.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/padd99.ps.
CHAUDHURI, S. & DAYAL, U., 1997, An Overview of Data Warehousing and OLAP Technology,
Technical Report MSR-TR-97-14, Microsoft Research, Microsoft Corporation, Redmond,
Washington, USA. ftp://ftp.research.microsoft.com/pub/tr/tr-97-14.doc.
CHAUDHURI, S., NARASAYYA, V. & SARAWAGI, S., 2002, "Efficient Evaluation of Queries with Mining
Predicates", In: Proc. of the ICDE'02, 18th Int´l Conf. on Data Engineering, San Jose,
California, USA. http://www.it.iitb.ac.in/~sunita/papers/icde02.ps.
CLEARY, J.G., LEGG, S. & WITTEN, I.H., 1996, "An MDL Estimate of the Significance of Rules", In: Proc
of the ISIS, Information, Statistics, and Induction in Science, Melbourne, Australia, pp. 43-53.
http://www.cs.waikato.ac.nz/~ml/publications/1996/Cleary96-MDL.ps.
COOK, D., POTTS, J. & TAYLOR, W., 2002, AutoClass C - A public domain version of AutoClass III in
C, Visual C application. http://ic.arc.nasa.gov/ic/projects/bayes-group/autoclass/autoclass-c-win-
3-3-4.tar.gz.
CRAVEN, M., 1996, Extracting Comprehensible Models from Trained Neural Networks, Ph.D. Thesis,
Department of Computer Sciences, University of Wisconsin-Madison, Madison, Wisconsin,
USA. ftp://ftp.cs.wisc.edu/machine-learning/shavlik-group/craven.thesis.ps.Z.
CRAVEN, M. & SHAVLIK, J., 1999, Rule Extraction: Where Do We Go from Here?, Working Paper 99-
1, Machine Learning Research Group, University of Wisconsin, Madison, Wisconsin, USA.
http://www.cs.cmu.edu/~craven/rule-ex-position.ps.
CRAWFORD, S.L., 1987, Resampling Strategies for Recursive Partitioning Classification with the
Cart™ Algorithm, Ph.D. Thesis, School of Education, Stanford University, California, USA.
http://www-sul.stanford.edu/search/socii.
CUROTTO, C.L., 2000, Árvores de Decisão (Decision Trees), Relatório Técnico, COPPE/UFRJ, Rio de
Janeiro, RJ, Brasil. http://www.curotto.com/doc/portugues/arvores/arvores.zip.
CUROTTO, C.L. & EBECKEN, N.F.F., 20021, "Implementing Data Mining Algorithms with Microsoft®
SQL Server™", In: Data Mining III (Proc. of the 3rd Int'l Conf. on Data Mining), Bologna, Italy,
Zanasi, A. et alii (eds.), WIT Press, pp. 73-82. http://www.curotto.com/doc/english/icdm02.
CUROTTO, C.L. & EBECKEN, N.F.F., 20022, Implementing Data Mining Algorithms with Microsoft®
SQL Server™, Technical Report, COPPE/UFRJ, Rio de Janeiro, RJ, Brazil.
http://www.curotto.com/doc/english/icdm02.
CUROTTO, C.L. & EBECKEN, N.F.F., 2003, Developing Data Mining Providers for Microsoft® SQL
Server™, to appear. http://www.curotto.com/doc/english/ddmp.
67
DENOEUX, T. & BJANGER, M.S., 2000, "Induction of Decision Trees from Partially Classifed Data
using Belief Functions", In: Proc. of the SMC'2000, IEEE Int'l Conf. on Systems, Man, and
Cybernetics, Nashville, Tennessee, USA, pp. 2923 -2928.
http://www.hds.utc.fr/~tdenoeux/congres/smc2000.ps.
DOBRA, A. & GEHRKE, J., 2002, "SECRET: A Scalable Linear Regression Tree Algorithm", In: Proc. of
the the KDD'02, 8th ACM SIGKDD Int'l Conf. on Knowledge Discovery and Data Mining,
Edmonton, Alberta, Canada, pp. 481-487. http://www.acm.org.
ELOMAA, T., 1994, "In Defense of C4.5: Notes on Learning One-Level Decision Trees", In: Machine
Learning (Proc. of the ICML 1994, 11th Int'l Conf. on Machine Learning), New Brunswick,
New Jersey, USA, Cohen, W.W. & Hirsh, H. (eds.), Morgan Kaufmann Publishers, pp. 62-69.
http//www.cs.helsinki.fi/elomaa/papers/ml94.ps.gz.
ELOMAA, T., 1996, Tools and Techniques for Decision Tree Learning, Ph.D. Thesis, Report A-1996-2,
Department of Computer Science, University of Helsinki, Helsinki, Finland.
http://www.cs.helsinki.fi/TR/A-1996/2/A-1996-2.ps.gz.
ELOMAA, T., 1999, "The Biases of Decision Tree Pruning Strategies", In: Advances in Intelligent Data
Analysis (Proc. of the 3rd Int'l Symposium), Lecture Notes in Computer Science 1642,
Amsterdam, Netherlands, Hand, D. J. et alii (eds.), Springer-Verlag, pp. 63-74.
http//www.cs.helsinki.fi/elomaa/papers/ida-final.ps.gz.
ELOMAA, T. & ROUSU, J., 19971, "Well-Behaved Attribute Evaluation Functions for Numerical
Attributes", In: Foundations of Intelligent Systems (Proc. of the ISMIS'97), Lecture Notes in
Artificial Intelligence 1325, Charlotte, North Carolina, USA, Ras, Z. W. & Skowron (eds.),
Springer-Verlag, pp. 147-156. http://www.cs.helsinki.fi/~elomaa/papers/ismis97final.ps.gz.
ELOMAA, T. & ROUSU, J., 19972, "On the Well-Behavedness of Important Attribute Evaluation
Functions", In: Proc. of the SCAI'97, 6th Scandinavian Conf. on Artificial Intelligence, Helsinki,
Finland, pp. 95-106. http://www.cs.helsinki.fi/~elomaa/papers/scai97final.ps.gz.
ELOMAA, T. & ROUSU, J., 19981, "Postponing the Evaluation of Attributes with a High Number of
Boundary Points", In: Principles of Data Mining & Knowledge Discovery (Proc. of the
PKDD'98, 2th European Conf.), Lecture Notes in Artificial Intelligence 1510, Nantes, France,
Zytkow, J. M. & Quafafon, M. (eds.), Springer-Verlag, pp. 221-229.
http://www.cs.helsinki.fi/~elomaa/papers/pkdd98-final.ps.gz.
ELOMAA, T. & ROUSU, J., 19982, Postponing the Evaluation of Attributes with a High Number of
Boundary Points, Series of Publications C, Report C-1998-11, Department of Computer
Science, University of Helsinki, Helsinki, Finland. http://www.cs.helsinki.fi/~elomaa/papers/C-1998-
11.ps.gz.
ELOMAA, T. & ROUSU, J., 19991, "Speeding up the Search for Optimal Partitions", In: Principles of
Data Mining and Knowledge Discovery (Proc. of the PKDD'99, 3rd European Conf.), Lecture
Notes in Artificial Intelligence 1704, Pragne, Czech Republic, Zytkow, J. M. & Ranch, J
(eds.), Springer-Verlag, pp. 89-97. http://www.cs.helsinki.fi/~elomaa/pages/papers/pkdd99-
final.ps.gz.
ELOMAA, T. & ROUSU, J., 19992, "General and Efficient Multisplitting of Numerical Attributes",
Machine Learning, Vol. 36, No. 3, pp. 201-244. http://www.cs.helsinki.fi/~elomaa/papers/MLJ-
final.ps.gz.
68
ELOMAA, T. & ROUSU, J., 20001, Uses of Convexity in Numerical Domain Partitioning, NeuroCOLT2
Technical Report Series, Technical Report NC2-TR-2000-074.
http://www.cs.helsinki.fi/~elomaa/pages/papers/NCTR.ps.gz.
ELOMAA, T. & ROUSU, J., 20002, On the Splitting Properties of Common Attribute Evaluation
Functions, Series of Publications C, Report C-2000-1, Department of Computer Science,
University of Helsinki, Helsinki, Finland. http://www.cs.helsinki.fi/~elomaa/papers/C-2000-1.ps.gz.
FAYYAD, U.M., REINA, C.A. & BRADLEY, P.S., 1998, Initialization of Iterative Refinement Clustering
Algorithms, Technical Report MSR-TR-98-38, Microsoft Research, Microsoft Corporation,
Redmond, Washington, USA. ftp://ftp.research.microsoft.com/pub/tr/tr-98-38.pdf.
FERTIG, C.S. et alii, 1999, "A Fuzzy Beam-Search Rule Induction Algorithm", In: Principles of Data
Mining and Knowledge Discovery (Proc. of the PKDD'99, 3rd European Conf.), Lecture
Notes in Artificial Intelligence 1704, Pragne, Czech Republic, Zytkow, J. M. & Ranch, J
(eds.), Springer-Verlag, pp. 341-347. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/pkdd99.ps.
FIDELIS, M.V., LOPES, H.S. & FREITAS, A.A., 2000, "Discovering Comprehensible Classification Rules
with a Genetic Algorithm", In: Proc. of the CEC'2000, Congress on Evolutionary
Computation, La Jolla, California, USA, pp. 805-810.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/CEC-2000.ps.
FRANK, E., 2000, Pruning Decision Trees and Lists, Ph.D. Thesis, Department of Computer Science,
University of Waikato, Hamilton, New Zealand. http://citeseer.nj.nec.com/frank00pruning.html.
FRANK, E. et alii, 1998, "Using Model Trees for Classification", Machine Learning, Vol. 32, No. 1, pp.
63-76. http://www.cs.waikato.ac.nz/~ml/publications/1998/Frank-et-al-Model-Trees.pdf.
FREITAS, A.A., 19983, "The Principle of Transformation between Efficiency and Effectiveness:
Towards a Fair Evaluation of the Cost-effectiveness of KDD Techniques", In: Principles of
Data Mining and Knowledge Discovery (Proc. of the PKDD'97, 1th European Conf.), Lecture
Notes in Artificial Intelligence 1263, Trondheim, Norway, Springer-Verlag, pp. 299-306.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/pkdd97.ps.
FREITAS, A.A., 19984, "A Survey of Parallel Data Mining", In: Proc. of the PADD'98, 2nd Int'l Conf. on
the Practical Applications of Knowledge Discovery and Data Mining, London, UK, pp. 287-
300. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/padd98.ps.
FREITAS, A.A., 19991, "On Rule Interestingness Measures", Knowledge-Based Systems, Vol. 12, No. 5-
6, pp. 309-315. http://www.ppgia.pucpr.br/~alex.
FREITAS, A.A., 19992, "A Genetic Algorithm for Generalized Rule Induction", In: Advances in Soft
Computing - Engineering Design and Manufacturing (Proc. WSC3, 3rd On-Line World Conf.
on Soft Computing), Roy, R. et alii (eds.), Springer-Verlag, pp. 340-353.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/wsc3-98.ps.
FREITAS, A.A., 2000, "Understanding the Crucial Differences Between Classification and Discovery
of Association Rules: A Position Paper", ACM SIGKDD Explorations Newsletter, Vol. 2, No. 1,
pp. 65-69. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/SIGKDD-2000.ps.
GAMA, J., 2000, Combining Classification Algorithms, D.Sc. Thesis, Faculdade de Ciências da
Universidade do Porto, Porto, Portugal. http://www.ncc.up.pt/~jgama/tese.ps.gz.
69
GAMA, J. & BRAZDIL, P.B., 1995, "Characterization of Classification Algorithms", In: Proc. of the
EPIA'95, Portuguese Conf. on Artificial Intelligence, Funchal, Madeira Island, Portugal, pp.
189-200. http://www.ncc.up.pt/~jgama/mepia.ps.gz.
GINGRAS, F. & LAKSHMANAN, L.V.S., 1998, "nD-SQL: A Multi-dimensional Language for
Interoperability and OLAP", In: Proc. of the VLDB 1998, 24th Very Large Databases Conf.,
New York City, New York, USA, pp. 134-145.
ftp://ftp.cs.concordia.ca/pub/laks/papers/vldb98.ps.gz.
GRAY, J. et alii, 1995, Data Cube: A Relational Aggregation Operator Generalizing Group-By,
Cross-Tab, and Sub-Totals, Technical Report MSR-TR-95-22, Microsoft Research, Microsoft
Corporation, Redmond, Washington, USA. ftp://ftp.research.microsoft.com/pub/tr/tr-95-22.pdf.
GRAY, J. et alii, 1997, Data Cube: A Relational Aggregation Operator Generalizing Group-By,
Cross-Tab, and Sub-Totals, Technical Report MSR-TR-97-32, Microsoft Research, Microsoft
Corporation, Redmond, Washington, USA. ftp://ftp.research.microsoft.com/pub/tr/tr-97-32.doc.
HARINARAYAN, V., RAJARAMAN, A. & ULLMAN, J.D., 1996, "Implementing Data Cubes Efficiently",
In: Proc. of the SIGMOD'96, ACM SIGMOD Int'l Conf. on Management of Data, Montreal,
Quebec, Canada, pp. 205-216. http://www-db.stanford.edu/pub/papers/cube.ps.
HECKERMAN, D. & MEEK, C., 1997, Models and Selection Criteria for Regression and Classification,
Technical Report MSR-TR-97-08, Microsoft Research, Microsoft Corporation, Redmond,
Washington, USA. ftp://ftp.research.microsoft.com/pub/tr/tr-97-08.ps.
HO, C.T. et alii, 1997, "Range Queries in OLAP Data Cubes", In: Proc. of the SIGMOD'97, ACM
SIGMOD Int'l Conf. on Management of Data, Tucson, Arizona, USA, pp. 73-88.
http://citeseer.nj.nec.com/ho97range.html.
HO, C.T., BRUCK, J. & AGRAWAL, R., 1997, "Partial-Sum Queries in OLAP Data Cubes Using
Covering Codes", In: Proc. of the PODS'97, 16th ACM SIGACT-SIGMOD-SIGART Symposium
on Principles of Database Systems, Tucson, Arizona, USA, pp. 228-237.
http://citeseer.nj.nec.com/83887.html.
HOLMES, G., HALL, M. & FRANK, E., 1999, Generating Rule Sets from Model Trees, Working Paper
99/2, Department of Computer Science, University of Waikato, Hamilton, New Zealand.
http://www.cs.waikato.ac.nz/~ml/publications/1999/99GH-MH-EF-Rule-Sets.pdf.
HULTEN, G. & DOMINGOS, P., 2002, "Mining Complex Models from Arbitrarily Large Databases in
Constant Time", In: Proc. of the the KDD'02, 8th ACM SIGKDD Int'l Conf. on Knowledge
Discovery and Data Mining, Edmonton, Alberta, Canada, pp. 525-531. http://www.acm.org.
KALLES, D. & PAPAGELIS, A., 1999, "Induction of Decision Trees in Numeric Domains using Set-
Valued Attributes", ACAI-99, ECCAI Advanced Course on Artificial Intelligence, Crete,
Greece, Invited Talk. http://www.iit.demokritos.gr/skel/eetn/acai99/Workshops/w06/w06_03.pdf.gz.
KAMBER, M., HAN, J. & CHIANG, J.Y., 19971, Using Data Cubes for Metarule-Guided Mining of
Multi-Dimensional Association Rules, Technical Report CS-TR 97-10, School of Computing
Science, Simon Fraser University, Burnaby, British Columbia, Canada.
ftp://ftp.fas.sfu.ca/pub/cs/han/kdd/kdd97long.ps.gz.
70
KAMBER, M., HAN, J. & CHIANG, J.Y., 19972, "Metarule-Guided Mining of Multi-Dimensional
Association Rules Using Data Cubes", In: Proc. of the KDD'97, 3rd Int'l Conf. on Knowledge
Discovery and Data Mining, Newport Beach, California, USA, pp. 207-210.
ftp://ftp.fas.sfu.ca/pub/cs/han/kdd/kdd97short.ps.gz.
KNOBBE, A.J. et alii, 1999, Multi-relational data mining, Technical Report INS-R9908, CWI - National
Research Institute for Mathematics, Amsterdam, Netherlands.
http://www.cs.kuleuven.ac.be/~dtai/publications/files/20404.ps.gz.
KOCK, T., 1992, Inductive Learning of Compact Rule Sets by using Efficient Hypotheses Reduction,
Technical Report 92-069, University of California, Berkeley, California, USA.
ftp://ftp.icsi.berkeley.edu/pub/techreports/1992/tr-92-069.ps.gz.
KONTKANEN, P.T. et alii, 1998, "BAYDA: Software for Bayesian Classification and Feature Selection",
In: Proc. of the KDD'98, 4th Int'l Conf. on Knowledge Discovery and Data Mining, New York
City, New York, USA, Agrawal, R., Stolorz, P.E. & Piatetsky-Shapiro, G. (eds.), AAAI Press, pp.
254–258. http://citeseer.nj.nec.com/kontkanen98bayda.html.
KONTKANEN, P.T., MYLLYMÄKI, P.J. & TIRRI, H.R., 1996, "Comparing Bayesian Model Class Selection
Criteria by Discrete Finite Mixtures", In: Information, Statistics and Induction in Science (Proc.
of the ISIS'96 Conf.), Melbourne, Australia, Dowe, D.L., Korb, K.B. & Oliver, J.J. (eds.), Word
Scientific, pp. 364-374. http://citeseer.nj.nec.com/kontkanen96comparing.html.
LANGLEY, P. & SAGE, S., 1994, "Induction of Selective Bayesian Classifiers", In: Proc. of the UAI'94,
10th Conf. on Uncertainty in Artificial Intelligence, Seattle, Washington, USA, pp. 399-406.
http://www.isle.org/~langley/papers/select.uai94.ps.gz.
LAROCCA NETO, J. et alii, 20001, "Generating Text Summaries through the Relative Importance of
Topics", In: Advances in Artificial Intelligence (Proc. of the IBERAMIA'2000 & SBIA'2000),
Lecture Notes in Computer Science 1952, Atibaia, SP, Brazil, Monard, M.C. & Sichman, J.S.
(eds.), Springer-Verlag, pp. 300-309. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/SBIA-
2000.ps.
LAROCCA NETO, J. et alii, 20002, "Document Clustering and Text Summarization", In: Proc. of the
PADD'2000, 4th Int'l Conf. Practical Applications of Knowledge Discovery & Data Mining,
London, UK, pp. 41-55. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/PADD2000.ps.
LAROCCA NETO, J. et alii, 20003, "A Trainable Algorithm for Summarizing News Stories", PKDD'2000
Workshop on Machine Learning and Textual Information Access, Lyon, France.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/PKDD-Ws-2000.ps.
LAVINGTON, S.H. et alii, 1999, "Interfacing Knowledge Discovery Algorithms to Large Database
Management Systems", Information and Software Technology, Vol. 41, No. 9, pp. 605-617.
http://www.ppgia.pucpr.br/~alex.
LEE, C.H., 2002, Mining Association Relationship in a Temporal Database, Ph.D. Thesis, Electrical
Engineering Department, National Taiwan University, Taipei, Taiwan.
http://arbor.ee.ntu.edu.tw/~chlee/papers/PhDThesis052502.pdf.
LEE, C.H., LIN, C.R. & CHEN, M.S., 2001, "Sliding-Window Filtering: An Efficient Algorithm for
Incremental Mining", In: Proc. of the CIKM 2001, 10th ACM Int'l Conf. on Information and
Knowledge Management, Atlanta, Georgia, USA, pp. 263-270.
http://arbor.ee.ntu.edu.tw/~mschen/paperps/cikm414.pdf.
71
LENT, B., AGRAWAL, R. & SRIKANT, R., 1997, "Discovering Trends in Text Databases", In: Proc. of the
KDD'97, 3rd Int'l Conf. on Knowledge Discovery and Data Mining, Newport Beach,
California, USA, pp. 227-230. http://www.almaden.ibm.com/cs/quest/papers/kdd97_trends.pdf.
LI, R. & BELFORD, G.G., 2002, "Instability of Decision Tree Classification Algorithms", In: Proc. of the
the KDD'02, 8th ACM SIGKDD Int'l Conf. on Knowledge Discovery and Data Mining,
Edmonton, Alberta, Canada, pp. 570-575. http://midas-
10.cs.ndsu.nodak.edu/data/kdd2002/papers/p24.pdf.
MEHTA, M., AGRAWAL, R. & RISSANEN, J., 1996, "SLIQ: A Fast Scalable Classifier for Data Mining", In:
Proc. of the EDBT'96, 5th Int'l Conf. on Extending Database Technology, Avignon, France,
pp. 18-32. http://www.almaden.ibm.com/cs/quest/papers/edbt96_sliq.pdf.
MEHTA, M., RISSANEN, J. & AGRAWAL, R., 1995, "MDL-Based Decision Tree Pruning", In: Advances
in Knowledge Discovery and Data Mining (Proc. of the KDD'95, 1st Int'l Conf. on Knowledge
Discovery and Data Mining), Montreal, Quebec, Canada, Fayyad, U.M. & Uthurusamy, R.
(eds.), AAAI/MIT Press, pp. 216-221.
http://www.almaden.ibm.com/cs/quest/papers/kdd95_mdl.pdf.
MERZ, C.J., 1998, Classification and Regression by Combining Models, Ph.D. Dissertation, University
of California, Irvine, CA, USA. http://www.ics.uci.edu/~cmerz.
MIURA, T. & SHIOYA, I., 1999, "Incremental Update of Decision Trees for Temporal Objects", In:
Proc. of the KRDB'99, 6th Int'l Workshop on Knowledge Representation meets Databases,
Linköping, Sweden, pp. 41-45. http://sunsite.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-
21/miura.ps.
MURTHY, S.K., 1995, On Growing Better Decision Trees from Data, Ph.D. Thesis, John Hopkins
University, Baltimore, Maryland, USA. http://citeseer.nj.nec.com/murthy97growing.html.
MURTHY, S.K., 1997, Statistical Preprocessing for Decision Tree Induction, Technical Report, John
Hopkins University, Baltimore, Maryland, USA. http://www.cs.jhu.edu/~murthy/cluster.ps.Z.
MURTHY, S.K., KASIF, S. & SALZBERG, S., 19941, "A System for Induction of Oblique Decision Trees",
JAIR - Journal of Artificial Intelligence Research, Vol. 2, pp. 1-32.
http://www.cs.cmu.edu/afs/cs/project/jair/pub/volume2/murthy94a.ps.
MURTHY, S.K., KASIF, S. & SALZBERG, S., 19942, "OC1 - A System for Induction of Oblique Decision
Trees", JAIR - Journal of Artificial Intelligence Research, Vol. 2, Appendix.
http://www.cs.cmu.edu/afs/cs/project/jair/pub/volume2/murthy94a-appendix.tar.Z.
NODA, E., FREITAS, A.A. & LOPES, H.S., 1999, "Discovering Interesting Prediction Rules with a
Genetic Algorithm", In: Proc. of the CEC'99, Congress on Evolutionary Computation,
Washington, DC, USA, pp. 1322-1329. http://www.ppgia.pucpr.br/~alex/pub_papers.dir/cec99.ps.
PFAHRINGER, B., 1998, Inducing Small and Accurate Decision Trees, Technical Report 98-09,
Austrian Research Institute for Artificial Intelligence, Vienna, Austria.
ftp://ftp.ai.univie.ac.at/papers/oefai-tr-98-09.ps.gz.
PIATER, J.H., RISEMAN, E.M. & UTGOFF, P.E., 1997, Interactive Training of Pixel Classifiers Opens New
Possibilities, Technical Report 1997-051, University of Massachusetts, Department of
Computer Science, Amherst, Massachusetts, USA.
ftp://ftp.cs.umass.edu/pub/techrept/techreport/1997/UM-CS-1997-051.ps.
72
PIATER, J.H., RISEMAN, E.M. & UTGOFF, P.E., 19981, Interactive Training of Pixel Classifiers Opens
New Possibilities, Technical Report - Dep. of Computer Science, University of Massachusetts
at Amherst, Massachusetts, USA. http://vis-www.cs.umass.edu/~piater/lc/ISPRS98.ps.gz.
PIATER, J.H., RISEMAN, E.M. & UTGOFF, P.E., 19982, "Interactively Training Pixel Classifiers", In: Proc. of
the FLAIRS 1998, 11th Int'l Florida Artificial Intelligence Research Society Conf., Orlando,
Florida, USA. http://vis-www.cs.umass.edu/~piater/lc/FLAIRS98.ps.gz.
PIATER, J.H., RISEMAN, E.M. & UTGOFF, P.E., 1999, "Interactively Training Pixel Classifiers", Int'l Journal
of Pattern Recognition and Artificial Intelligence, Vol. 13, No. 2, pp. 171-194.. ftp://vis-
ftp.cs.umass.edu/Papers/piater/ijprai99.ps.gz.
QUINLAN, J.R., 1990, Comparing Connectionist and Symbolic Learning Methods, Technical
Report, University of New South Wales, Australia. http://www.cse.unsw.edu.au/~quinlan/pr90.ps.
QUINLAN, J.R., 1992, "Learning with Continuous Classes", In: Proc. of the Fifth Australian Joint Conf.
on Artificial Intelligence, Hobart, Tasmania, Australia, pp. 343-348.
http://www.cse.unsw.edu.au/~quinlan/q.ai92.ps.
QUINLAN, J.R., 19961, "Boosting, Bagging, and C4.5", In: Proc. of the AAAI'96, 13th National Conf.
on Artificial Intelligence, Portland, Oregon, USA, pp. 725-730.
http://www.cse.unsw.edu.au/~quinlan/q.aaai96.ps.
QUINLAN, J.R., 19962, "Boosting First-Order Learning", In: Algorithmic Learning Theory (Proc. of the
ALT '96, 7th Int'l Workshop), Lecture Notes in Computer Science 1160, Sydney, Australia,
Arikawa, S. & Sharma, A. (eds.), Springer-Verlag, pp. 143-155.
http://www.cse.unsw.edu.au/~quinlan/q.alt96.ps.
QUINLAN, J.R., 1999, MiniBoosting Decision Trees, Technical Report, University of New South Wales,
Australia. http://www.cse.unsw.edu.au/~quinlan/miniboost.ps.
QUINLAN, J.R. & CAMERON-JONES, R.M., 1995, "Oversearching and Layered Search in Empirical
Learning", In: Proc. of the IJCAI'95, 14th Int'l Joint Conf. on Artificial Intelligence, Montreal,
Quebec, Canada, pp. 1019-1024. http://www.cse.unsw.edu.au/~quinlan/q+cj.ijcai95.ps.
RATSABY, J., 1998, "Incremental Learning With Sample Queries", IEEE Trans. on Patttern Analysis
and Machine Intelligence, Vol. 20, No. 8, pp. 883-888. http://ieeexplore.ieee.org.
RIDGEWAY, G. & MADIGAN, D., 2002, "Bayesian Analysis of Massive Datasets via Particle Filters", In:
Proc. of the the KDD'02, 8th ACM SIGKDD Int'l Conf. on Knowledge Discovery and Data
Mining, Edmonton, Alberta, Canada, pp. 5-13. http://www.acm.org.
RISSANEN, J., 1998, "Hypothesis Selection and Testing by the MDL Principle", The Computer Journal,
Vol. 42, No. 4, pp. 260-269. http://www.cs.tut.fi/~rissanen/papers/hypo.ps.
RULEQUEST RESEARCH, 2000, See5 Induction System, Rulequest Research, Sydney, Australia.
http://www.rulequest.com.
SANTOS, R., NIEVOLA, J.C. & FREITAS, A.A., 2000, "Extracting Comprehensible Rules from Neural
Networks via Genetic Algorithms", In: Proc. of the ECNN'2000, IEEE Symp. on Combinations
of Evolutionary Computation and Neural Networks, San Antonio, Texas, USA, pp. 130-139.
http://www.ppgia.pucpr.br/~alex/pub_papers.dir/ECNN-2000.ps.
SARAWAGI, S., AGRAWAL, R. & GUPTA, A., 1996, On Computing the Data Cube, Research Report
10026, IBM Almaden Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/cube_rj.pdf.
73
SARAWAGI, S., AGRAWAL, R. & MEGIDDO, N., 1998, Discovery-Driven Exploration of OLAP Data
Cubes, IBM Research Report RJ 10102, IBM Almaden Research Center, San Jose, California,
USA. http://www.almaden.ibm.com/cs/quest/papers/edbt98_ex_rj.pdf.
SHAFER, J.C. & AGRAWAL, R., 1997, "Parallel Algorithms for High-dimensional Proximity Joins", In:
Proc. of the VLDB 1997, 23rd Int'l Conf. on Very Large Databases, Athens, Greece, pp. 176-
185. http://www.almaden.ibm.com/cs/quest/papers/vldb97_ekdb.pdf.
SHAFER, J.C., AGRAWAL, R. & MEHTA, M., 1996, "SPRINT: A Scalable Parallel Classifier for Data
Mining", In: Proc. of the VLDB 1996, 22th Int'l Conf. on Very Large Databases, Mumbai,
Bombay, India, pp. 544-555. http://www.almaden.ibm.com/cs/quest/papers/vldb96_sprint.pdf.
SHANMUGASUNDARAM, J., FAYYAD, U.M. & BRADLEY, P.S., 1998, Compressed Data Cubes for
OLAP Aggregate Query Approximation on Continuous Dimensions, Technical Report MSR-
TR-99-13, Microsoft Research, Microsoft Corporation, Redmond, Washington, USA.
ftp://ftp.research.microsoft.com/pub/tr/tr-99-13.pdf.
SHIM, K., SRIKANT, R. & AGRAWAL, R., 1997, High-dimensional Similarity Joins, IBM Research Report
RJ 10081, IBM Almaden Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/de97_ekdb_rj.pdf.
SRIKANT, R. & AGRAWAL, R., 19951, Mining Generalized Association Rules, IBM Research Report RJ
9963, IBM Almaden Research Center, San Jose, California, USA.
http://www.almaden.ibm.com/cs/quest/papers/vldb95_tax_rj.pdf.
SRIKANT, R. & AGRAWAL, R., 19952, Mining Sequential Patterns: Generalizations and Performance
Improvements, IBM Research Report RJ 9994, IBM Almaden Research Center, San Jose,
California, USA. http://www.almaden.ibm.com/cs/quest/papers/edbt96_rj.ps.gz.
SRIKANT, R. & AGRAWAL, R., 1996, "Mining Quantitative Association Rules in Large Relational
Tables", In: Proc. of the SIGMOD'96, ACM SIGMOD Int'l Conf. on Management of Data,
Montreal, Quebec, Canada, pp. 1-12.
http://www.almaden.ibm.com/cs/quest/papers/sigmod96.pdf.
SRIKANT, R., VU, Q. & AGRAWAL, R., 1997, "Mining Association Rules with Item Constraints", In: Proc.
of the KDD'97, 3rd Int'l Conf. on Knowledge Discovery and Data Mining, Newport Beach,
California, USA, pp. 67-73. http://www.almaden.ibm.com/cs/quest/papers/kdd97_const.pdf.
TANG, Z., 20022, Building Cluster Dimension using Microsoft® Cluster Algorithm, White paper,
Microsoft Research, Microsoft Corporation, Redmond, Washington, USA.
http://communities.msn.com/AnalysisServicesDataMining.
TING, K.M. & ZHENG, Z., 1998, "Boosting Trees for Cost-Sensitive Classifications", In: Proc. of the
ECML'98, 10th European Conf. on Machine Learning, Lecture Notes in Artificial Intelligence
1398, Chemnitz, Germany, Nedellec, C. & Rouveirol, C. (eds.), Springer-Verlag, pp. 190-195.
http://www.cs.waikato.ac.nz/~ml/publications/1998/Ting-Zheng.ps.
TORGO, L., 19931, "Controlled Redundancy in Incremental Rule Learning", In: Proc. of the ECML'93,
European Conf. on Machine Learning, Lecture Notes in Computer Science 667, Vienna,
Austria, Brazdil, P. B. (ed.), Springer-Verlag, pp. 185-195.
http://www.ncc.up.pt/~ltorgo/Papers/CRIRL.ps.gz.
74
TORGO, L., 19932, "Rule Combination in Inductive Learning", In: Proc. of the ECML'93, European
Conf. on Machine Learning, Lecture Notes in Computer Science 667, Vienna, Austria,
Brazdil, P. B. (ed.), Springer-Verlag, pp. 384-389.
http://www.ncc.up.pt/~ltorgo/Papers/RCIL.ps.gz.
TORGO, L., 19951, "Data Fitting with Rule-based Regression", AIT'95, 2nd Int'l Workshop on Artificial
Intelligence Techniques, Brno, Czech Republic.
http://www.ncc.up.pt/~ltorgo/Papers/DFRBR.ps.gz.
TORGO, L., 19952, "Applying Propositional Learning to Time Series Prediction", ECML 1995 Workshop
on Statistics, Machine Learning and Knowledge Discovery in Databases, Heraclion, Crete,
Greece. http://www.ncc.up.pt/~ltorgo/Papers/APLTSP.ps.gz.
TORGO, L., 19971, "Functional Models for Regression Tree Leaves", In: Proc. of the ICML'97, 14th Int'l
Conf. on Machine Learning, Nashville, Tennessee, USA.
http://www.ncc.up.pt/~ltorgo/Papers/FMRTL.ps.gz.
TORGO, L., 19972, "Search-based Class Discretization", In: Proc. of the ECML'97, European Conf. on
Machine Learning, Lecture Notes in Artificial Intelligence 1224, Prague, Czech Republic,
Someren, M.V. & Widmer, G. (eds.), Springer-Verlag, pp. 266-273.
http://www.ncc.up.pt/~ltorgo/Papers/SCD.ps.gz.
TORGO, L., 19973, "Kernel Regression Trees", In: Proc. of the ECML'97, European Conf. on Machine
Learning, Prague, Czech Republic, Poster Papers.
http://www.ncc.up.pt/~ltorgo/Papers/KRT.ps.gz.
TORGO, L., 19981, "Error Estimates for Pruning Regression Trees", In: Proc. of the ECML'98, 10th
European Conf. on Machine Learning, Lecture Notes in Artificial Intelligence 1398,
Chemnitz, Germany, Nedellec, C. & Rouveirol, C. (eds.), Springer-Verlag, pp. 125-130.
http://www.ncc.up.pt/~ltorgo/Papers/EEPRT.ps.gz.
TORGO, L., 19982, "A Comparative Study of Reliable Error Estimators for Pruning Regression Trees",
In: Progress in Artificial Intelligence (Proc. of the IBERAMIA'98, 6th Ibero-American Conf. on
Artificial Intelligence), Lecture Notes in Computer Science 1484, Lisbon, Portugal, Coelho,
H. (ed.), Springer-Verlag. http://www.ncc.up.pt/~ltorgo/Papers/CSREEPRT.ps.gz.
TORGO, L., 19991, Inductive Learning of Tree-based Regression Models, D.Sc. Thesis,
Departamento de Ciência de Computadores, Faculdade de Ciências da Universidade do
Porto, Porto, Portugal. http://www.ncc.up.pt/~ltorgo.
TORGO, L., 19992, "Predicting the Density of Algae Communities using Local Regression Trees", In:
Proc. of the EUFIT'99, European Congress on Intelligent Techniques and Soft Computing,
Invited Paper. http://www.ncc.up.pt/~ltorgo/Papers/PDACLRT.ps.gz.
TORGO, L., 20001, "Partial Linear Trees", In: Proc. of the ICML'2000, 17th Int'l Conf. on Machine
Learning, Stanford, California, USA, pp. 1007-1014.
http://www.ncc.up.pt/~ltorgo/Papers/PLT.ps.gz.
TORGO, L., 20002, "Efficient and Comprehensible Local Regression", In: Proc. of the PAKDD'2000,
4th Pacific-Asia Conf. on Knowledge Discovery and Data Mining, Lecture Notes in Artificial
Intelligence 1805, Terano et alii (eds.), Springer-Verlag, pp. 376-379.
http://www.ncc.up.pt/~ltorgo/Papers/ECLR.ps.gz.
75
TORGO, L., 20003, Efficient and Comprehensible Local Regression, Technical Report 99-2, LIACC,
University of Porto, Porto, Portugal. http://www.ncc.up.pt/~ltorgo/Papers/ECLR_int_rpt.ps.gz.
TORGO, L. & COSTA, J.P., 2000, "Clustered Partial Linear Regression", In: Proc. of the ECML'2000,
11th European Conf. on Machine Learning, Lecture Notes in Artificial Intelligence 1810,
Barcelona, Catalonia, Spain, Mantaras, L. R. & Plaza, E. (eds.), Springer-Verlag, pp. 426-436.
http://www.ncc.up.pt/~ltorgo/Papers/cplr_msl2000.ps.gz.
TORGO, L. & GAMA, J., 1996, "Regression by Classification", In: Proc. of the SBIA'96, Brasilian
Artificial Intelligence Symposium, Lecture Notes in Artificial Intelligence 1159, Curitiba, PR,
Brazil, Borges, D. & Kaestner, C. (eds.), Springer-Verlag, pp. 51-60.
http://www.ncc.up.pt/~ltorgo/Papers/RBC.ps.gz.
TORGO, L. & KUBAT, M., 1991, "Knowledge Integration and Forgetting", In: Proc. of the
Checoslovak Artificial Intelligence Conf., Prague, Czech Republic.
http://www.ncc.up.pt/~ltorgo/Papers/KIF.ps.gz.
TRIGG, L., 1998, An Entropy Gain Measure of Numeric Prediction Performance, Working Paper
98/11, Department of Computer Science, University of Waikato, Hamilton, New Zealand.
http://www.cs.waikato.ac.nz/~ml/publications/1998/Trigg-Entropy.pdf.
UTGOFF, P.E., 1995, Decision Tree Induction Based on Efficient Tree Restructuring, Technical Report
95-18, University of Massachusetts, Department of Computer Science, Amherst,
Massachusetts, USA. ftp://ftp.cs.umass.edu/pub/techrept/techreport/1995/UM-CS-1995-018.ps.
UTGOFF, P.E. & BRODLEY, C.E., 1991, Linear Machine Decision Trees, Technical Report 91-010,
University of Massachusetts, Department of Computer Science, Amherst, Massachusetts,
USA. ftp://ftp.cs.umass.edu/pub/techrept/techreport/1991/UM-CS-1991-010.ps.
UTGOFF, P.E. & CLOUSE, J.A., 1996, A Kolmogorov-Smirnoff Metric for Decision Tree Induction,
Technical Report 96-03, University of Massachusetts, Department of Computer Science,
Amherst, Massachusetts, USA. ftp://ftp.cs.umass.edu/pub/techrept/techreport/1996/UM-CS-1996-
003.ps.
VITANYI, P. & LI, M., 2000, "Minimum Description Length Induction, Bayesianism, and Kolmogorov
Complexity", IEEE Transactions on Informational Theory, Vol. 46, No. 2, pp. 446-464.
http://www.cwi.nl/~paulv/papers/mdlindbayeskolmcompl.pdf.
WANG, Y. & WITTEN, I.H., 1997, "Inducing Model Trees for Predicting Continuous Classes", In: Proc.
of the ECML'97, European Conf. on Machine Learning, Prague, Czech Republic, Poster
Papers, pp. 128-137. http://www.cs.waikato.ac.nz/~ml/publications/1997/Wang-Witten-Induct.pdf.
WIETEK, F., 1999, "Modelling Multidimensional Data in a Dataflow-Based Visual Data Analysis
Environment", In: Proc. of the CAiSE*99, 11th Conf. on Advanced Information Systems
Engineering, Heidelberg, Germany, pp. 149-163. http://www-is.informatik.uni-
oldenburg.de/~wietek/paper/CAiSE99.ps.gz.
WILBUR, W., 2000, "Boosting Naive Bayesian Learning on a Large Subset of MEDLINE", In:
Converging Information, Technology, and Health Care (Proc. of the American Medical
Informatics Association 2000 Symposium), Los Angeles, California, USA, Overhage, J.M.
(ed.), AMIA Press. http://citeseer.nj.nec.com/516083.html.
76
WONG, J.S.K., NAYAR R. & MIKLER, A.R., 1998, "A Framework for a World Wide Web-Based Data
Mining System", Journal of Network and Computer Applications, Vol. 21, No. 3, pp. 163-185.
http://www.sciencedirect.com.
YE, N. & LI, X., 2002, "A Scalable, Incremental Learning Algorithm for Classification Problems",
Computers & Industrial Engineering, Vol. 43, No. 4, pp. 677-692. http://www.elsevier.com.
77
Apêndice A. Classificador Bayesiano Simples
78
P(Y|cj) probabilidade de ocorrência de um caso Y de classe cj
P(cj) probabilidade de ocorrência de uma classe cj
P(Y) probabilidade de ocorrência de um caso Y
Como a probabilidade de ocorrência de um caso é uma constante igual para
todas as classes, somente o numerador do lado direito da fórmula acima precisa ser
calculado. As probabilidades (a priori) de ocorrência das classes podem ser
calculadas através da fórmula seguinte:
sj
P(c j ) = (A-4)
v
onde:
rjih
P( yi | c j ) = (A-6)
sj
onde:
onde:
79
g( yi, µ ji,σ ji ) função de distribuição normal de Gauss para o atributo ai
r1
ji
z ji ∑ xkij
k =1
µ ji = 1 = (A-8)
rji r1ji
onde:
treinamento de classe cj
r1
( )
ji 2
∑ xkij − µ ji
σ ji = k =1 (A-9)
r1ji −1
onde:
treinamento de classe cj
80
r1
2
k z ji z ji
ji
k2
∑ x ij − 2xij 1 + 1
k =1 s ji rji
σ ji = (A-10)
r1ji −1
r1 r1 2 r1
ji
k2 z ji ji k z ji ji
∑ x ij −2 1 ∑ x ij + 1 ∑ 1
k =1 rji k =1 rji k =1
σ ji = (A-11)
r1ji −1
r1ji
q ji = ∑ xk2
ij
(A-12)
k =1
A substituição de valores conhecidos e uma nova simplificação levam a fórmula
seguinte:
z ji2 z ji2 1
q ji −2 + rji
r1ji r12
ji
σ ji = (A-13)
r1ji −1
z ji2
q ji −
r1ji
σ ji = (A-14)
r1ji −1
onde:
treinamento de classe cj
81
Apêndice B. Tecnologia OLE DB
Consumidores de dados
Aplicativos
Provedores OLE DB
Proc. de Consultas
Armazenadores de dados
82
A arquitetura OLE DB é composta por três componentes: consumidores de
dados, provedores de serviços e provedores de dados.
Os consumidores de dados são aplicativos ou sistemas, podendo ser inclusive
provedores OLE DB.
Os provedores de dados possuem os dados e expõem os mesmos através de
objetos para o mundo exterior. Cada provedor de dados possui características
próprias de implementação para manipular os diferentes tipos de dados, porém todos
os provedores expõem seus dados em uma única forma tabular através de tabelas
virtuais.
Os provedores de serviços são componentes lógicos que encapsulam
funcionalidades de SGBDs. Alguns exemplos que podem ser citados são:
processadores de consultas, processadores de cursor e gerenciadores de transações.
Os sete componentes básicos do modelo de objetos de um provedor OLE DB são
descritos na Tabela B.1.
Componente Descrição
Data Source Objetos de fontes de dados contêm os recursos e propriedades para conexões
com as fontes de dados, tais como um arquivo simples ou um SGBD. Eles são
geradores de sessões.
Command Comandos executam um comando tipo texto, tal como um comando SQL. Se
o comando texto especifica uma tabela virtual, tal como um comando SQL
SELECT, o comando é um gerador da tabela virtual. Uma simples sessão pode
criar múltiplos comandos.
Error Objetos de Erros podem ser criados por qualquer interface ou por qualquer
objeto OLE DB. Eles contêm informação adicional sobre um erro, incluindo um
objeto de erro customizado.
83
Apêndice C. Detalhes da Implementação
84
7. Instalar o kit de desenvolvimento Microsoft® Platform SDK February 2001 Edition
(http://www.microsoft.com/msdownload/platformsdk/sdkupdate) com os
seguintes componentes:
85
devem ser feitas para que o provedor de recursos de DM possa funcionar tanto de
forma isolada, utilizado diretamente por um aplicativo, como de forma agregada,
utilizado em conjunto com o MSSQL. Estas modificações são descritas no decorrer
deste apêndice.
A área de trabalho de desenvolvimento do provedor de recursos de DM é
composta por quatorze projetos, sendo que dois deles são formados apenas por
arquivos de inclusão.
86
5. Copiar todos os arquivos da pasta E: \ Program Files \ Sandstone \ Visual
Parse++ 4.0 \ Source \ C++ para a pasta SampleProvider \ VP64.
6. Construir DMSProv.dll. Durante este processo várias mensagens de erro do
compilador aparecerão. Elas são mostradas a seguir, não necessariamente na
mesma ordem em que aparecem, acompanhadas das instruções para a sua
correção. Após todos os erros terem sido corrigidos, o processo de construção
deve ser invocado novamente.
6.1. ...dmbslib.obj : warning LNK4006: "public: __thiscall SPGlobal::SPGlobal(void)"
(??0SPGlobal@@QAE@XZ) already defined in dmbsglob.obj; second definition
ignored.
87
6.11. ...Putl\pnvalio.cpp: warning C4102: 'abort' : unreferenced label e outras
mensagens de alerta sobre variáveis locais não referenciadas no arquivo
Putl\pnvalio.cpp.
ü Abrir este arquivo e colocar comentários nestas linhas.
6.12. ...DMProv\dmglobals.cpp: warning C4102: 'DmErrorHandlerLabel' :
unreferenced label.
88
Tabela C.1. Prefixos de alguns tipos de variáveis
contador genérico c
string sz
variant v
índice genérico i
double dbl
LONG l,i,c
UINT ui
ULONG ul
DWORD dw
Bool f, b
LSTR lp
LPTSTR psz
89
#ifndef __cplusplus
#error dmstandalone.hpp requires C++ compilation
#endif
SP_NO_INTERFACES(IDMASecurityNotifyDummy, IDMASecurityNotify);
90
if (!m_spSecurityNotify) return E_FAIL;
return m_spSecurityNotify.CopyTo(out_ppSecurityNotify);
}
else
{
if (!IsSecurityNotifyDummyInstantiated)
{
SPObject<IDMASecurityNotifyDummy>::CreateInstance((IDMASecurityNo
tifyDummy **)&m_spSecurityNotify);
if (!m_spSecurityNotify) return E_FAIL;
IsSecurityNotifyDummyInstantiated = true;
}
return m_spSecurityNotify.CopyTo(out_ppSecurityNotify);
}
}
91
6. Abrir o arquivo DMclcMine.dsw (de controle de projetos) com o Microsoft®
Developer Studio.
7. Modificar as pastas de Output de todos os projetos para os arquivos
intermediários e de saída conforme for conveniente.
8. Utilizar a opção Link / General do projeto DMProv:
ü Em Output file name, substituir Debug/DMSProv.dll por Debug/DMclcMine.dll.
ü Em Object/library modules, substituir a pasta de DMQM.lib conforme
modificações do passo 7.
9. Utilizar a opção Browse Info do projeto DMProv e substituir a pasta de
DMProv.bsc, conforme modificações do passo 7, em Browse info file name.
10. Abrir o arquivo DMProv/DMSProv.def e substituir DMSProv.dll por DMclcMine.dll.
11. Utilizar a opção MIDL Settings do arquivo DMProv/DMSProv.idl e substituir Output
filename por “.\ DMclcMine.tlb”.
12. Abrir o arquivo DMProv/DMSProv.rc para edição de texto e substituir:
ü DMSProv por DMclcMine.
ü Sample OLE DB DM Provider por clcMine OLE DB DM Provider.
ü Sample DM Algorithm por MS Naive Bayes.
ü Sample_DM_Algorithm por MS_Naive_Bayes.
13. Abrir os arquivos DMProv/DMSProv.idl, DMProv/DMSProv.rgs e
DMProv/DMErrorLookup.rgs (o arquivo DMSProv.h será modificado pelo
compilador MIDL) e substituir:
ü DMSProv por DMclcMine.
ü Sample por clcMine.
14. Abrir o arquivo DMProv/SchemaRowsets.h e substituir Sample_DM_Algorithm por
MS_Naive_Bayes.
15. Abrir o arquivo DMProv/dmerrorlookup.hpp e substituir
CLSID_DMSProvErrorLookup por CLSID_DMclcMineErrorLookup.
16. Abrir o arquivo DMProv/dmerrorlookup.inl e substituir CLSID_DMSProvErrorLookup
por CLSID_DMclcMineErrorLookup.
17. Abrir o arquivo DMProv/DMSProv.cpp e substituir:
ü CLSID_DMSProv por CLSID_DMclcMine.
ü CLSID_DMSProvErrorLookup por CLSID_DMclcMineErrorLookup.
ü LIBID_DMSProvLib por LIBID_DMclcMineLib.
18. Abrir o arquivo DMProv/DMErrors.cpp e substituir CLSID_DMSProv por
CLSID_DMclcMine.
19. Abrir o arquivo DMProv/DataSrc.hpp e substituir CLSID_DMSProv por CLSID_
20. DMclcMine.
Abrir o arquivo DMProv/dmglobals.cpp e substituir TEXT("DMSProv") por
TEXT("DMclcMine").
21. Abrir o arquivo dmparser.ypw (de controle de projetos) com o Visual Parse. Abrir
o arquivo dmparser.ycc (de definição da gramática da linguagem SQL DM) e
substituir o símbolo T_SampleAlgorithm por MS_Naive_Bayes (o nome do algoritmo
não pode conter espaços em branco).
92
22. O provedor exemplo foi projetado para funcionar somente no modo agregado.
Os passos descritos no item C.3 devem ser executados para que o provedor
funcione também no modo isolado. Se estas modificações extras tiverem sido
feitas, o provedor poderá ser utilizado diretamente através de objetos de dados
ActiveX® (ADO) fornecendo o nome “DMclcMine” como o nome do provedor na
seqüências de caracteres utilizada para conexão com provedor OLE DB.
23. Reconstruir todos os projetos.
1. Abrir o arquivo dmparser.ypw (de controle de projetos) com o Visual Parse. Abrir
o arquivo dmparser.ycc (de definição da gramática da linguagem SQL DM):
ü Substituir o símbolo T_SampleAlgorithm por '
[Mm][Ss]_[Nn][Aa][Ii][Vv][Ee]_[Bb][Aa][Yy][Ee][Ss]' ("MS_Naive_Bayes"). O
símbolo não pode conter espaços em branco.
ü Substituir T_SampleAlgorithm por T_MSNaiveBayes.
ü Substituir PSampleAlg por PMSNaiveBayesAlg.
ü Executar Debug/Compile.
ü Executar Debug/Generate Files. O Visual Parse emitirá uma mensagem: Auto-
merge failed, your original file is in .\dmreduce.bak00x... O arquivo
dmreduce.cpp deve ser removido pois foi corrompido. O arquivo
dmreduce.bak00x deve ser renomeado para dmreduce.cpp.
2. Abrir o arquivo DMParse/dmreduce.cpp e substituir SP_PSampleAlg por
SP_PMSNaiveBayesAlg.
3. Abrir os arquivos DMProv/SchemaRowsets.h e DMProv/SchemaRowsets.cpp e
substituir:
ü SERVICE_GUID_Sample_Algorithm por SERVICE_GUID_MS_Naive_Bayes.
ü SERVICE_NAME_SAMPLE_ALGORITHM por SERVICE_NAME_MS_NAIVE_BAYES.
4. Abrir o arquivo DMProv/SchemaRowsets.h e substituir o valor da constante
SERVICE_NAME_MS_NAIVE_BAYES pelo texto “MS_Naive_Bayes” (deve ser
exatamente o mesmo texto que a definição do símbolo T_MSNaiveBayes). Este
dado é utilizado pelos editores Relacional e OLAP de Modelos de DM do
Gerenciador de Serviços de Análise para construir as consultas SQL DM.
5. Abrir os arquivos DMProv/DMSProv.rc, DMProv/SchemaRowsets.cpp e
DMBase/dmresource.h e substituir:
ü IDS_SERVICE_SAMPLE_ALGORITHM_DESCRIPTION por
IDS_SERVICE_MS_NAIVE_BAYES_DESCRIPTION.
ü IDS_SERVICE_SAMPLE_ALGORITHM_DISPLAY_NAME por
IDS_SERVICE_MS_NAIVE_BAYES_DISPLAY_NAME.
6. Abrir o arquivo DMProv/DMSProv.rc e substituir os valores das seqüências de
caracteres IDS_SERVICE_MS_NAIVE_BAYES_DISPLAY_NAME e
IDS_SERVICE_MS_NAIVE_BAYES_DESCRIPTION. Estas seqüências são utilizadas na
lista de algoritmos das propriedades básicas dos editores Relacional e OLAP de
Modelos de DM do Gerenciador de Serviços de Análise. Os valores das
seqüências podem ser diferentes daqueles definidos para os símbolos.
7. Abrir os arquivos DMCore/dmmodel.h, DMCore/dmmodel.cpp,
DMParse/dmreduce.cpp, DMProv/dmxbind.cpp e DMProv/dmxmlpersist.cpp e
93
substituir DM_ALGORITHMIC_METHOD_SAMPLE_ALGORITHM por
DM_ALGORITHMIC_METHOD_MS_NAIVE_BAYES.
arquivo contém uma mensagem alertando para que o arquivo deve ser mantido
limpo, ou seja sem a existência de muito código adicional e sem a existência de
comandos tipo switch. Estes requisitos são exigidos para que o Visual Parse possa
mesclar sem erros, os comandos que forem necessários, para refletir futuras alterações
no arquivo de definição da gramática da linguagem SQL DM. Desta forma sempre
que possível chamadas de funções devem ser incluídas ao invés de linhas de código
O arquivo dmreduce.cpp original não é limpo. Desta maneira qualquer
diretas.
modificação que for realizada no arquivo dmparser.ycc, seguida de uma execução
1. Abrir o arquivo dmparser.ypw (de controle de projetos) com o Visual Parse. Abrir
o arquivo dmparser.ycc (de definição da gramática da linguagem SQL DM):
ü Inserir o símbolo T_SNaiveBayes:
'[Ss][Ii][Mm][Pp][Ll][Ee]_[Nn][Aa][Ii][Vv][Ee]_[Bb][Aa][Yy][Ee][Ss]'
("Simple_Naive_Bayes") depois do símbolo T_MSNaiveBayes. Este símbolo não
pode conter espaços em branco.
ü Inserir a definição PSNaiveBayesAlg depois de PMSNaiveBayesAlg:
dmm_algorithm -> T_SNaiveBayes;
ü Executar Debug/Compile.
ü Executar Debug/Generate Files.
2. Abrir o arquivo DMParse/dmreduce.cpp e mover a linha de comando:
case SP_PMSNaiveBayesAlg:
94
para o mesmo lugar que a linha de comando:
case SP_PMSNaiveBayesAlg:
95
#include "SNaiveBayes.hpp"
Para inserir suporte para uma nova propriedade, por exemplo name =
96
1. Abrir o arquivo DMBase/dmerrors_rc.h e inserir a definição do identificador de
recurso do erro, observando a simbologia para cada tipo de erro. Para erros
referentes ao modelo de DM, o identificador será IDS_SPE_DMM_<codigo erro>
(IDS_SPE_DMM_ALG_CANT_PREDICT_CONTINUOUS_ATTRIBUTE).
2. Abrir o arquivo DMProv/dmerrors.rc e inserir a definição da seqüência de
caracteres correspondente a mensagem de erro na tabela correspondente
("This algorithm can't predict continuous attribute").
3. Abrir o arquivo DMBase/dmerrors.h e inserir a definição do código de retorno do
erro de acordo com a sintaxe correspondente ao tipo de erro. Para erros
referentes ao modelo de DM, esta sintaxe será: SPE_DMM_<codigo erro>. Para o
exemplo a seguinte linha de comando deverá ser inserida:
DM_DEFINE_ERROR_HRESULT(SPE_DMM_ALG_CANT_PREDICT_CONTINUOUS_ATTRIBUTE)
97
C.13 Corrigindo Erros de Programação
Para construir a versão para correção de erros, simplesmente deve ser utilizada a
esta configuração.
Na opção C/C++ / Preprocessor / Preprocessor definitions de todos os projetos,
correção
Parade erros das
corrigir bibliotecas
erros C são utilizadas.
de programação, o provedor de recursos de DM pode ser
executado para funcionar agregado ao módulo de Serviços de Análise ou para atuar
como um servidor isolado.
Para executar o provedor de recursos de DM agregado com o módulo de
Serviços de Análise, o servidor MSOLAP deve ser definido como o programa
para argumento do programa. O servidor MSOLAP deve ser parado antes de iniciar a
correção de erros. Deve ser observado que a DLL do provedor de recursos de DM não
será carregada até que a funcionalidade do provedor seja requisitada ou a não ser
que o programa de correção de erros seja configurado para carregar os símbolos da
DLL inicialmente.
Para executar o provedor de recursos de DM com um projeto Visual Basic tal
como o DMSamp (KIM & CARROLL, 2002), o Visual Basic deve ser definido como o
Source=f:\datamining\data\allelet;Provider=DMclcMine" /F
98
C.13.1 Executando
• DllMain (DMProv/DMSProv.cpp)
• DllGetClassObject (DMProv/DMSProv.cpp)
• SPDataSource::Initialize (DMProv/DataSrc.cpp)
• SPModel::Load (DMProv/dmxmlpersist.cpp) chamada pela linha de comando:
SP_CHECK_ERROR(pDataManager->Init(pQC)); (DMProv/DataSrc.cpp).
Esta última função recupera os dados dos modelos de DM existentes lendo os
• SPModel::LoadColumn (DMProv/dmxmlpersist.cpp)
• SPQueryManager::DoTrainAttributes (DMQM/DMQueryManager.cpp).
Quando um determinado modelo de DM é selecionado e o processo de
treinamento é ativado, então as seguintes funções são processadas:
• SPQueryManager::DoCreate (DMQM/DMQueryManager.cpp)
• SPDataManager::CreateModel (DMParse/dmtools.cpp)
• SPQueryManager::DoTrainModel (DMQM/DMQueryManager.cpp)
Esta última função por sua vez chama a função de treinamento específica de
cada algoritmo de DM.
99
Nesta pasta são criados os arquivos de log de cada provedor de recursos de
pasta ainda existem os arquivos que contem os metadados dos bancos de dados,
com os nomes <nome do banco de dados>.odb, bem como pastas para cada banco
de dados criadodo
Na pasta pelo módulo
banco de Serviços
de dados, parade Análise.
cada fonte de dados existe um arquivo de
acesso existe um arquivo de nome <nome da regra>.role. Ainda nesta pasta estão
modelo>.dmm.xml, gerados pelo provedor DMclcMine, mas que não têm utilidade
nenhuma pois os arquivos dos modelos deste provedor são armazenados em outro
local. Pastas para cada modelo de DM também são criadas nesta pasta, com o nome
<nome do modelo>. Além disso o provedor DMclcMine cria uma pasta de nome
Nas pastas de cada modelo são armazenados os arquivos de regras de acesso
DMA.DMclcMine. Provedores criados a partir do provedor exemplo criam esta pasta
ao modelo de nome <nome da regra>.dmmsec.
com o nome DMA.<nome da DLL>.
Na pasta DMA.DMclcMine são criados os arquivos de nome <nome do
sessões
Emdesessões
correção
de de erros também
correção são
de erros ouarmazenados nesta pasta.
mesmo em sessões normais interrompidas,
alguns destes arquivos podem ficar eventualmente corrompidos. Assim muitas vezes é
necessário removê-los manualmente para possibilitar o uso do módulo de Serviços de
removidos. Obviamente que os arquivos *.log e *.txt podem ser removidos a qualquer
instante.
Quando o provedor de recursos de DM for utilizado no modo isolado, os arquivos
de dados dos modelos de DM, os arquivos de log e os arquivos gerados pelas sessões
de correção de erros são criados na pasta definida como padrão.
100
Nesta configuração a macro DEBUG, bem como as macros _DEBUG, ID_DEBUG e
A Tabela C.2 lista todos os arquivos que foram modificados a partir do código
fonte do kit de recursos OLE DB DM para implementação do provedor DMclcMine.
dmerrors_rc.h
dmresource.h Implementar novos algoritmos de DM e suportar
uma nova propriedade.
dmmodel.h
DMInclude.dsp Criado para facilitar a visualização de arquivos
de inclusão.
DMInclude
ATLDBDM.H Incluir suporte para uma nova propriedade de nó.
ModelUtils.hpp,
DMM.idl Incluir novas mensagens de erros e incluir suporte
ModelUtils.inl
101
Projeto Arquivos Motivo
para uma nova propriedade de nó.
SNaiveBayes.hpp*
DMParse.dsp Modificar as pastas de Output e incluir a
definição VP40.
dmhinode.hpp Corrigir erro de programação.
102
Projeto Arquivos Motivo
dmredRelated.cpp,
dmredRename.cpp,
dmredSelect.cpp,
dmredSelectExprCol.cpp,
dmredSelectExprList.cpp
, dmredShape.cpp,
dmredSingle.cpp,
dmredSubSelect.cpp,
dmredType.cpp,
dmredValue.cpp,
dmredWhere.cpp
DMErrorLookup.hpp,
DMErrorLookup.inl,
DMErrorLookup.rgs,
DMSProv.cpp,
DMSProv.rc,
DMSProv.rgs,
dmxbind.cpp, Implementar suporte para uma nova
DataSrc.hpp,
dmxmlpersist.cpp, propriedade.
DMSProv.rc, Properties.h
SchemaRowsets.cpp, Incluir novas mensagens de erros e corrigir
DMErrors.cpp
DMProv SchemaRowsets.h problemas com a postagem de erros.
DMSProv.def,
dmstandalone.hpp, Possibilitar que o provedor possa ser utilizado em
DMSProv.idl
ambos os modos: agregado e isolado.
Session.cpp,
Session.hpp, Session.inl,
SchemaRows.hpp, Incluir suporte para uma nova propriedade de nó.
StdAfx.h
SchemaRowsets.cpp
version.rc, resource.h Incluir dados da versão do provedor de recursos
de DM.
103
Projeto Arquivos Motivo
de erros de programação. Implementar recurso
incremental para o modelo marginal e para o
classificador SNBi.
PersistXML.idl
Putl.dsp Modificar as pastas de Output.
C.16 Listagens
#ifndef __dmmstatistics_h__
#define __dmmstatistics_h__
class CStateStats
// Description:
// statistics of attribute states computed over all training cases
// will be exist one for each state of each attribute
// the states are numbered starting from 1 (one).
// state 0 is the missing state
// the attributes are numbered starting from 0 (zero)
// DISCRETE:
// one state (0) for missing attribute
// one state (starting from 1) for each distinct value of an attribute
// CONTINUOUS:
// one state (0) for missing attributes
// one state for non-missing attributes
/////////////////////////////////////////////////////////////////////////////
104
{
public:
DOUBLE m_dblSum; // sum of values of CONTINUOUS attributes
// mean = m_vdblSum / m_lCont (count of attributes)
// not used for DISCRETE attributes
DOUBLE m_dblSqrSum; // sum of squares of values of CONTINUOUS attributes
// S2 = m_lCount * mean * mean + m_dblSqrSum - 2 * mean *
m_dblSum
// S2 = m_dblSqrSum - m_dblSum * m_dblSum / m_lCount
// standard deviation = sqrt (S2 / (m_lCount - 1))
// not used for DISCRETE attributes
DOUBLE m_dblMean; // mean of values of CONTINUOUS attributes
DOUBLE m_dblStd; // standard deviation of values of CONTINUOUS attributes
LONG m_lCount; // count of CONTINUOUS and DISCRETE attributes
public:
CStateStats()
{
m_dblSum = 0.;
m_dblSqrSum = 0.;
m_lCount = 0;
}
if (S2 <= 0)
return (0);
class CAttStats
{
public:
DOUBLE dblMin; // the minimum value of one attribute
DOUBLE dblMax; // the maximum value of one attribute
VSTATESTATS vstatestats; // vector of statistics of all states of one attribute
// the first position (0) will be used to store missing
attribute statistics
// number of elements:
// DISCRETE: number of states + 1 (missing + number of
states)
// CONTINUOUS: 2 (missing + non-missing)
public:
CAttStats()
{
dblMin = DBL_MAX;
dblMax = -DBL_MAX;
}
};
#endif
105
Listagem C.2. Arquivo SNaiveBayes.cpp
//-----------------------------------------------------------------------------
//
// @module SNaiveBayes.cpp | Implementation of Simple Naive Bayes DMM.
//
// Description
//
// DMM_SNaiveBayes implements support for Simple Naive Bayes inference.
//
//
// Created by Claudio Luiz Curotto - apr/2002
// to implement the Simple Naive Bayes incremental algorithm
//
//-----------------------------------------------------------------------------
#pragma once
#include "dmmlib.h"
#include <stack>
#include "wchar.h"
#include "DMM.h"
#include "CaseCache.inl"
#include "DataMiningModel.inl"
#include "ModelUtils.inl"
#include "SNaiveBayes.hpp"
#include "DMXMLUtil.hpp"
SPM_SNaiveBayesNav()
{
m_pdmmSNaiveBayes = NULL;
m_ulNodeID = NODEID_NAVTOP;
}
~SPM_SNaiveBayesNav()
{
if (m_pdmmSNaiveBayes)
m_pdmmSNaiveBayes->Release();
}
/////////////////////////////////////////////////////////////////////////////
STDMETHOD(GetNodeID)
(ULONG* pulNodeID)
// Description:
// Return the current nodeID.
{
try
{
*pulNodeID = m_ulNodeID;
}
catch(...)
{
106
return (E_POINTER);
}
return (S_OK);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHOD(GetParentCount)
(ULONG* pcParent)
// Description:
// Return the count of parents of the current nodeID.
{
try
{
*pcParent = m_pdmmSNaiveBayes->m_vNode[m_ulNodeID].IsNavTop() ? 0 : 1;
}
catch(...)
{
return (E_POINTER);
}
return (S_OK);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHOD(MoveToParent)
(ULONG iParent)
// Description:
// iParent is ignored since a node must have only one parent (or zero if TOP)
{
try
{
ULONG ulNodeID = m_pdmmSNaiveBayes->m_vNode[m_ulNodeID].m_ulParent;
if (ulNodeID == DMM_UNSPECIFIED)
return (E_FAIL);
else
m_ulNodeID = ulNodeID;
}
catch(...)
{
return (E_FAIL);
}
return (S_OK);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHOD(GetChildCount)
(ULONG* pcChild)
{
try
{
*pcChild = m_pdmmSNaiveBayes->m_vNode[m_ulNodeID].m_cChild;
}
catch(...)
{
return (E_POINTER);
}
return (S_OK);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHOD(MoveToChild)
(ULONG iChild)
{
// the parent stores only the first child
NODEID ulNextID = m_pdmmSNaiveBayes->m_vNode[m_ulNodeID].m_ulChild;
LONG cChild = m_pdmmSNaiveBayes->m_vNode[m_ulNodeID].m_cChild;
107
if (iChild == 0)
{
m_ulNodeID = ulNextID;
return (S_OK);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHOD(MoveToNextLeaf)
(ULONG iScope)
{
SNBiNodeData& nodeData = m_pdmmSNaiveBayes->m_vNode[m_ulNodeID];
if (nodeData.IsNavTop())
{
m_ulNodeID = NODEID_NAVTOP;
return (S_OK);
}
if (ulNextNodeID == DMM_UNSPECIFIED)
return (S_FALSE);
m_ulNodeID = ulNextNodeID;
return (S_OK);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHOD(GetParentNodeID)
(ULONG iParent,
ULONG* pulNodeID)
{
try
{
ULONG ulNodeID = m_pdmmSNaiveBayes->m_vNode[m_ulNodeID].m_ulParent;
if (ulNodeID == DMM_UNSPECIFIED)
return (E_FAIL);
else
*pulNodeID = ulNodeID;
}
catch (...)
{
return (E_POINTER);
}
return (S_OK);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHOD(GetChildNodeID)
(ULONG iChild,
108
ULONG* pulNodeID)
{
try
{
SNBiNodeData& nodeData = m_pdmmSNaiveBayes->m_vNode[m_ulNodeID];
NODEID ulNextID = nodeData.m_ulChild;
private:
CComPtr<IAttributeSet> m_spias;
DMM_SNaiveBayes* m_pdmmSNaiveBayes;
NODEID m_ulNodeID;
};
/////////////////////////////////////////////////////////////////////////////
void DMM_SNaiveBayes::GetModelTreeName
(ULONG in_ulNodeID,
_bstr_t& out_bstrCaption)
// Description:
// Returns model tree name associated with this node.
{
if (m_vNode[in_ulNodeID].IsNavTop())
out_bstrCaption = _T("");
else
{
IATT iPredAtt = GetiPredAttNodeID (in_ulNodeID);
CComBSTR bstrName;
COMCALL(m_spias->GetAttributeDisplayName(iPredAtt, false, &bstrName));
out_bstrCaption = (BSTR)bstrName;
return;
}
}
/////////////////////////////////////////////////////////////////////////////
void DMM_SNaiveBayes::GetCaption
(ULONG in_ulNodeID,
_bstr_t& out_bstrCaption)
// Description:
// Returns caption associated with this node.
{
SNBiNodeData& nodeData = m_vNode[in_ulNodeID];
if (nodeData.IsNavTop())
{
// BEGIN_LOCALIZATION
out_bstrCaption = _T("Model Trees");
// END_LOCALIZATION
return;
109
}
if (nodeData.IsTreeNode())
{
CComBSTR bstrName;
COMCALL(m_spias->GetAttributeDisplayName(iAtt, false, &bstrName));
out_bstrCaption = (BSTR)bstrName;
return;
}
if (nodeData.IsAttNode())
{
CComBSTR bstrName;
COMCALL(m_spias->GetAttributeDisplayName(iAtt, false, &bstrName));
out_bstrCaption = (BSTR)bstrName;
return;
}
if (nodeData.IsValNode())
{
LONG lVal = nodeData.m_lVal;
if (lVal == 0)
{
out_bstrCaption = (BSTR)bstrName;
out_bstrCaption += m_cst.m_szIs;
out_bstrCaption += m_est.szMissing;
}
else if (FIsBinary (iAttdmmaf) && (lVal == 1))
{
out_bstrCaption = (BSTR)bstrName;
out_bstrCaption += m_cst.m_szBlank;
out_bstrCaption += m_cst.m_szExists;
}
else if (FIsDiscrete (iAttdmmaf) && !FIsBinary (iAttdmmaf))
{
// Convert discrete value to string.
_variant_t varValue = lVal;
COMCALL(m_spias->GetAttributeValue(iAtt, &varValue));
CComBSTR bstrVal;
COMCALL(DMVariantToString(varValue,LOCALE_USER_DEFAULT, &bstrVal));
ATLASSERT(bstrVal!=NULL);
DOUBLE dblMean;
GetContinuousInfo (m_spidmmMarginal, iAtt, &dblMean, 0, 0, 0, 0, 0, 0);
_variant_t varMean = dblMean;
CComBSTR bstrMean;
COMCALL(DMVariantToString (varMean, LOCALE_USER_DEFAULT, &bstrMean));
110
out_bstrCaption += _T("\nmean = ");
out_bstrCaption += (BSTR)bstrMean;
}
else
{
ATLASSERT(!"Cannot be!");
out_bstrCaption = (BSTR)bstrName;
out_bstrCaption += _T(" Cannot be!");
}
}
}
/////////////////////////////////////////////////////////////////////////////
void DMM_SNaiveBayes::CalcNodeSummary (
ULONG in_ulNodeID,
LONG in_cMaxCharAttrs, // in_cMaxCharAttrs specifies the maximum
number to return
priority_queue<SNBiSummaryScore>& out_pq) // out_pq receives a sorted list of
characteristic attributes.
// Description:
// Returns the attribute/value pairs which are deemed most characteristic
// of the specified node.
//
// Notes
// 1) Currently, this also returns the attribute/value pairs which exhibit
// the largest gains over marginal. Gain over marginal ranges from zero
// to positive infinity. Gains close to 1 indicate very little change
// from marginal. Gains less than 1 indicate in_iatt,in_iVal is less
// likely to occur given a particular attribute/value pair. Gains greater
// than 1 indicate that in_iatt,in_iVal is more likely to occur given a
// particular attribute/value pair. This algorithm currently only returns
// attribute/value pairs which have Gains greater than 1. It should
// probably show gains less than 1 also.
//
//
/////////////////////////////////////////////////////////////////////////////
{
if (lVal == INT_VALUE_MISSING)
lVal = 0;
ULONG ulNodeIDVal =
Tree.m_TreeNodeID.m_vAttNodeID[iiInpAtt].m_vValNodeID[lVal].m_ulNodeID;
DMMATTFLAGS iAttdmmaf;
COMCALL(m_spias->GetAttributeFlags(iInpAtt, &iAttdmmaf));
ULONG iiContAtt;
// continuous and discrete binary attributes are compute as discrete with two
states: missing and non-missing
BOOL bContAtt = FIsContinuous (iAttdmmaf) && !FIsBinary (iAttdmmaf) && (lVal == 1);
if (bContAtt)
iiContAtt = Tree.m_vContAttIndex[iInpAtt];
111
nbscore.m_iAtt = iInpAtt;
nbscore.m_lVal = lVal;
nbscore.m_iPredAtt = iPredAtt;
nbscore.m_lClass = lClass;
LONG lCountTree =
m_vNode[Tree.m_TreeNodeID.m_ulNodeID].m_vClassCount[lClass].m_lCount;
if (bContAtt)
{
CStateStats& ContStat = Tree.m_vClassStat[lClass].m_vContStat[iiContAtt];
nbscore.m_dblMean = ContStat.m_dblMean;
nbscore.m_dblStdDev = ContStat.m_dblStd;
}
/////////////////////////////////////////////////////////////////////////////
void DMM_SNaiveBayes::GetDescription
(ULONG in_ulNodeID,
_bstr_t& out_bstrDescription)
// Description:
// Returns description associated with this node.
//
// Notes:
// There's a lot fancier methods for constructing a description string.
// For example, I've done some work taking ratios of P(X=x|Y=y)/P(X!=x|Y=y).
{
SNBiNodeData& nodeData = m_vNode[in_ulNodeID];
if (nodeData.IsNavTop())
{
// BEGIN_LOCALIZATION
out_bstrDescription = _T("Root of predictive attribute model trees");
// END_LOCALIZATION
return;
}
if (nodeData.IsTreeNode())
{
CComBSTR bstr;
COMCALL(m_spias->GetAttributeDisplayName(iAtt, false, &bstr));
// BEGIN_LOCALIZATION
out_bstrDescription = _T("Root of ");
out_bstrDescription += (BSTR)bstr;
out_bstrDescription += _T(" predictive attribute model tree");
// END_LOCALIZATION
return;
}
112
if (nodeData.IsAttNode())
{
CComBSTR bstr;
COMCALL(m_spias->GetAttributeDisplayName(iAtt, false, &bstr));
out_bstrDescription = (BSTR)bstr;
out_bstrDescription += _T(" input attribute tree");
return;
}
if (nodeData.IsValNode())
{
// Calc node summary and then reverse list to put most important
// attributes first.
priority_queue<SNBiSummaryScore> qq;
CalcNodeSummary (in_ulNodeID, SNBi_MAX_CHAR_ATTRS, qq);
/*
stack<SNBiSummaryScore> qq;
while (!pq.empty())
{
qq.push(pq.top());
pq.pop();
}
*/
// Create the description string from the cluster summary.
bool bNotFirst = false;
while (!qq.empty())
{
IATT iAtt = qq.top().m_iAtt;
LONG lVal = qq.top().m_lVal;
IATT iPredAtt = qq.top().m_iPredAtt;
LONG lClass = qq.top().m_lClass;
DMMATTFLAGS iPredAttdmmaf;
COMCALL(m_spias->GetAttributeFlags(iPredAtt, &iPredAttdmmaf));
if (bNotFirst)
out_bstrDescription += _T(";\n");
else
bNotFirst = true;
bstrPredDescription = (BSTR)bstrName;
if (lClass == 0)
{
bstrPredDescription += m_cst.m_szIs;
bstrPredDescription += m_est.szMissing;
}
else if (FIsBinary (iPredAttdmmaf) && (lClass == 1))
{
bstrPredDescription += m_cst.m_szExists;
}
else if (FIsDiscrete (iPredAttdmmaf) && !FIsBinary (iPredAttdmmaf))
{
_variant_t varValue = lClass;
COMCALL(m_spias->GetAttributeValue(iPredAtt, &varValue));
CComBSTR bstrVal;
COMCALL(DMVariantToString(varValue,LOCALE_USER_DEFAULT, &bstrVal));
ATLASSERT(bstrVal!=NULL);
bstrPredDescription += m_cst.m_szBlank;
bstrPredDescription += m_cst.m_szEQ;
bstrPredDescription += (BSTR)bstrVal;
}
113
else
{
ATLASSERT(!"Cannot be! ");
bstrPredDescription += _T("Cannot be!");
}
DMMATTFLAGS iAttdmmaf;
COMCALL(m_spias->GetAttributeFlags(iAtt, &iAttdmmaf));
if (lVal == 0)
{
out_bstrDescription += m_cst.m_szIs;
out_bstrDescription += m_est.szMissing;
}
else if ((FIsBinary (iAttdmmaf) || FIsContinuous (iAttdmmaf)) && (lVal == 1))
{
out_bstrDescription += m_cst.m_szExists;
}
else if (FIsDiscrete (iAttdmmaf))
{
_variant_t varValue = lVal;
COMCALL(m_spias->GetAttributeValue(iAtt, &varValue));
CComBSTR bstrVal;
COMCALL(DMVariantToString(varValue,LOCALE_USER_DEFAULT, &bstrVal));
ATLASSERT(bstrVal!=NULL);
out_bstrDescription += m_cst.m_szBlank;
out_bstrDescription += m_cst.m_szEQ;
out_bstrDescription += (BSTR)bstrVal;
}
else
{
ATLASSERT(!"Cannot be!");
out_bstrDescription += _T("Cannot be!");
}
114
}
// END_LOCALIZATION
}
/////////////////////////////////////////////////////////////////////////////
void DMM_SNaiveBayes::GetMarginalRule
(ULONG in_ulNodeID,
_bstr_t& out_bstrRule)
// Description:
// Returns XML "rule" for this node w.r.t. root node.
{
// MUSTFIX: Not yet implemented.
ATLASSERT(!"!!!NYI!!!");
#if 0
COMCALL(pHandler->BeginNode(DMPI_PREDICATE));
COMCALL(pHandler->AttributeString(DMPI_OP, strOp));
COMCALL(pAttXMLStr->SaveValueString(iattSplit, (LONG) First, pHandler));
COMCALL(pAttXMLStr->SaveXMLString(iattSplit, pHandler, bRaw));
COMCALL(pHandler->EndNode());
#endif
}
/////////////////////////////////////////////////////////////////////////////
void DMM_SNaiveBayes::GetRule
(ULONG in_ulNodeID,
_bstr_t& out_bstrRule)
// Description:
// Returns XML "rule" for this node w.r.t. parent.
{
// MUSTFIX: Not yet implemented.
ATLASSERT(!"!!!NYI!!!");
}
/////////////////////////////////////////////////////////////////////////////
DOUBLE DMM_SNaiveBayes::GetProbability
(ULONG in_ulNodeID)
// Description:
// Returns probability associated with this node.
{
return (GetSupport (in_ulNodeID) / m_cCase);
}
/////////////////////////////////////////////////////////////////////////////
DOUBLE DMM_SNaiveBayes::GetMarginalProbability
(ULONG in_ulNodeID)
// Description:
// Returns probability associated with this node.
{
return (GetSupport (in_ulNodeID) / m_cCase);
}
/////////////////////////////////////////////////////////////////////////////
DOUBLE DMM_SNaiveBayes::GetSupport
(ULONG in_ulNodeID)
// Description:
// Returns count associated with this node.
{
return ((DOUBLE)m_vNode[in_ulNodeID].m_lCountSum);
}
/////////////////////////////////////////////////////////////////////////////
115
BOOL DMM_SNaiveBayes::ResizeIndexVectors
(IATT & out_cPredAtt,
vector<SNBiTree> & out_vTree,
vector<ULONG> & out_vPredAttNumber) // vector of attributes numbers of predictive
attributes
// returns
// out_vTree
// IATT m_iAtt; // attribute number of predictive attribute
// IATT m_cInpAtt; // count of input attributes
// IATT m_cContAtt; // count of continuous attributes
// vector<ULONG> m_vAttIndex; // vector of indexes of attributes
// vector<ULONG> m_vContAttIndex; // vector of indexes of continuous attributes
// vector<ULONG> m_vAttNumber; // vector of attributes numbers of input
attributes
// vector<ULONG> out_vPredAttNumber // vector of attributes numbers of predictive
attributes
{
IATT cAtt; // count of all attributes
COMCALL(m_spias->GetAttributeCount(&cAtt));
out_vTree[out_cPredAtt].m_iPredAtt = iAtt;
out_vPredAttNumber [iAtt] = out_cPredAtt;
out_cPredAtt++;
}
}
116
{
DMMATTFLAGS iAttdmmaf;
COMCALL(m_spias->GetAttributeFlags(iAtt, &iAttdmmaf));
/////////////////////////////////////////////////////////////////////////////
BOOL DMM_SNaiveBayes::AssembleNodeIDs
(IATT cPredAtt,
vector<SNBiTree> & out_vTree,
vector<SNBiNodeData> & out_vNode)
// returns
// out_vTree
// LONG m_cClasses; // count of classes of predictive
attribute
// SNBiTreeNodeID m_TreeNodeID; // node ids
// m_TreeNodeID.m_vAttNodeID[]; // vector of input attributes nodes
// only resize
// vector<SNBiClassStat> m_vClassStat; // vector of statistic of continuous
attributes of classes
// out_vNode
// NODETYPE m_iNodeType; // type of node
// ULONG m_cChild; // count of child nodes
// NODEID m_ulParent; // nodeid of parent node
// NODEID m_ulSibling; // nodeid of the next sibling node
// NODEID m_ulChild; // nodeid of the first child node
// IATT m_iiPredAtt; // index of predictive attribute
// IATT m_iiInpAtt; // index of input attribute
// LONG m_lVal; // value of input attribute
// only resize
// vector<SNBiCount> m_vClassCount; // vector of counts of classes (values of
predictive attribute)
{
// assemble vector of nodeIDs and its references
// resizing vectors
ULONG ulNodeID = NODEID_NAVTOP;
ULONG ulNodeIDTop = ulNodeID;
SNBiNodeData nodeDataTop;
nodeDataTop.m_iNodeType = NODE_TYPE_MODEL;
nodeDataTop.m_cChild = cPredAtt;
// m_ulParent = DMM_UNSPECIFIED;
// m_ulSibling = DMM_UNSPECIFIED;
// m_ulChild = DMM_UNSPECIFIED;
// m_iiPredAtt = DMM_UNSPECIFIED;
117
// m_iiInpAtt = DMM_UNSPECIFIED;
// m_lVal = INT_VALUE_MISSING;
out_vNode.push_back (nodeDataTop);
DMMATTFLAGS iPredAttdmmaf;
COMCALL(m_spias->GetAttributeFlags (out_vTree[iiPredAtt].m_iPredAtt,
&iPredAttdmmaf));
out_vTree[iiPredAtt].m_cClasses = cClasses;
out_vTree[iiPredAtt].m_vClassStat.resize (cClasses);
for (ULONG lClass = 0; lClass < out_vTree[iiPredAtt].m_cClasses; lClass++)
out_vTree[iiPredAtt].m_vClassStat[lClass].m_vContStat.resize
(out_vTree[iiPredAtt].m_cContAtt);
ulNodeID++;
// assign sibling node id for previous node
// the last node will not have a sibling
if (ulNodeIDTree != DMM_UNSPECIFIED)
out_vNode[ulNodeIDTree].m_ulSibling = ulNodeID;
// assign current node id
ulNodeIDTree = ulNodeID;
out_vTree[iiPredAtt].m_TreeNodeID.m_ulNodeID = ulNodeIDTree;
// assign child node id for parent node
if (out_vNode[ulNodeIDTop].m_ulChild == DMM_UNSPECIFIED)
out_vNode[ulNodeIDTop].m_ulChild = ulNodeIDTree;
// resize vector of att node ids
out_vTree[iiPredAtt].m_TreeNodeID.m_vAttNodeID.resize (cInpAtt);
SNBiNodeData nodeDataTree;
// if the DMMNODEPROP_TYPE_TREE is used the Data Mining Model Browser shows the
tree,
// but does not fill out the prediction tree list and does not show the
// Content Navigator, Attributes and Node Path panes.
// Besides, when the root node is selected, the MS Management Console (mmc.exe)
// is aborted showing the error message: Runtime Error!
118
// if the DMMNODEPROP_TYPE_INTERIOR is used this problem is avoided.
// So NODE_TYPE_TREE is converted to DMMNODEPROP_TYPE_INTERIOR when Nodetype is
requested
nodeDataTree.m_iNodeType = NODE_TYPE_TREE;
nodeDataTree.m_cChild = out_vTree[iiPredAtt].m_cInpAtt;
nodeDataTree.m_ulParent = NODEID_NAVTOP;
nodeDataTree.m_iiPredAtt = iiPredAtt;
// m_iiInpAtt = DMM_UNSPECIFIED;
// m_lVal = INT_VALUE_MISSING;
out_vNode.push_back (nodeDataTree);
out_vNode[ulNodeIDTree].m_vClassCount.resize (cClasses);
out_vTree[iiPredAtt].m_TreeNodeID.m_vAttNodeID[iiInpAtt].m_ulNodeID =
ulNodeIDAtt;
// assign child node id for parent node
if (out_vNode[ulNodeIDTree].m_ulChild == DMM_UNSPECIFIED)
out_vNode[ulNodeIDTree].m_ulChild = ulNodeIDAtt;
DMMATTFLAGS iInpAttdmmaf;
COMCALL(m_spias->GetAttributeFlags(iInpAtt, &iInpAttdmmaf));
ULONG cValues;
// binary continuous and discrete attributes are compute as discrete with two
states: missing and non-missing
if (FIsContinuous (iInpAttdmmaf) || FIsBinary (iInpAttdmmaf))
cValues = 2; // one for missing values
else
{
// get attribute values count, missing is included
COMCALL(m_spias->GetAttributeStateCount(iInpAtt, &cValues));
// but if only exists missing values, then count = zero
if (cValues == 0)
{
CComBSTR bstrName;
COMCALL(m_spias->GetAttributeDisplayName(iInpAtt, false, &bstrName));
out_vTree[iiPredAtt].m_TreeNodeID.m_vAttNodeID[iiInpAtt].m_vValNodeID.resize
(cValues);
SNBiNodeData nodeDataAtt;
nodeDataAtt.m_iNodeType = NODE_TYPE_INTERIOR;
nodeDataAtt.m_cChild = cValues;
nodeDataAtt.m_ulParent = ulNodeIDTree;
nodeDataAtt.m_iiPredAtt = iiPredAtt;
nodeDataAtt.m_iiInpAtt = iiInpAtt;
out_vNode.push_back (nodeDataAtt);
out_vNode[ulNodeIDAtt].m_vClassCount.resize (cClasses);
119
ULONG ulNodeIDVal = DMM_UNSPECIFIED;
out_vTree[iiPredAtt].m_TreeNodeID.m_vAttNodeID[iiInpAtt].m_vValNodeID[lVal].m_ulNodeID
= ulNodeIDVal;
// assign child node id for parent node
if (out_vNode[ulNodeIDAtt].m_ulChild == DMM_UNSPECIFIED)
out_vNode[ulNodeIDAtt].m_ulChild = ulNodeIDVal;
SNBiNodeData nodeDataVal;
nodeDataVal.m_iNodeType = NODE_TYPE_DISTRIBUTION;
nodeDataVal.m_cChild = 0;
nodeDataVal.m_ulParent = ulNodeIDAtt;
nodeDataVal.m_iiPredAtt = iiPredAtt;
nodeDataVal.m_iiInpAtt = iiInpAtt;
nodeDataVal.m_lVal = lVal;
out_vNode.push_back (nodeDataVal);
out_vNode[ulNodeIDVal].m_vClassCount.resize (cClasses);
}
}
}
return (true);
}
/////////////////////////////////////////////////////////////////////////////
BOOL DMM_SNaiveBayes::CountAttributeStatistics
(IATT cPredAtt,
LONG & out_cCase,
vector<SNBiTree> & out_vTree,
vector<SNBiNodeData> & out_vNode)
// compute
// LONG cCase; // count of all cases
// vTree
// vector<SNBiClassStat> m_vClassStat; // vector of statistic of continuous
attributes of classes
// vNode
// vector<SNBiCount> m_vClassCount; // vector of counts of classes (values of
predictive attribute)
{
120
SNBiTree& Tree = out_vTree[iiPredAtt];
IATT iPredAtt = Tree.m_iPredAtt;
DMMATTFLAGS iPredAttdmmaf;
COMCALL (m_spias->GetAttributeFlags (iPredAtt, &iPredAttdmmaf));
// attributes with missing values are not included in case attribute data
if (lClass == INT_VALUE_MISSING)
// this case has missing class
lClass = 0; // value of missing class
else
{
// lClass may be zero and
// since attributes with missing values are not included in case attribute
data
// zero values for lVal may occur in incremental inserts with states not
defined previously in data dictionary
// this kind of error will be verified later in the loop over all attribute
values
121
// Get attribute display name.
CComBSTR bstrName;
COMCALL(m_spias->GetAttributeDisplayName(iAtt, false, &bstrName));
CComBSTR bstrcCase(256);
_stprintf (bstrcCase, TEXT("%ld"), out_cCase);
ULONG ulNodeIDVal;
ContStat.m_dblSum += dblVal;
ContStat.m_dblSqrSum += dblVal * dblVal;
ContStat.m_lCount++;
}
else
{
ulNodeIDVal =
Tree.m_TreeNodeID.m_vAttNodeID[iiAtt].m_vValNodeID[lVal].m_ulNodeID;
}
// Count each attribute of each class
// missing values are not computed since attributes with missing values
// are not included in a case attribute data
// so they must be computed later by exclusion
// continuous attributtes are counted twice
out_vNode[ulNodeIDVal].m_vClassCount[lClass].m_lCount++;
}
}
}
}
return (true);
}
/////////////////////////////////////////////////////////////////////////////
BOOL DMM_SNaiveBayes::ComputeMissingCounts
(IATT cPredAtt,
vector<SNBiTree> & out_vTree,
vector<SNBiNodeData> & out_vNode)
// Compute missing counts
// vNode
// vector<SNBiCount> m_vClassCount; // vector of counts of classes (values of
predictive attribute)
{
// Run through the indexes of predictive attributes
122
for (IATT iiPredAtt = 0; iiPredAtt < cPredAtt; iiPredAtt++)
{
// Tree of predictive attribute
SNBiTree& Tree = out_vTree[iiPredAtt];
ULONG ulNodeIDTree = Tree.m_TreeNodeID.m_ulNodeID;
cValMissingCount = out_vNode[ulNodeIDTree].m_vClassCount[lClass].m_lCount; //
to compute prior probabilities
cAttCount = 0;
for (lVal = 0; lVal < cAttVal; lVal++)
{
// value node
ULONG ulNodeIDVal =
Tree.m_TreeNodeID.m_vAttNodeID[iiInpAtt].m_vValNodeID[lVal].m_ulNodeID;
cAttCount += out_vNode[ulNodeIDVal].m_vClassCount[lClass].m_lCount;
}
// end of counts of the attribute node
}
123
} // end of Compute missing counts
} // for (IATT iiPredAtt
return (true);
}
/////////////////////////////////////////////////////////////////////////////
BOOL DMM_SNaiveBayes::ComputeAttNodeCounts
(IATT cPredAtt,
vector<SNBiTree> & out_vTree,
vector<SNBiNodeData> & out_vNode)
// compute counts of the attribute node
// vNode
// vector<SNBiCount> m_vClassCount; // vector of counts of classes (values of
predictive attribute)
{
// Run through the indexes of predictive attributes
for (IATT iiPredAtt = 0; iiPredAtt < cPredAtt; iiPredAtt++)
{
// Tree of predictive attribute
SNBiTree& Tree = out_vTree[iiPredAtt];
cAttCount = 0;
for (LONG lVal = 0; lVal < cAttVal; lVal++)
{
// value node
ULONG ulNodeIDVal =
Tree.m_TreeNodeID.m_vAttNodeID[iiInpAtt].m_vValNodeID[lVal].m_ulNodeID;
cAttCount += out_vNode[ulNodeIDVal].m_vClassCount[lClass].m_lCount;
}
}
} // end of Compute counts of the attribute node
} // for (IATT iiPredAtt
return (true);
}
/////////////////////////////////////////////////////////////////////////////
BOOL DMM_SNaiveBayes::ComputeSumCounts
(IATT cPredAtt,
LONG cCase,
vector<SNBiTree> & out_vTree,
vector<SNBiNodeData> & out_vNode)
// Compute sums of counts.
// vNode
// LONG m_lCountSum; // sum of elements of vector of counts (value
of DMMNODEPROP_SUPPORT property)
{
out_vNode[NODEID_NAVTOP].m_lCountSum = cCase;
124
// Compute sum of counts
lCountSumTree = 0;
for (LONG lClass = 0; lClass < Tree.m_cClasses; lClass++)
lCountSumTree +=
out_vNode[ulNodeIDTree].m_vClassCount[lClass].m_lCount;
lCountSumAtt = 0;
for (LONG lClass = 0; lClass < Tree.m_cClasses; lClass++)
lCountSumAtt +=
out_vNode[ulNodeIDAtt].m_vClassCount[lClass].m_lCount;
lCountSumVal = 0;
for (LONG lClass = 0; lClass < Tree.m_cClasses; lClass++)
lCountSumVal += out_vNode[ulNodeIDVal].m_vClassCount[lClass].m_lCount;
}
} // end of compute sum of counts
} // for (IATT iiPredAtt
return (true);
}
/////////////////////////////////////////////////////////////////////////////
BOOL DMM_SNaiveBayes::DoInsertCases
(BOOL bIncremental)
// Description:
//
// Trains the model with the specified case set updating previous training data.
//
// claudio luiz curotto - apr/2002
//
/////////////////////////////////////////////////////////////////////////////
{
#ifdef DEBUG
FILE* pf;
pf = _wfopen(strFileNameTmp, TEXT("awt"));
DM_DEBUG( DM_DMSPROV_LEVEL_ALL, DMSPROV,
TEXT ("\n==> Debug file %s opened in DMM_SNaiveBayes::DoInsertCases.\n"),
strFileNameTmp);
fprintf(pf,"\n\nDMM_SNaiveBayes::DoInsertCases\n\n");
125
ULONG cStates;
// get attribute values count, missing is included
COMCALL (m_spias->GetAttributeStateCount (iAtt, &cStates));
// but if only exists missing values, then count = zero
if (cStates == 0)
{
CComBSTR bstrName;
COMCALL(m_spias->GetAttributeDisplayName(iAtt, false, &bstrName));
DMMATTFLAGS iAttdmmaf;
COMCALL(m_spias->GetAttributeFlags (iAtt, &iAttdmmaf));
// vectors to be sized
// vTree[]; // vector of trees of predictive
attributes
// vTree[].m_TreeNodeID.m_vAttNodeID[]; // vector of input attributes
nodes
// vTree[].m_TreeNodeID.m_vAttNodeID[].m_vValNodeID[]; // vector of attributes
values nodes
// vTree[].m_vAttIndex[]; // vector of indexes of
attributes
// vTree[].m_vContAttIndex[]; // vector of indexes of
continuous attributes
// vTree[].m_vAttNumber[]; // vector of attributes numbers
of input attributes
126
// vTree[].m_vClassStat[]; // vector of statistic of
continuous attributes of classes
// vTree[].m_vClassStat[].m_vContStat[]; // vector of statistic of
continuous attributes
if (m_cCase == 0)
{
// to do only in the first insert when the model was created
ResizeIndexVectors (cPredAtt, vTree, vPredAttNumber);
if (!AssembleNodeIDs (cPredAtt, vTree, vNode))
return (false);
}
else
{
cPredAtt = m_cPredAtt; // count of predictive attributes
vNode.swap (m_vNode); // vector of nodeData
vTree.swap (m_vTree); // vector of Trees of predictive attributes
}
#ifdef DEBUG
fprintf(pf,"%ld inserted cases, %ld total cases\n\n", cCase, m_cCase);
fclose(pf);
#endif
// Done!
return (true);
}
/////////////////////////////////////////////////////////////////////////////
void DMM_SNaiveBayes::DoPredict
(ULONG in_cAttVal, // count of attribute values
DMATTVALUE in_rgAttVal[], // vector of attribute values
BOOL in_fContinuousHistograms,
SPM_Predictions& in_preds) // object describing predictions to
make and
// giving a place to store the
predictions.
// Description:
// report learned distributions
//
// Return Values:
//
// Side Effects:
//
// Notes:
//
///////////////////////////////////////////////////////////////////////////////
{
// Make sure we're not learning and that we have a model.
// CHECKRESULT(m_vTree.size()!=0,DMME_MODEL_NOT_TRAINED);
127
// Initialize a Singleton cache for accessing case values.
SPM_SingletonCaseCache<SPM_Case> scc(m_spias,in_cAttVal,in_rgAttVal);
SPM_SingletonCaseCacheItr<SPM_Case> sccitr;
sccitr.Init(&scc);
// GetAttributeFlags.
DMMATTFLAGS iPredAttdmmaf;
COMCALL(m_spias->GetAttributeFlags(iPredAtt, &iPredAttdmmaf));
DMMATTFLAGS iAttdmmaf;
COMCALL(m_spias->GetAttributeFlags (iAtt, &iAttdmmaf));
128
IATT iiInpAtt = Tree.m_vAttIndex[iAtt];
ULONG ulNodeIDVal =
Tree.m_TreeNodeID.m_vAttNodeID[iiInpAtt].m_vValNodeID[lVal].m_ulNodeID;
dblProb *= (DOUBLE)m_vNode[ulNodeIDVal].m_vClassCount[lClass].m_lCount /
lCountTree; // probability of the value (missing/non-missing for continuous
attributes)
if (ContStat.m_lCount > 0)
{
DOUBLE dblDiff = (dblVal - ContStat.m_dblMean);
if (ContStat.m_dblStd > STDDEV_ZERO)
{
DOUBLE dblExp = dblDiff / ContStat.m_dblStd;
dblExp *= -dblExp / 2.;
DOUBLE dblDiv = NORM_CONST * ContStat.m_dblStd;
dblProb *= exp (dblExp) / dblDiv;
}
else
if (fabs (dblDiff) > DIFF_ZERO) dblProb = (DOUBLE)0.; // if standard
deviation is zero it can be assumed that all values are equal?
}
else
dblProb = (DOUBLE)0.;
}
}
129
dblProbSum : 0;
rgStates[lClass].dblProbabilityVariance = 0.0;
}
}
// Done.
}
/////////////////////////////////////////////////////////////////////////////
ULONG DMM_SNaiveBayes::GetContinuousAttributeStateCount()
// Description:
// Returns number of states associated with continuous attributes.
/////////////////////////////////////////////////////////////////////////////
{
return (2);
}
/////////////////////////////////////////////////////////////////////////////
IATT DMM_SNaiveBayes::GetiAttNodeID
(ULONG in_ulNodeID)
// Description:
// Returns attribute number from nodeID.
/////////////////////////////////////////////////////////////////////////////
{
IATT iiPredAtt = m_vNode[in_ulNodeID].m_iiPredAtt;
if (iiPredAtt == DMM_UNSPECIFIED)
return (DMM_UNSPECIFIED);
if (iiInpAtt == DMM_UNSPECIFIED)
return (m_vTree[iiPredAtt].m_iPredAtt);
else
return (m_vTree[iiPredAtt].m_vInputAttNumber[iiInpAtt]);
}
/////////////////////////////////////////////////////////////////////////////
IATT DMM_SNaiveBayes::GetiPredAttNodeID
(ULONG in_ulNodeID)
// Description:
// Returns predictive attribute number from nodeID.
/////////////////////////////////////////////////////////////////////////////
{
IATT iiPredAtt = m_vNode[in_ulNodeID].m_iiPredAtt;
if (iiPredAtt == DMM_UNSPECIFIED)
return (DMM_UNSPECIFIED);
return (m_vTree[iiPredAtt].m_iPredAtt);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP DMM_SNaiveBayes::GetNavigator (
ULONG ulNodeIDStart,
IDAGNavigation** ppidagnav)
// Description:
// Implements IDMMDataMiningModel::GetNavigator.
/////////////////////////////////////////////////////////////////////////////
{
HRESULT hr = S_OK;
try
{
// Make sure we're not currently learning and that we have a model.
CHECKRESULT(m_vTree.size()!=0, DMME_MODEL_NOT_TRAINED);
130
pSNaiveBayesNav->Init(m_spias, this, (ulNodeIDStart < NODEID_NAVTOP) ?
NODEID_NAVTOP : ulNodeIDStart);
COMCALL(pSNaiveBayesNav->QueryInterface(_uuidof(IDAGNavigation), (void**)
ppidagnav));
}
catch (_com_error &e)
{
hr = e.Error();
}
catch (...)
{
hr = E_FAIL;
}
return (hr);
}
/////////////////////////////////////////////////////////////////////////////
inline LONG ConvertNodeType (
NODETYPE in_NodeType)
// NODE_TYPE_MODEL (1) > DMMNODEPROP_TYPE_MODEL (1)
// NODE_TYPE_TREE (2) > DMMNODEPROP_TYPE_INTERIOR (3)
// NODE_TYPE_INTERIOR (3) > DMMNODEPROP_TYPE_INTERIOR (3)
// NODE_TYPE_DISTRIBUTION (4) > DMMNODEPROP_TYPE_DISTRIBUTION (4)
// other (6) > DMMNODEPROP_TYPE_UNKNOWN (6)
{
if (in_NodeType == NODE_TYPE_MODEL)
return (DMMNODEPROP_TYPE_MODEL);
if (in_NodeType == NODE_TYPE_TREE)
return (DMMNODEPROP_TYPE_INTERIOR);
if (in_NodeType == NODE_TYPE_INTERIOR)
return (DMMNODEPROP_TYPE_INTERIOR);
if (in_NodeType == NODE_TYPE_DISTRIBUTION)
return (DMMNODEPROP_TYPE_DISTRIBUTION);
return (DMMNODEPROP_TYPE_UNKNOWN);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP DMM_SNaiveBayes::GetNodeProperties (
ULONG in_ulNodeID,
DBPROPSET *pPropertySet)
// Description:
// Provides support for GetNodeProperties.
//
// Notes
// 1) We need to decide what makes most sense to spit out for
// DMMPROPSET_DISTRIBUTION. Since all variables are continuous,
// they will only have two states. It won't really be very
// interesting for the dude to get information about the
// DMMPROPSET_DISTRIBUTION as it's currently defined, since all he'll
// get back is the mean value. Perhaps we should have another
// property which allows the user to get coefficients of the polynomial.
// We could return these through DMMPROPSET_DISTRIBUTION, but we'd need
// to make it look like there's more than one state associated with
// a continuous variable, which probably won't make much sense and
// some frontends may not be expecting such behavior.
/////////////////////////////////////////////////////////////////////////////
{
_variant_t varEmpty;
SNBiNodeData& nodeData = m_vNode[in_ulNodeID];
// Initialize the PropSet, end result is that any allocated memory belongs to
pPropertySet
PFPropSets propsetsRequest;
InitNodePropSet(pPropertySet, propsetsRequest);
if (pPropertySet->guidPropertySet == DMMPROPSET_DISTRIBUTION)
{
if (nodeData.IsNavTop())
return (S_OK);
131
IATT iiPredAtt = nodeData.m_iiPredAtt;
IATT iPredAtt = m_vTree[iiPredAtt].m_iPredAtt;
ULONG cClasses = m_vTree[iiPredAtt].m_cClasses; // Number of states involved.
LONG iCount;
iCount = nodeData.m_lCountSum;
DMMATTFLAGS iPredAttdmmaf;
COMCALL(m_spias->GetAttributeFlags (iPredAtt, &iPredAttdmmaf));
if (lClass == 0)
{
dmmstate.vValue.vt = VT_NULL;
}
else if (FIsBinary (iPredAttdmmaf))
{
if (lClass != 1)
dmmstate.vValue.vt = VT_ILLEGAL;
else
dmmstate.vValue.vt = VT_EMPTY;
}
else if (FIsDiscrete (iPredAttdmmaf))
{
SetVariant(&dmmstate.vValue,(ULONG)lClass);
}
else
{
ATLASSERT(!"Cannot be! ");
SetVariant(&dmmstate.vValue,(ULONG)lClass);
}
dmmstate.dblVariance = 0.0;
dmmstate.dblSupport = nodeData.m_vClassCount[lClass].m_lCount;
if (iCount == 0)
{
ATLASSERT(dmmstate.dblSupport==0.0);
dmmstate.dblProbability = 0.0;
}
else
dmmstate.dblProbability = dmmstate.dblSupport/iCount;
dmmstate.dblProbabilityVariance = 0.0;
dmmstate.dblAdjustedProbability = 0.0;
132
DMMStateToDistributionVSAVs(iPredAtt, m_spias, iEntry, &dmmstate,
vsavAtts, vsavValues, vsavValueTypes, vsavSupports, vsavProbabilities,
vsavVariances,
&m_est);
iEntry++;
}
switch (pPropCurrent->dwPropertyID)
{
case DMMDISTPROP_ATTRIBUTES:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_DISTRIBUTION,
DMMDISTPROP_ATTRIBUTES, &varAtts));
break;
case DMMDISTPROP_VALUES:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_DISTRIBUTION,
DMMDISTPROP_VALUES, &varValues));
break;
case DMMDISTPROP_VALUETYPES:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_DISTRIBUTION,
DMMDISTPROP_VALUETYPES, &varValueTypes));
break;
case DMMDISTPROP_SUPPORTS:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_DISTRIBUTION,
DMMDISTPROP_SUPPORTS, &varSupports));
break;
case DMMDISTPROP_PROBABILITIES:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_DISTRIBUTION,
DMMDISTPROP_PROBABILITIES, &varProbabilities));
break;
case DMMDISTPROP_VARIANCES:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_DISTRIBUTION,
DMMDISTPROP_VARIANCES, &varVariances));
break;
}
}
}
else if (pPropertySet->guidPropertySet == DMMPROPSET_NODE)
{
for (ULONG iProperty = 0; iProperty < pPropertySet->cProperties; iProperty++)
{
DBPROP* pPropCurrent = &(pPropertySet->rgProperties[iProperty]);
switch (pPropCurrent->dwPropertyID)
{
case DMMNODEPROP_ATTRIBUTES:
if (nodeData.IsNavTop())
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE, pPropCurrent-
>dwPropertyID, (VARIANT*)&varEmpty));
else
{
VSAV vsavAttributes;
BSTR bstrName = NULL;
COMCALL(m_spias->GetAttributeDisplayName(GetiPredAttNodeID (in_ulNodeID),
false, &bstrName));
vsavAttributes.PushBack(bstrName);
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE,
DMMNODEPROP_ATTRIBUTES, (VARIANT*)vsavAttributes));
}
break;
case DMMNODEPROP_TYPE:
133
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE, DMMNODEPROP_TYPE,
ConvertNodeType (nodeData.m_iNodeType)));
break;
case DMMNODEPROP_CONDITION_XML:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE,
DMMNODEPROP_CONDITION_XML, _bstr_t()));
break;
case DMMNODEPROP_RULE_XML:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE, DMMNODEPROP_RULE_XML,
_bstr_t()));
break;
case DMMNODEPROP_PROBABILITY:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE,
DMMNODEPROP_PROBABILITY, GetProbability(in_ulNodeID)));
break;
case DMMNODEPROP_MARGINAL_PROBABILITY:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE,
DMMNODEPROP_MARGINAL_PROBABILITY, GetMarginalProbability(in_ulNodeID)));
break;
case DMMNODEPROP_SHORTCAPTION:
case DMMNODEPROP_CAPTION:
{
_bstr_t bstrCaption;
GetCaption(in_ulNodeID, bstrCaption);
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE, pPropCurrent-
>dwPropertyID, bstrCaption));
}
break;
/*
case DMMNODEPROP_MSOLAP_NODE_SHORT_CAPTION:
if (nodeData.IsNavTop())
{
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE,
DMMNODEPROP_MSOLAP_NODE_SHORT_CAPTION, _bstr_t()));
}
else
{
_bstr_t bstrCaption;
GetCaption(in_ulNodeID, bstrCaption);
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE, pPropCurrent-
>dwPropertyID, bstrCaption));
}
break;
*/
case DMMNODEPROP_SUPPORT:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE, DMMNODEPROP_SUPPORT,
GetSupport (in_ulNodeID)));
break;
case DMMNODEPROP_MODEL_COLUMN_NAME:
if (nodeData.IsNavTop())
{
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE,
DMMNODEPROP_MODEL_COLUMN_NAME, _bstr_t()));
}
else
{
BSTR bstrColumnName = NULL;
COMCALL(m_spias->GetFullyQualifiedColumnName(GetiAttNodeID
(in_ulNodeID),&bstrColumnName));
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE,
DMMNODEPROP_MODEL_COLUMN_NAME, bstrColumnName));
}
134
break;
case DMMNODEPROP_DESCRIPTION:
{
_bstr_t bstrDescription;
case DMMNODEPROP_SCORE:
// case DMMNODEPROP_MSOLAP_NODE_SCORE:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE, pPropCurrent-
>dwPropertyID, (DOUBLE)0));
// MUSTFIX: Need to implement support.
// ATLASSERT(0);
break;
case DMMNODEPROP_NODE_TREE:
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE, DMMNODEPROP_NODE_TREE,
(LONG)(nodeData.IsTreeNode () ? 1 : 0)));
break;
/*
case DMMNODEPROP_MSOLAP_MODEL_COLUMN:
{
_bstr_t bstrColumnName;
GetModelTreeName(in_ulNodeID, bstrColumnName);
COMCALL(propsetsRequest.SetPropValue(DMMPROPSET_NODE,
DMMNODEPROP_MSOLAP_MODEL_COLUMN, bstrColumnName));
}
break;
*/
}
}
}
else
{
CHECKARG(0);
}
return (S_OK);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP DMM_SNaiveBayes::ValidateNodeID
(ULONG in_ulNodeID)
// Description:
// Implements IDMMDataMiningModel::ValidateNodeID.
////////////////////////////////////////////////////////////////////////////
{
SNBiNodeData& nodeData = m_vNode[in_ulNodeID];
IATT cAtt;
COMCALL(m_spias->GetAttributeCount(&cAtt));
if (nodeData.IsNavTop())
return (S_OK);
if (nodeData.IsTreeNode())
return (iAtt < cAtt);
if (nodeData.IsAttNode())
return (iAtt < cAtt);
135
if (nodeData.IsValNode())
{
return (iAtt < cAtt
&& lVal <
m_vTree[nodeData.m_iiPredAtt].m_TreeNodeID.m_vAttNodeID[nodeData.m_iiInpAtt].m_vValNod
eID.size ());
}
return (S_OK);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP DMM_SNaiveBayes::NodeSupportsPropertySet(
ULONG in_ulNodeID,
GUID* guidSet,
boolean* pfSupported)
// Description:
// Implements IDMMDataMiningModel::NodeSupportsPropertySet
/////////////////////////////////////////////////////////////////////////////
{
try
{
// Make sure that we're not learning and that we have a model.
CHECKRESULT(m_vTree.size() != 0, DMME_MODEL_NOT_TRAINED);
*pfSupported = false;
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP DMM_SNaiveBayes::GetNodeUniqueName(
ULONG in_ulNodeID,
BSTR* pbstrUniqueName)
// Description:
// Implements IDMMDataMiningModel::GetNodeUniqueName
/////////////////////////////////////////////////////////////////////////////
{
try
{
wchar_t wsz[20];
swprintf(wsz,L"%ld",in_ulNodeID);
*pbstrUniqueName = SysAllocString(wsz);
}
catch (_com_error &e)
{
return e.Error();
}
catch (...)
{
return E_FAIL;
}
return (NOERROR);
}
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP DMM_SNaiveBayes::GetNodeIDFromUniqueName(
BSTR bstrUniqueName,
136
ULONG* pulNodeID)
// Description:
// Implements IDMMDataMiningModel::GetNodeIDFromUniqueName
/////////////////////////////////////////////////////////////////////////////
{
try
{
*pulNodeID = wcstol(bstrUniqueName, NULL, 10);
}
catch (_com_error &e)
{
return e.Error();
}
catch (...)
{
return (E_POINTER);
}
return (S_OK);
}
/////////////////////////////////////////////////////////////////////////////
inline void WriteMissingStateEx (
IDMPersistenceWriter* piWriter,
DOUBLE in_dblSupport,
BOOL in_fClose = true)
// Description:
// This method replaces .\DMMXML.CPP\WriteMissingState.
/////////////////////////////////////////////////////////////////////////////
{
COMCALL(piWriter->OpenScope(DMPI_STATE)); // Open state tag
COMCALL(piWriter->SetBoolAttribute(DMPI_MISSING, true));
COMCALL(piWriter->SetDoubleAttribute(DMPI_SUPPORT, in_dblSupport));
if (in_fClose)
COMCALL(piWriter->CloseScope()); // Close state tag
}
/////////////////////////////////////////////////////////////////////////////
inline void WriteDiscreteStateEx (
IDMPersistenceWriter* piWriter,
DOUBLE dblSupport,
IATT iAtt,
DMMATTFLAGS dmmaf,
ULONG iAttState,
IDMPersistAttribute* pattxml,
BOOL fCloseTag=true)
// Description:
// This method replaces .\DMMXML.CPP\WriteDiscreteState.
/////////////////////////////////////////////////////////////////////////////
{
COMCALL(piWriter->OpenScope(DMPI_STATE)); // Open state tag
if (dmmaf & DMMAF_BINARY)
137
{
COMCALL(piWriter->SetBoolAttribute(DMPI_MISSING, false));
}
else
{
COMCALL(pattxml->SaveValue(iAtt, iAttState, piWriter));
}
COMCALL(piWriter->SetDoubleAttribute(DMPI_SUPPORT, dblSupport));
if (fCloseTag)
COMCALL(piWriter->CloseScope());
}
/////////////////////////////////////////////////////////////////////////////
inline void WriteContinuousStateEx (
IDMPersistenceWriter* piWriter,
IATT iAtt,
DOUBLE dblSupport,
DOUBLE dblMean,
DOUBLE dblStd,
DOUBLE dblMin,
DOUBLE dblMax,
IDMPersistAttribute* pattxml,
BOOL fCloseTag = true,
BOOL bMinMax = true,
BOOL bMean = true,
BOOL bStd = true)
// Description:
// This method replaces .\DMMXML.CPP\WriteMissingState.
/////////////////////////////////////////////////////////////////////////////
{
COMCALL(piWriter->OpenScope(DMPI_STATE)); // Open state tag
if (bMinMax)
{
COMCALL(pattxml->SaveContValue(iAtt, DMPI_MINIMUM, dblMin, LOCALE_NEUTRAL,
piWriter));
COMCALL(pattxml->SaveContValue(iAtt, DMPI_MAXIMUM, dblMax, LOCALE_NEUTRAL,
piWriter));
}
COMCALL(piWriter->SetDoubleAttribute(DMPI_SUPPORT, dblSupport));
if (bMean)
COMCALL(pattxml->SaveContValue(iAtt, DMPI_MEAN, dblMean, LOCALE_NEUTRAL,
piWriter));
if (bStd)
COMCALL(piWriter->SetDoubleAttribute(DMPI_STANDARDDEVIATION, dblStd));
if (fCloseTag)
COMCALL(piWriter->CloseScope());
}
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP DMM_SNaiveBayes::Load (IDMPersistenceReader* piReader)
// Description:
// Implements IDMPersist::Load.
// Loads DMM_SNaiveBayes object from XML repository.
//
//
/////////////////////////////////////////////////////////////////////////////
{
// Cache all data locally
LONG cCase; // count of all cases
IATT cPredAtt; // count of predictive attributes
vector<SNBiNodeData> vNode; // vector of NodeIDs
vector<SNBiTree> vTree; // vector of trees of predictive attributes
vector<ULONG> vPredAttNumber; // vector of attributes numbers of predictive
138
attributes
try
{
// Make sure we have a context.
CHECKRESULT(m_spias!=NULL, DMME_XML_LOADING_FAILURE);
CHECKRESULT(m_spidmmMarginal!=NULL, DMME_XML_LOADING_FAILURE);
else
ATLASSERT(!"Invalid tag found in XML file! ");
}
else if (tag == DMPI_DATADISTRIBUTION)
{
// data to be loaded
// vTree
// vector<SNBiClassStat> vClassStat; // vector of statistic of continuous
attributes of classes
// vNode
// vector<SNBiCount> vClassCount; // vector of counts of classes (values of
predictive attribute)
if (bVectorsNotResized)
{
// resize vectors and assemble NodeIDs when the first data distribution is
found
139
// Tree of predictive attribute
SNBiTree& Tree = vTree[iiPredAtt];
NODEID ulNodeIDTree = Tree.m_TreeNodeID.m_ulNodeID;
DMMATTFLAGS iPredAttdmmaf;
COMCALL(m_spias->GetAttributeFlags(iCurrentClassAtt, &iPredAttdmmaf));
// Load support.
DOUBLE dblSupport;
COMCALL(piReader->GetDoubleAttribute(DMPI_SUPPORT, &dblSupport));
140
vNode[ulNodeIDTree].m_vClassCount[ulClass].m_lCount = dblSupport;
if (dblSupport > 0)
{
// only attribute classes with non zero counts have distributions
ContStat.m_dblMean = pdmmstate->vValue.dblVal;
DOUBLE dblStd2 = pdmmstate->dblVariance; // Variance = square of
standard deviation
ContStat.m_lCount = pdmmstate->dblSupport;
ContStat.m_dblSum = ContStat.m_dblMean * ContStat.m_lCount;
if (ContStat.m_lCount == 1)
ContStat.m_dblSqrSum = ContStat.m_dblSum * ContStat.m_dblSum;
else
ContStat.m_dblSqrSum = dblStd2 * (ContStat.m_lCount - 1) -
ContStat.m_lCount * ContStat.m_dblMean * ContStat.m_dblMean + 2. * ContStat.m_dblMean
* ContStat.m_dblSum;
ContStat.m_dblStd = ContStat.Deviation ();
}
}
}
// Free up this distribution.
::CoTaskMemFree (pdmmdist);
}
COMCALL(hrNext = piReader->MoveToNextSiblingScope());
}
141
// close scope of counts of states of input attributes
COMCALL(piReader->CloseScope());
}
}
// close scope of data distribution (tree model)
COMCALL(piReader->CloseScope());
}
// Unexpected node. Fail immediately.
else
{
CHECKRESULT(0, DMME_XML_LOADING_FAILURE);
}
// search to next data distribution (new tree model)
COMCALL(hrNext = piReader->MoveToNextSiblingScope());
}
// Description:
// Implements IDMPersist::Save.
// Saves DMM_SNaiveBayes object to XML repository.
//
// Syntax for SNaiveBayes-model ...
//
// <Simple-naive-bayes-model>
// <info name="Count of Cases" value="number of cases" />
// <info name="Count of Trees" value="number of predictive attributes" />
// <data-distribution>
// <simple-attribute name="predictive attribute name 1">
// <state missing="true" support="...">
// <data-distribution>
// <simple-attribute name="input attribute name 1">
// <state missing="true" support=... />
// <state value="state value 1" support=... />
// <state value="state value 2" support=... />
// ...
// </data-distribution>
// <data-distribution>
// <simple-attribute name="input attribute name 2">
// <state missing="true" support=... />
// <state value="state value 1" support=... />
142
// <state value="state value 2" support=... />
// ...
// </data-distribution>
// ...
// </state>
// <state value ="state value 1" support="...">
// <data-distribution>
// <simple-attribute name="input attribute name 1">
// <state missing="true" support=... />
// <state value="state value 1" support=... />
// <state value="state value 2" support=... />
// ...
// </data-distribution>
// <data-distribution>
// <simple-attribute name="input attribute name 2">
// <state missing="true" support=... />
// <state value="state value 1" support=... />
// <state value="state value 2" support=... />
// ...
// </data-distribution>
// ...
// </state>
// ...
// </data-distribution>
// <data-distribution>
// <simple-attribute name="predictive attribute name 2">
// <state missing=true support=... />
// ...
// </data-distribution>
// </Simple-naive-bayes-model>
/////////////////////////////////////////////////////////////////////////////
{
try
{
// Make sure we're not learning and that we actually have a model.
CHECKRESULT(m_vTree.size()!=0, DMME_MODEL_NOT_TRAINED);
// COMCALL(piWriter->OpenScope(DMPI_TREEMODEL));
// Save model id
// CComBSTR bstrName;
// COMCALL(m_spias->GetAttributeDisplayName(iCurrentClassAtt, false, &bstrName));
// COMCALL(piWriter->SetStringAttribute(DMPI_MODELID, bstrName));
143
COMCALL(m_spias->QueryInterface(&spAttXMLString));
DMMATTFLAGS iPredAttdmmaf;
COMCALL(m_spias->GetAttributeFlags(iPredAtt, &iPredAttdmmaf));
// attribute node
ULONG ulNodeIDAtt = Tree.m_TreeNodeID.m_vAttNodeID[iiInpAtt].m_ulNodeID;
DMMATTFLAGS iInpAttdmmaf;
COMCALL(m_spias->GetAttributeFlags(iInpAtt, &iInpAttdmmaf));
// run through all values of the input attribute (binary and continuous
attributes have 2 values)
for (LONG lVal = 0; lVal < cAttVal; lVal++)
{
ULONG ulNodeIDVal =
Tree.m_TreeNodeID.m_vAttNodeID[iiInpAtt].m_vValNodeID[lVal].m_ulNodeID;
if (m_vNode[ulNodeIDVal].m_vClassCount[lClass].m_lCount > 0)
{
// Save out "<state ...>" node for lVal.
if (lVal == 0)
144
{
WriteMissingStateEx (piWriter,
m_vNode[ulNodeIDVal].m_vClassCount[lClass].m_lCount, true);
}
else if (FIsDiscrete (iInpAttdmmaf) || (FIsBinary (iInpAttdmmaf) &&
(lVal == 1))) // all binary attributes are computed as discrete with two states
{
WriteDiscreteStateEx (piWriter,
m_vNode[ulNodeIDVal].m_vClassCount[lClass].m_lCount, iInpAtt, iInpAttdmmaf, lVal,
spAttXMLString.p, true);
}
else if (FIsContinuous (iInpAttdmmaf) && !FIsBinary (iInpAttdmmaf) &&
(lVal == 1))
{
ULONG iiContAtt = Tree.m_vContAttIndex[iInpAtt];
CStateStats& ContStat =
Tree.m_vClassStat[lClass].m_vContStat[iiContAtt];
// Success!
return (S_OK);
}
//-----------------------------------------------------------------------------
//
// @module SNaiveBayes.hpp | Implementation of Simple Naive Bayes DMM.
//
// Description
//
// DMM_SNaiveBayes implements support for Simple Naive Bayes inference.
//
//
145
// Created by Claudio Luiz Curotto - Jan/2002
// to implement Simple Naive Bayes incremental algorithm
//
//-----------------------------------------------------------------------------
#ifndef __SNaiveBayes_HPP_
#define __SNaiveBayes_HPP_
#include "ModelUtils.inl"
#include "DMMStatistics.h"
////////////////////////////////////////////////////////////////////////////
class SNBiCaseAttData
// Description:
// attribute data of each case (used to create cases on the fly).
////////////////////////////////////////////////////////////////////////////
{
public:
IATT m_iAtt; // attribute number
LONG m_lVal; // integer attribute value (discrete attributes)
DOUBLE m_dblVal; // float attribute value (continuous attributes)
SNBiCaseAttData ()
{
m_iAtt = DMM_UNSPECIFIED;
m_lVal = INT_VALUE_MISSING;
m_dblVal = FLOAT_VALUE_MISSING;
}
};
////////////////////////////////////////////////////////////////////////////
class SNBiCount
// Description:
// count for one class (value of predictive attribute).
////////////////////////////////////////////////////////////////////////////
{
public:
LONG m_lCount; // count for one class (value of predictive attribute)
SNBiCount ()
{
m_lCount = 0;
}
};
/////////////////////////////////////////////////////////////////////////////
class SNBiNodeData
146
// Description:
// node data.
////////////////////////////////////////////////////////////////////////////
{
public:
NODETYPE m_iNodeType; // type of node
// model node: DMMNODEPROP_TYPE_MODEL for
NODEID_NAVTOP
// tree node: DMMNODEPROP_TYPE_TREE for
predictive attributes
// attribute node: DMMNODEPROP_TYPE_INTERIOR for
input attributes
// value node: DMMNODEPROP_TYPE_DISTRIBUTION
for values of input attributes
ULONG m_cChild; // count of child nodes
NODEID m_ulParent; // nodeid of parent node
NODEID m_ulSibling; // nodeid of the next sibling node
NODEID m_ulChild; // nodeid of the first child node
IATT m_iiPredAtt; // index of predictive attribute
// model node: DMM_UNSPECIFIED
IATT m_iiInpAtt; // index of input attribute
// model and tree nodes: DMM_UNSPECIFIED
LONG m_lVal; // value of input attribute
// model tree and attribute nodes:
INT_VALUE_MISSING
vector<SNBiCount> m_vClassCount; // vector of counts of classes (values of
predictive attribute)
// model node: unused
// tree node: sum of counts for each class
of all cases
// used to compute prior
probabilities
// prior probability[] =
m_vClassCount[].m_lCount / m_cCase // since missing values are considered
// attribute node: sum of the counts of each
class of all attribute values
// must be equal of the value of tree node for
all attributes
// value node: counts of each class
LONG m_lCountSum; // sum of elements of vector of counts (value of
DMMNODEPROP_SUPPORT property)
// model node: number of cases
// tree node: must be equal of number of
cases
// attribute node: must be equal of number of
cases
// value node: sum of counts of all classes
SNBiNodeData ()
{
m_iNodeType = NODE_TYPE_MODEL;
m_cChild = 0;
m_ulParent = DMM_UNSPECIFIED;
m_ulSibling = DMM_UNSPECIFIED;
m_ulChild = DMM_UNSPECIFIED;
m_iiPredAtt = DMM_UNSPECIFIED;
m_iiInpAtt = DMM_UNSPECIFIED;
m_lVal = INT_VALUE_MISSING;
m_lCountSum = 0;
}
__forceinline BOOL IsNavTop ()
{
return (m_iNodeType==NODE_TYPE_MODEL);
}
__forceinline BOOL IsTreeNode ()
{
return (m_iNodeType==NODE_TYPE_TREE);
}
__forceinline BOOL IsAttNode ()
{
return (m_iNodeType==NODE_TYPE_INTERIOR);
147
}
__forceinline BOOL IsValNode ()
{
return (m_iNodeType==NODE_TYPE_DISTRIBUTION);
}
};
////////////////////////////////////////////////////////////////////////////
class SNBiValNodeID
// Description:
// node id of leaf nodes (input attributes values nodes).
////////////////////////////////////////////////////////////////////////////
{
public:
ULONG m_ulNodeID; // NodeID
SNBiValNodeID ()
{
m_ulNodeID = DMM_UNSPECIFIED;
}
};
////////////////////////////////////////////////////////////////////////////
class SNBiAttNodeID
// Description:
// node ids of input attributes nodes.
////////////////////////////////////////////////////////////////////////////
{
public:
ULONG m_ulNodeID; // NodeID
vector<SNBiValNodeID> m_vValNodeID; // vector of attributes values node ids
SNBiAttNodeID ()
{
m_ulNodeID = DMM_UNSPECIFIED;
}
};
////////////////////////////////////////////////////////////////////////////
class SNBiTreeNodeID
// Description:
// tree of node ids.
////////////////////////////////////////////////////////////////////////////
{
public:
ULONG m_ulNodeID; // NodeID
vector<SNBiAttNodeID> m_vAttNodeID; // vector of input attributes nodes
SNBiTreeNodeID ()
{
m_ulNodeID = DMM_UNSPECIFIED;
}
};
/////////////////////////////////////////////////////////////////////////////
class SNBiClassStat
// Description:
// statistics record of each class (predictive attribute value).
/////////////////////////////////////////////////////////////////////////////
{
public:
vector<CStateStats> m_vContStat; // vector of statistics of input continuous
attributes
};
/////////////////////////////////////////////////////////////////////////////
class SNBiTree
148
// Description:
// model tree for each predictive attribute.
////////////////////////////////////////////////////////////////////////////
{
public:
IATT m_iPredAtt; // attribute number of predictive attribute
LONG m_cClasses; // count of classes of predictive attribute
IATT m_cInpAtt; // count of input attributes
IATT m_cContAtt; // count of continuous attributes
SNBiTreeNodeID m_TreeNodeID; // node ids
vector<ULONG> m_vAttIndex; // vector of indexes of attributes
vector<ULONG> m_vContAttIndex; // vector of indexes of continuous attributes
vector<ULONG> m_vInputAttNumber; // vector of attributes numbers of input
attributes
vector<SNBiClassStat> m_vClassStat; // vector of statistic of continuous
attributes of classes
SNBiTree ()
{
m_iPredAtt = DMM_UNSPECIFIED;
m_cClasses = 0;
m_cInpAtt = 0;
m_cContAtt = 0;
}
};
/////////////////////////////////////////////////////////////////////////////
class SNBiSummaryScore
// Description:
// Class used during ::GetDescription.
/////////////////////////////////////////////////////////////////////////////
{
public:
IATT m_iAtt; // attribute number of input attribute
LONG m_lVal; // integer attribute value (discrete attributes)
DOUBLE m_dblMean; // mean of continuous attributes
DOUBLE m_dblStdDev;// standard deviation of continuous attributes
IATT m_iPredAtt; // attribute number of predictive attribute
LONG m_lClass; // class (attribute value) of predictive attribute
DOUBLE m_dblProb;
public:
SNBiSummaryScore ()
{
m_iAtt = DMM_UNSPECIFIED;
m_lVal = INT_VALUE_MISSING;
m_dblMean = 0;
m_dblStdDev = 0;
m_iPredAtt = DMM_UNSPECIFIED;
m_lClass = INT_VALUE_MISSING;
m_dblProb = 0.;
}
public:
149
DMM_SNaiveBayes()
{
m_cCase = 0; // must be initialized with zero instead of INT_VALUE_MISSING to
support incremental update;
ATLASSERT(m_vTree.size()==0);
}
~DMM_SNaiveBayes()
{
}
BOOL ResizeIndexVectors (
IATT & out_cPredAtt,
vector<SNBiTree> & out_vTree,
vector<ULONG> & out_vPredAttNumber); // vector of attributes numbers of
predictive attributes
BOOL AssembleNodeIDs (
IATT cPredAtt,
vector<SNBiTree> & out_vTree,
vector<SNBiNodeData> & out_vNode);
BOOL CountAttributeStatistics (
IATT cPredAtt,
LONG & out_cCase,
vector<SNBiTree> & out_vTree,
vector<SNBiNodeData> & out_vNode);
BOOL ComputeMissingCounts (
IATT cPredAtt,
vector<SNBiTree> & out_vTree,
vector<SNBiNodeData> & out_vNode);
BOOL ComputeSumCounts (
IATT cPredAtt,
LONG cCase,
vector<SNBiTree> & out_vTree,
vector<SNBiNodeData> & out_vNode);
BOOL ComputeAttNodeCounts (
IATT cPredAtt,
vector<SNBiTree> & out_vTree,
vector<SNBiNodeData> & out_vNode);
BOOL DoInsertCases (
BOOL bIncremental);
void DoPredict (
ULONG in_cAttVal,
DMATTVALUE in_rgAttVal[],
BOOL in_fContinuousHistograms,
SPM_Predictions& in_preds);
ULONG GetContinuousAttributeStateCount (
void);
IATT GetiAttNodeID (
ULONG in_ulNodeID);
IATT GetiPredAttNodeID (
ULONG in_ulNodeID);
STDMETHOD(GetNavigator) (
ULONG in_iNodeStart,
IDAGNavigation ** ppidagnav);
STDMETHOD(GetNodeProperties) (
ULONG in_ulNodeID,
DBPROPSET* pPropertySet);
STDMETHOD(ValidateNodeID) (
ULONG in_ulNodeID);
150
STDMETHOD(NodeSupportsPropertySet) (
ULONG in_ulNodeID,
GUID* guidSet,
boolean* pfSupported);
STDMETHOD(GetNodeUniqueName) (
ULONG in_ulNodeID,
BSTR* pbstrUniqueName);
STDMETHOD(GetNodeIDFromUniqueName) (
BSTR bstrUniqueName,
ULONG* pulNodeID);
STDMETHOD(Load) (
IDMPersistenceReader* piReader);
STDMETHOD(Save) (
IDMPersistenceWriter* piWriter);
protected:
void GetModelTreeName (
ULONG in_ulNodeID,
_bstr_t& out_bstrCaption);
void GetCaption (
ULONG in_ulNodeID,
_bstr_t& out_bstrCaption);
void CalcNodeSummary (
ULONG in_ulNodeID,
LONG in_cMaxCharAttrs,
priority_queue<SNBiSummaryScore>& out_pq);
void GetDescription (
ULONG in_ulNodeID,
_bstr_t& out_bstrDescription);
void GetMarginalRule (
ULONG in_ulNodeID,
_bstr_t& out_bstrRule);
void GetRule (
ULONG in_ulNodeID,
_bstr_t& out_bstrRule);
DOUBLE GetProbability (
ULONG in_ulNodeID);
DOUBLE GetMarginalProbability (
ULONG in_ulNodeID);
DOUBLE GetSupport (
ULONG in_ulNodeID);
public:
LONG m_cCase; // count of all cases
IATT m_cPredAtt; // count of predictive attributes
vector<SNBiNodeData> m_vNode; // vector of NodeData
vector<SNBiTree> m_vTree; // vector of trees of predictive attributes
vector<ULONG> m_vPredAttNumber; // vector of attributes numbers of predictive
attributes
};
#endif // __SNaiveBayes_HPP_
151
Apêndice D. Parâmetros do Classificador MSDT
D.1 COMPLEXITY_PENALTY
Este parâmetro é um número real que pode variar entre 0 e 1 (exclusive), que
atua como um restringente ao crescimento da árvore. A aplicação dele é realizada
em cada divisão adicional da árvore. O valor de 0 significa nenhuma penalidade,
enquanto que o valor próximo de 1 (já que 1 fica fora do intervalo permitido) significa
penalidade máxima e crescimento mínimo da árvore. A aplicação desta penalidade
limita a profundidade e a complexidade das árvores de aprendizado, o que evita
desajustes. Entretanto o uso de valores elevados de penalidade prejudica a
capacidade preditiva do modelo. O efeito deste parâmetro é dependente de cada
modelo, assim experimentos e observações devem ser realizados para obter o melhor
resultado com cada modelo de DM. O valor padrão é baseado no número de
atributos de dados para um dado modelo: para 1 a 9 atributos, o valor é 0,5; para 10
até 99 atributos, o valor é 0,9; para 100 ou mais atributos o valor adotado é 0,99.
D.2 MINIMUM_LEAF_CASES
D.3 SCORE_METHOD
152
2. Ortogonal: método baseado na ortogonalidade da distribuição de estados no
classificador. Este método produz somente divisões binárias resultando em
árvores de grande profundidade;
3. Bayesiano com K2: baseado no escore Bayesiano com K2 a priori;
4. Bayesiano Dirichlet Equivalente com Uniforme a priori: método padrão
(CHICKERING, GEIGER & HECKERMAN, 1994).
D.4 SPLIT_METHOD
153
Apêndice E. Detalhes dos Experimentos Computacionais
154
processamento) de dados. esta conexões de dados podem ser de arquivos texto,
dados do MSSQL, arquivos do Microsoft Access®, entre outros. As tarefas podem ser
para transferência de dados da Internet, transformação de dados, execução de
processos externos, execução de comandos SQL, processamento de tarefas de DM,
execução de tarefas de predição de DM e execução de outros utilitários DTS, entre
outras (MICROSOFT, 20001). Os utilitários DTS podem ser executados no ambiente do
gerenciador do MSSQL ou isoladamente através de comandos diretos ou incluídos em
arquivos de comandos. Estes utilitários podem ainda ser programados para ser
executados em horários pré-determinados uma única vez ou em intervalos regulares.
A Figura E.1 mostra a tela do editor de utilitários DTS contendo os objetos
programáveis utilizados para a importação de dados do experimento de Previsão do
Tempo. Esta figura ilustra claramente o fluxo de processamento utilizado para executar
a tarefa, bem como todos os objetos necessários, que serão descritos no item E.3.2.
155
existente no repositório de dados da Universidade da Califórnia em Irvine (BLAKE &
MERZ, 1998).
156
Figura E.5. Waveform – Primeiros 3 casos da classe 0
157
Figura E.7. Waveform – Primeiros 3 casos da classe 2
E.1, sendo que os números randômicos foram gerados pelo utilitário probdist de
PERLMAN (1986). Deve ser observado que, apesar de existir uma versão DOS
executável deste utilitário, este deve ser compilado novamente para ficar compatível
com o ambiente onde será utilizado.
/*=====================================================================
David Aha
August 1988
Creates Waveform domain data
Usage: create-Waveform number num-attributes
See CART book, page 49 for details
This is for the 21-attribute problem.
#define NUMBER_OF_ARGS 3
#define NUMBER_OF_ATTRIBUTES 21
#define NUMBER_OF_CLASSES 3
void initialize();
void execute();
158
/*==== Inputs ==== */
int num_instances;
unsigned seed;
int main(argc,argv)
int argc;
char *argv[];
{
if (argc != NUMBER_OF_ARGS)
{
printf("Usage: num-instances seed\n");
return(0);
}
num_instances = atoi(argv[1]);
seed = atoi(argv[2]);
initialize();
execute();
return (1);
}
void initialize()
{
int i,j;
char command[100];
srand(seed);
159
j++;
}
/*==== Create the required random values ====*/
sprintf(command,"probdist -s %u ran z %d > g:\\temp\\randnum.txt\n",
seed,num_instances*NUMBER_OF_ATTRIBUTES);
system(command);
}
void execute()
{
int num_instance, num_attribute;
int Waveform_type, choice[2];
FILE *fopen(), *fp;
float random_attribute_value, multiplier[2];
char line[100];
float val[40];
fp = fopen("g:\\temp\\randnum.txt","r");
for(num_instance=0; num_instance<num_instances; num_instance++)
{ /*==== Set up class type ====*/
Waveform_type = (rand() % 3);
switch (Waveform_type)
{
case 0: choice[0] = 0; choice[1] = 1; break;
case 1: choice[0] = 0; choice[1] = 2; break;
case 2: choice[0] = 1; choice[1] = 2; break;
}
As sementes para geração dos números randômicos utilizadas foram 3, 50, 100,
1.000 e 10.000, para gerar respectivamente os 300, 5.000, 10.000, 100.000 e 1.000.000
casos utilizados para treinamento.
160
E.2.2 Criação do Banco de Dados
O banco de dados com todos os objetos pertinentes, tais como tabelas, vistas e
procedimentos armazenados foi criado através de um script mostrado pela Listagem
E.2.
USE master
GO
USE Waveform
GO
161
CREATE PROC Create_View_Data_Error @algorithm_name varchar(80),
@data_name varchar(80) AS
EXEC (
'CREATE VIEW ' + @algorithm_name + '_' + @data_name + '_Errors AS ' +
'SELECT ' + @data_name + '.NumReg, ' + @data_name + '.Class, ' +
@algorithm_name + '_' + @data_name +
'_Results.Class AS ClassResult ' +
'FROM ' + @data_name + ' INNER JOIN ' + @algorithm_name + '_' +
@data_name + '_Results ' +
'ON ' + @data_name + '.NumReg = ' + @algorithm_name + '_' +
@data_name + '_Results.T1_NumReg AND ' +
'CAST(' + @data_name + '.Class AS varchar(1)) <> ' +
'CAST(' + @algorithm_name + '_' + @data_name +
'_Results.Class AS varchar(1))')
EXEC (
'CREATE VIEW ' + @algorithm_name + '_' + @data_name +
'_Errors_Count AS ' +
'SELECT ''' + @algorithm_name + ''' AS Algorithm, COUNT(*) AS ' +
@data_name + '_Errors FROM ' +
@algorithm_name + '_' + @data_name + '_Errors')
RETURN
GO
162
'_Test_Errors_Count.Algorithm ' +
'INNER JOIN ProcessingTimes ON Train_Count.Algorithm = ' +
'ProcessingTimes.Algorithm')
RETURN
GO
163
GO
EXEC Create_Data_Views
GO
164
[Mean_Test_Accuracy (%)],
SUM(Total_Time) AS [Total_Time (s)]
FROM Results
GROUP BY Algorithm
GO
165
O primeiro procedimento do experimento foi realizado para cinco grupos de
dados, sendo que o processamento completo para cada conjunto de dados foi
executado através do utilitário DTS mostrado pela Figura E.8. Esta figura mostra todos
os objetos programáveis que compõem o utilitário, sendo que os mais importantes
serão detalhados. Deve ser observada a existência de duas tarefas de execução de
para arquivos texto, denominados Train Data, que permite a leitura dos dados de
treinamento e Test Data, que possibilita a leitura dos dados de teste . Esta figura mostra
Function Main()
DTSGlobalVariables("NumReg").Value = 0
Main = DTSTaskExecResult_Success
End Function
166
No passo seguinte os dados de treinamento do arquivo texto são armazenados
no MSSQL através de uma tarefa de transformação de dados definida por um outro
script Visual Basic® mostrado pela Listagem E.4. Uma tarefa semelhante se encarrega
de transferir os dados de teste.
Function Main()
dim i, NumReg
167
Figura E.11. Waveform – Processamento da validação cruzada
são repetidas N vezes, com N=10, sendo o controle desta repetição efetuado pela
Function Main()
If DTSGlobalVariables("active_block").Value <
DTSGlobalVariables("num_blocks").Value Then
DTSGlobalVariables("active_block").Value =
DTSGlobalVariables("active_block").Value + 1
Set oPkg = DTSGlobalVariables.Parent
'Set previous step status to waiting.
oPkg.Steps("DTSStep_DTSExecuteSQLTask_1").ExecutionStatus =
DTSStepExecStat_Waiting
End If
Main = DTSTaskExecResult_Success
End Function
168
semelhantes. As repetições extensas de itens nestes comandos são omitidas e
representadas por três pontos consecutivos (...).
Classificador Comando
SNBi CREATE MINING MODEL [Waveform_SNBi] ([NumReg] LONG KEY, [X1] DOUBLE
CONTINUOUS, [X2] DOUBLE CONTINUOUS, ..., [X21] DOUBLE CONTINUOUS,
[Class] TEXT DISCRETE PREDICT_ONLY) USING Simple_Naive_Bayes
SNBid CREATE MINING MODEL [Waveform_SNBid] ([NumReg] LONG KEY, [X1] DOUBLE
DISCRETIZED, [X2] DOUBLE DISCRETIZED, ..., [X21] DOUBLE DISCRETIZED,
[Class] TEXT DISCRETE PREDICT_ONLY) USING Simple_Naive_Bayes
MSDT1 CREATE MINING MODEL [Waveform_MSDT1] ([NumReg] LONG KEY, [X1] DOUBLE
CONTINUOUS, [X2] DOUBLE CONTINUOUS, ..., [X21] DOUBLE CONTINUOUS,
[Class] TEXT DISCRETE PREDICT_ONLY) USING Microsoft_Decision_Trees
(COMPLEXITY_PENALTY = 0.9, MINIMUM_LEAF_CASES = 10, SCORE_METHOD = 4,
SPLIT_METHOD = 3)
MSDT2 CREATE MINING MODEL [Waveform_MSDT2] ([NumReg] LONG KEY, [X1] DOUBLE
CONTINUOUS, [X2] DOUBLE CONTINUOUS, ..., [X21] DOUBLE CONTINUOUS,
[Class] TEXT DISCRETE PREDICT_ONLY) USING Microsoft_Decision_Trees
(COMPLEXITY_PENALTY=0, MINIMUM_LEAF_CASES=1, SCORE_METHOD=4,
SPLIT_METHOD=2)
MSDT2d CREATE MINING MODEL [Waveform_MSDT2d] ([NumReg] LONG KEY, [X1] DOUBLE
DISCRETIZED, [X2] DOUBLE DISCRETIZED, ..., [X21] DOUBLE DISCRETIZED,
[Class] TEXT DISCRETE PREDICT_ONLY) USING Microsoft_Decision_Trees
(COMPLEXITY_PENALTY=0, MINIMUM_LEAF_CASES=1, SCORE_METHOD=4,
SPLIT_METHOD=2)
Listagem E.6. Waveform - Comando SQL DM para predição dos dados de teste, classificador SNBi
169
O atributo de predição do estado atual do tempo (Class) poderia assumir
A Listagem E.7 mostra o script gerador do banco de dados com todos os objetos
pertinentes, tais como tabelas, vistas e procedimentos armazenados.
170
Listagem E.7. Meteo - Script gerador do banco de dados
USE master
GO
171
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'Test')
DROP VIEW Test
EXEC ('CREATE VIEW Test AS SELECT * FROM Meteo ' +
'WHERE (Block = ' + @active_block + ')')
RETURN
GO
172
'CAST(Test_Count.Test_Cases AS float) * 100. ' +
'AS decimal(10, 2)) AS Test_Accuracy, ' +
'(ProcessingTimes.Train_Time + ProcessingTimes.Train_Pred_Time' +
' + ProcessingTimes.Test_Pred_Time) AS Total_Time ' +
'FROM Train_Count ' +
'INNER JOIN Test_Count ON Train_Count.Algorithm = ' +
'Test_Count.Algorithm ' +
'INNER JOIN ' + @algorithm_name +
'_Train_Errors_Count ON Train_Count.Algorithm = ' +
@algorithm_name + '_Train_Errors_Count.Algorithm ' +
'INNER JOIN ' + @algorithm_name +
'_Test_Errors_Count ON Train_Count.Algorithm = ' +
@algorithm_name + '_Test_Errors_Count.Algorithm ' +
'INNER JOIN ProcessingTimes ON Train_Count.Algorithm = ' +
'ProcessingTimes.Algorithm')
RETURN
GO
173
''' AND Block = ' + @active_block)
EXEC (
'UPDATE ProcessingTimes SET Test_Pred_Time = ' +
'datediff (second, Test_Pred_Start_Time, Test_Pred_End_Time) ' +
'WHERE Algorithm = ''' + @algorithm_name +
''' AND Block = ' + @active_block)
RETURN
GO
EXEC create_data_views
174
GO
175
SELECT TOP 100 PERCENT Attribute_Name, Attribute_Count
FROM Attribute_Statistics ORDER BY Attribute_Count, Attribute_Name
GO
Assim como o experimento anterior, este também possui utilitários DTS para o
processamento de suas tarefas.
176
O primeiro procedimento deste experimento utiliza a massa de dados separada
em duas partes, sendo que uma foi utilizada para treinamento e outra para testar o
modelo gerado por este treinamento. A Figura E.13 mostra o fluxo de processamento
com os objetos programáveis utilizados.
A Figura E.14 ilustra os objetos componentes do processamento de importação
All Data, que permite a leitura dos dados texto originais; Train Data, que permite a
gravação dos dados texto dos dados de treinamento e Test Data que possibilita a
gravação dos dados texto dos dados de teste. Estes dados no formato texto são
utilizados pelo classificador C45.
Inicialmente os dados pré-existentes no MSSQL são removidos através de um
comando SQL contido na tarefa de execução de comandos SQL:
Create_Test_Data, mostrado na Listagem E.7 e invocado pela tarefa Create Test Data.
Function Main()
dim NumReg
NumReg = CLng( DTSGlobalVariables("NumReg").Value)
NumReg = NumReg + 1
DTSGlobalVariables("NumReg").Value = NumReg
DTSDestination("NumReg") = NumReg
DTSDestination("Date_Year") = DTSSource("Col001")
DTSDestination("Date_Month") = DTSSource("Col002")
DTSDestination("Date_Day") = DTSSource("Col003")
DTSDestination("Date_Hour") = DTSSource("Col004")
DTSDestination("Tot_Cloud") = DTSSource("Col005")
DTSDestination("Wind_Dir") = DTSSource("Col006")
DTSDestination("Wind_Vel") = DTSSource("Col007")
DTSDestination("Hor_Vis") = DTSSource("Col008")
DTSDestination("Cloud1_Qty") = DTSSource("Col009")
DTSDestination("Cloud1_Typ") = DTSSource("Col010")
DTSDestination("Cloud1_Alt") = DTSSource("Col011")
DTSDestination("Cloud2_Qty") = DTSSource("Col012")
DTSDestination("Cloud2_Typ") = DTSSource("Col013")
177
DTSDestination("Cloud2_Alt") = DTSSource("Col014")
DTSDestination("Altimeter") = DTSSource("Col015")
DTSDestination("Dew_Point") = DTSSource("Col016")
DTSDestination("Dry_Temp") = DTSSource("Col017")
DTSDestination("Moist_Temp") = DTSSource("Col018")
DTSDestination("Class") = DTSSource("Col019")
DTSDestination("Train") = 1 ' train set
DTSDestination("Block") = 1
Main = DTSTransformStat_OK
End Function
Classificador Comando
SNBi1 CREATE MINING MODEL [Meteo_SNBi1] ([NumReg] LONG KEY, [Date_Year] LONG
CONTINUOUS, [Date_Month] LONG CONTINUOUS, [Date_Day] LONG CONTINUOUS,
[Date_Hour] LONG CONTINUOUS, [Tot_Cloud] LONG CONTINUOUS, [Wind_Dir]
LONG CONTINUOUS, [Wind_Vel] LONG CONTINUOUS, [Hor_Vis] LONG CONTINUOUS,
[Cloud1_Qty] LONG CONTINUOUS, [Cloud1_Typ] LONG CONTINUOUS, [Cloud1_Alt]
LONG CONTINUOUS, [Cloud2_Qty] LONG CONTINUOUS, [Cloud2_Typ] LONG
CONTINUOUS, [Cloud2_Alt] LONG CONTINUOUS, [Altimeter] LONG CONTINUOUS,
[Dew_Point] LONG CONTINUOUS, [Dry_Temp] LONG CONTINUOUS, [Moist_Temp]
LONG CONTINUOUS, [Class] TEXT DISCRETE PREDICT_ONLY) USING
Simple_Naive_Bayes
178
Classificador Comando
SNBi2 CREATE MINING MODEL [Meteo_SNBi2] ([NumReg] LONG KEY, [Date_Year] LONG
CONTINUOUS, [Date_Month] LONG DISCRETE, [Date_Day] LONG DISCRETE,
[Date_Hour] LONG DISCRETE, [Tot_Cloud] LONG DISCRETE, [Wind_Dir] LONG
DISCRETE, [Wind_Vel] LONG DISCRETE, [Hor_Vis] LONG CONTINUOUS,
[Cloud1_Qty] LONG DISCRETE, [Cloud1_Typ] LONG DISCRETE, [Cloud1_Alt]
LONG CONTINUOUS, [Cloud2_Qty] LONG DISCRETE, [Cloud2_Typ] LONG DISCRETE,
[Cloud2_Alt] LONG CONTINUOUS, [Altimeter] LONG CONTINUOUS, [Dew_Point]
LONG DISCRETE, [Dry_Temp] LONG CONTINUOUS, [Moist_Temp] LONG CONTINUOUS,
[Class] TEXT DISCRETE PREDICT_ONLY) USING Simple_Naive_Bayes
MSDT1 CREATE MINING MODEL [Meteo_MSDT1] ([NumReg] LONG KEY , [Date_Year] LONG
CONTINUOUS, [Date_Month] LONG CONTINUOUS, [Date_Day] LONG CONTINUOUS,
[Date_Hour] LONG CONTINUOUS, [Tot_Cloud] LONG CONTINUOUS, [Wind_Dir]
LONG CONTINUOUS, [Wind_Vel] LONG CONTINUOUS, [Hor_Vis] LONG CONTINUOUS,
[Cloud1_Qty] LONG CONTINUOUS, [Cloud1_Typ] LONG CONTINUOUS, [Cloud1_Alt]
LONG CONTINUOUS, [Cloud2_Qty] LONG CONTINUOUS, [Cloud2_Typ] LONG
CONTINUOUS, [Cloud2_Alt] LONG CONTINUOUS, [Altimeter] LONG CONTINUOUS,
[Dew_Point] LONG CONTINUOUS, [Dry_Temp] LONG CONTINUOUS, [Moist_Temp]
LONG CONTINUOUS, [Class] TEXT DISCRETE PREDICT_ONLY) USING
Microsoft_Decision_Trees
MSDT2 CREATE MINING MODEL [Meteo_MSDT2] ([NumReg] LONG KEY, [Date_Year] LONG
CONTINUOUS, [Date_Month] LONG DISCRETE, [Date_Day] LONG DISCRETE,
[Date_Hour] LONG DISCRETE, [Tot_Cloud] LONG DISCRETE, [Wind_Dir] LONG
DISCRETE, [Wind_Vel] LONG DISCRETE, [Hor_Vis] LONG CONTINUOUS,
[Cloud1_Qty] LONG DISCRETE, [Cloud1_Typ] LONG DISCRETE, [Cloud1_Alt]
LONG CONTINUOUS, [Cloud2_Qty] LONG DISCRETE, [Cloud2_Typ] LONG
DISCRETE, [Cloud2_Alt] LONG CONTINUOUS, [Altimeter] LONG CONTINUOUS,
[Dew_Point] LONG DISCRETE, [Dry_Temp] LONG CONTINUOUS, [Moist_Temp] LONG
CONTINUOUS, [Class] TEXT DISCRETE PREDICT_ONLY) USING
Microsoft_Decision_Trees
Listagem E.9. Meteo - Comando SQL DM para predição dos dados de teste, classificador SNBi1
179
E.4 Insurance - Dados de Seguro de Vida
adicionais desta apólice. Uma apólice de seguro pode ter vários componentes de
tarifa (por exemplo a parte principal mais um componente por assegurar o caso em
que o segurado fica inválido), cada um dos quais registrados na tabela tfkomp que
também esta relacionada com a tabela tfrol. As tabelas prod, que relaciona produtos
e lvtarf, que relaciona tarifas não foram distribuídas. As tabelas taska e taskb, contêm,
180
Tabela E.4. Insurance - Descrição dos atributos
181
Nome Nome Tipo/ Valor Mínimo/ Descrição
prep. original Tipo no Valor Máximo/
Tabela Modelo de Número Valores
original DM12 Distintos
(1 prep., Dados Dados
2 originais)
prep. originais
182
Nome Nome Tipo/ Valor Mínimo/ Descrição
prep. original Tipo no Valor Máximo/
Tabela Modelo de Número Valores
original DM12 Distintos
(1 prep., Dados Dados
2 originais)
prep. originais
183
Nome Nome Tipo/ Valor Mínimo/ Descrição
prep. original Tipo no Valor Máximo/
Tabela Modelo de Número Valores
original DM12 Distintos
(1 prep., Dados Dados
2 originais)
prep. originais
184
Nome Nome Tipo/ Valor Mínimo/ Descrição
prep. original Tipo no Valor Máximo/
Tabela Modelo de Número Valores
original DM12 Distintos
(1 prep., Dados Dados
2 originais)
prep. originais
185
Nome Nome Tipo/ Valor Mínimo/ Descrição
prep. original Tipo no Valor Máximo/
Tabela Modelo de Número Valores
original DM12 Distintos
(1 prep., Dados Dados
2 originais)
prep. originais
186
Nome Nome Tipo/ Valor Mínimo/ Descrição
prep. original Tipo no Valor Máximo/
Tabela Modelo de Número Valores
original DM12 Distintos
(1 prep., Dados Dados
2 originais)
prep. originais
taska1 que foi utilizada para obter o conjunto de dados não preparados a partir dos
relacionamentos originais.
USE master
GO
USE Insurance
GO
187
UPDATE Insurance SET Block = @Block WHERE CURRENT OF Block_cursor
FETCH NEXT FROM Block_cursor INTO @Block
END
CLOSE Block_cursor
DEALLOCATE Block_cursor
RETURN
GO
188
'_Results ' +
'ON ' + @data_name + '.NumReg = ' + @algorithm_name + '_' +
@data_name + '_Results.T1_NumReg AND ' +
'CAST(' + @data_name + '.Class AS varchar(1)) <> ' +
'CAST(' + @algorithm_name + '_' + @data_name +
'_Results.Class AS varchar(1))')
EXEC (
'CREATE VIEW ' + @algorithm_name + '_' + @data_name +
'_Errors_Count AS ' +
'SELECT ''' + @algorithm_name + ''' AS Algorithm, COUNT(*) AS ' +
@data_name +
'_Errors FROM ' + @algorithm_name + '_' + @data_name + '_Errors')
RETURN
GO
189
INSERT ProcessingTimes (Block, Algorithm, Train_Start_Time) VALUES
(@active_block, @algorithm_name, GetDate())
RETURN
GO
190
A21 int NULL, A22 int NULL, A23 int NULL, A24 int NULL, A25 int NULL,
A26 int NULL, A27 int NULL, A28 int NULL, A29 int NULL, A30 int NULL,
A31 int NULL, A32 int NULL, A33 int NULL, A34 int NULL, A35 int NULL,
A36 int NULL, A37 int NULL, A38 int NULL, A39 int NULL, A40 int NULL,
A41 int NULL, A42 int NULL, A43 int NULL, A44 int NULL, A45 int NULL,
A46 int NULL, A47 int NULL, A48 int NULL, A49 int NULL, A50 int NULL,
A51 int NULL, A52 int NULL, A53 int NULL,
A54 float NULL, A55 float NULL,
A56 int NULL, A57 int NULL, A58 int NULL, A59 int NULL,
A60 float NULL,
A61 int NULL,
A62 float NULL,
A63 int NULL,
Class varchar (1) NULL, Train bit NOT NULL, Block int NOT NULL
) ON [PRIMARY]
GO
EXEC create_data_views
GO
191
EXEC create_views_tables 'MSDT2'
GO
USE master
GO
USE sisyphus
GO
192
OPEN column_cursor
FETCH NEXT FROM column_cursor INTO @Attribute_Name
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC (
'INSERT INTO Attribute_Statistics SELECT ''' +
@Attribute_Name + ''' AS Attribute_Name, ' +
'MIN(' + @Attribute_Name + ') AS Att_Min, ' +
'MAX(' + @Attribute_Name + ') AS Att_Max, ' +
'COUNT(*) AS Attribute_Count ' +
'FROM (SELECT ' + @Attribute_Name +
' FROM ' + @table_name + ' GROUP BY ' + @Attribute_Name +
') DERIVEDTBL')
FETCH NEXT FROM column_cursor INTO @Attribute_Name
END
CLOSE column_cursor
DEALLOCATE column_cursor
RETURN
GO
193
EXEC ('CREATE VIEW Test AS SELECT * FROM sisyphus WHERE (Train = 0)')
RETURN
GO
194
'_Results ' +
'ON ' + @data_name + '.NumReg = ' + @algorithm_name + '_' +
@data_name + '_Results.T1_NumReg AND ' +
'CAST(' + @data_name + '.Class AS varchar(1)) <> ' +
'CAST(' + @algorithm_name + '_' + @data_name +
'_Results.Class AS varchar(1))')
EXEC (
'CREATE VIEW ' + @algorithm_name + '_' + @data_name +
'_Errors_Count AS ' +
'SELECT ''' + @algorithm_name + ''' AS Algorithm, COUNT(*) AS ' +
@data_name +
'_Errors FROM ' + @algorithm_name + '_' + @data_name + '_Errors')
RETURN
GO
195
INSERT ProcessingTimes (Block, Algorithm, Train_Start_Time) VALUES
(@active_block, @algorithm_name, GetDate())
RETURN
GO
196
(ptid) REFERENCES part (ptid)
) ON [PRIMARY]
GO
197
vvaendat smallint NULL, vvabvb int NULL, vvabga int NULL,
vvstifcd tinyint NULL, vvvorscd tinyint NULL, vvbvgcd tinyint NULL,
vveucd tinyint NULL
) ON [PRIMARY]
GO
198
FROM taska
GO
199
tkbeg AS Expr68, tkleist AS Expr69, tkinkprl AS Expr70,
tkuebvwsysp AS Expr71, tkuebvwsysl AS Expr72, tkprfin AS Expr73,
tkdyncd AS Expr74, tkrizucd AS Expr75, tktodleista AS Expr76,
tkerlleista AS Expr77, tkeuleista AS Expr78, tkunfleista AS Expr79,
class AS Expr80, Train
FROM sisyphus
GO
EXEC Create_Table_Char
GO
EXEC create_data_views
GO
200
CREATE VIEW Class_Block_Statistics AS
SELECT TOP 100 PERCENT Class, COUNT(Class) AS Count_Classes, Block
FROM sisyphus GROUP BY Class, Block ORDER BY Block, Class
GO
201
Figura E.16. Insurance – DTS – Dados Originais - Importação de dados
O utilitário de montagem dos dados, através do objeto Create Test Data executa
202
utilizando a consulta taska1 e Create_Test_Data, que separa os dados de treinamento
Tabela E.5. Insurance - dados preparados - Comandos SQL DM para criação do modelo de DM
Classificador Comando
SNBi CREATE MINING MODEL [Insurance_SNBi] ([NumReg] LONG KEY, [A1] LONG
CONTINUOUS, [A2] LONG DISCRETE, [A3] LONG CONTINUOUS, [A4] LONG
DISCRETE, [A5] LONG DISCRETE, [A6] LONG DISCRETE, [A7] LONG CONTINUOUS,
[A8] LONG CONTINUOUS, [A9] LONG DISCRETE, [A10] LONG CONTINUOUS, [A11]
LONG CONTINUOUS, [A12] LONG DISCRETE, [A13] LONG DISCRETE, [A14] LONG
DISCRETE, [A15] LONG DISCRETE, [A16] LONG CONTINUOUS, [A17] LONG
CONTINUOUS, [A18] LONG DISCRETE, [A19] LONG DISCRETE, [A20] LONG
CONTINUOUS, [A21] LONG CONTINUOUS, [A22] LONG CONTINUOUS, [A23] LONG
CONTINUOUS, [A24] LONG DISCRETE, [A25] LONG DISCRETE, [A26] LONG
DISCRETE, [A27] LONG DISCRETE, [A28] LONG DISCRETE, [A29] LONG DISCRETE,
[A30] LONG DISCRETE, [A31] LONG DISCRETE, [A32] LONG DISCRETE, [A33]
LONG DISCRETE, [A34] LONG DISCRETE, [A35] LONG DISCRETE, [A36] LONG
DISCRETE, [A37] LONG DISCRETE, [A38] LONG DISCRETE, [A39] LONG DISCRETE,
[A40] LONG DISCRETE, [A41] LONG CONTINUOUS, [A42] LONG DISCRETE, [A43]
LONG DISCRETE, [A44] LONG DISCRETE, [A45] LONG DISCRETE, [A46] LONG
DISCRETE, [A47] LONG CONTINUOUS, [A48] LONG DISCRETE, [A49] LONG
DISCRETE, [A50] LONG DISCRETE, [A51] LONG DISCRETE, [A52] LONG DISCRETE,
[A53] LONG CONTINUOUS, [A54] DOUBLE CONTINUOUS, [A55] DOUBLE CONTINUOUS,
[A56] LONG CONTINUOUS, [A57] LONG DISCRETE, [A58] LONG DISCRETE, [A59]
LONG DISCRETE, [A60] DOUBLE CONTINUOUS, [A61] LONG CONTINUOUS, [A62]
DOUBLE CONTINUOUS, [A63] LONG CONTINUOUS, [Class] TEXT DISCRETE
PREDICT_ONLY) USING Simple_Naive_Bayes
203
Listagem E.12. Insurance - dados preparados - Comando SQL DM para predição dos dados de teste,
classificador SNBi
Tabela E.6. Insurance - dados originais - Comandos SQL DM para criação do modelo de DM
Classificador Comando
SNBi CREATE MINING MODEL [sisyphus_SNBi] ([NumReg] LONG KEY, [epberuf] LONG
CONTINUOUS, [eperweart] LONG DISCRETE, [epgebudat] LONG CONTINUOUS,
[epsta] LONG DISCRETE, [eplnamecd] LONG DISCRETE, [epsexcd] LONG
DISCRETE, [epzivstd] LONG DISCRETE, [attr2] LONG CONTINUOUS, [attr3]
LONG CONTINUOUS, [attr4] LONG DISCRETE, [attr5] LONG CONTINUOUS, [attr6]
LONG CONTINUOUS, [attr7] LONG DISCRETE, [attr8] LONG DISCRETE, [attr9]
TEXT DISCRETE, [attr10] LONG DISCRETE, [attr11] LONG DISCRETE, [attr12]
LONG DISCRETE, [attr13] LONG DISCRETE, [attr14] LONG DISCRETE, [attr15]
LONG DISCRETE, [attr16] LONG CONTINUOUS, [attr17] LONG CONTINUOUS,
[attr18] LONG CONTINUOUS, [attr19] LONG DISCRETE, [attr20] LONG
CONTINUOUS, [attr21] LONG CONTINUOUS, [attr22] LONG DISCRETE, [attr23]
LONG CONTINUOUS, [attr24] LONG CONTINUOUS, [attr25] LONG CONTINUOUS,
[attr26] LONG CONTINUOUS, [attr27] LONG DISCRETE, [attr28] TEXT
DISCRETE, [attr29] TEXT DISCRETE, [attr30] LONG DISCRETE, [attr31] LONG
DISCRETE, [attr32] LONG DISCRETE, [attr33] LONG DISCRETE, [attr34] LONG
DISCRETE, [attr35] LONG DISCRETE, [attr36] LONG DISCRETE, [attr37] LONG
DISCRETE, [attr38] LONG DISCRETE, [attr39] LONG DISCRETE, [attr40] LONG
DISCRETE, [attr41] LONG DISCRETE, [attr42] LONG DISCRETE, [attr43] LONG
DISCRETE, [prtyp] LONG DISCRETE, [prtypnr] LONG DISCRETE, [trteceinal]
LONG CONTINUOUS, [truntcd] LONG DISCRETE, [trklauscd] LONG DISCRETE,
[trricd] LONG DISCRETE, [vvstacd] LONG DISCRETE, [vvinkzwei] LONG
DISCRETE, [vvwae] LONG DISCRETE, [vvversart] LONG DISCRETE, [vvaendart]
LONG CONTINUOUS, [vvstifcd] LONG DISCRETE, [vvvorscd] LONG DISCRETE,
[vvbvgcd] LONG DISCRETE, [vveucd] LONG DISCRETE, [tknr] LONG CONTINUOUS,
[tfid] LONG CONTINUOUS, [tkbeg] LONG CONTINUOUS, [tkleist] DOUBLE
CONTINUOUS, [tkinkprl] DOUBLE CONTINUOUS, [tkuebvwsysp] LONG CONTINUOUS,
[tkuebvwsysl] LONG CONTINUOUS, [tkprfin] LONG DISCRETE, [tkdyncd] LONG
DISCRETE, [tkrizucd] LONG DISCRETE, [tktodleista] DOUBLE CONTINUOUS,
[tkerlleista] LONG CONTINUOUS, [tkeuleista] DOUBLE CONTINUOUS,
[tkunfleista] LONG CONTINUOUS, [Class] TEXT DISCRETE PREDICT_ONLY) USING
Simple_Naive_Bayes
204
Listagem E.13. Insurance - dados originais - Comando SQL DM para predição dos dados de teste,
classificador SNBi
205
E.5 Estudo de Desempenho
criadas conforme mostra a Listagem E.14. A Tabela E.7 lista os parâmetros utilizados
neste programa para gerar os dados para os diferentes procedimentos do
experimento.
VarInpAtt Variação do Número -r1 -A200 -e0.0 -m0.0 -I0 -M0 -R5 -C10 -T1 -d25 -O1000000
de Atributos de
Dados
VarNumCases Variação do Número -r1 -A20 -e0.0 -m0.0 -I0 -M0 -R5 -C10 -T1 –d25 -O2000000
de Casos
VarStates Variação do Número -r1 -A20 -e0.0 -m0.0 -I0 -M0 -R5 -C10 -T1 -d2 -O1000000
de Estados dos -r1 -A20 -e0.0 -m0.0 -I0 -M0 -R5 -C10 -T1 -d5 -O1000000
Atributos de Dados
-r1 -A20 -e0.0 -m0.0 -I0 -M0 -R5 -C10 -T1 -d10 -O1000000
-r1 -A20 -e0.0 -m0.0 -I0 -M0 -R5 -C10 -T1 -d25 -O1000000
-r1 -A20 -e0.0 -m0.0 -I0 -M0 -R5 -C10 -T1 -d50 -O1000000
-r1 -A20 -e0.0 -m0.0 -I0 -M0 -R5 -C10 -T1 -d75 -O1000000
-r1 -A20 -e0.0 -m0.0 -I0 -M0 -R5 -C10 -T1 –d100 -O1000000
VarPredAtt Variação do Número -r1 -A39 -e0.0 -m0.0 -I0 -M0 -R25 -C40 -T1 -d25 -O1000000
206
de Atributos de
Predição
As Listagens E.15, E.16, E.17 e E.18 mostram os scripts geradores dos bancos de
dados com todos os objetos pertinentes, tais como tabelas, vistas e procedimentos
armazenados, para os quatro procedimentos deste experimento.
USE master
GO
USE VarInpAtt
GO
207
EXEC Create_Table
GO
EXEC Create_Data_views
GO
USE master
GO
USE VarNumCases
GO
208
WHERE Algorithm = @algorithm_name
RETURN
GO
209
Train_Start_Time datetime NULL, Train_End_Time datetime NULL,
Train_Time float NULL,
Train_Pred_Start_Time datetime NULL, Train_Pred_End_Time datetime NULL,
Train_Pred_Time float NULL,
Model_Size int NULL
) ON [PRIMARY]
GO
EXEC Create_Table
GO
USE master
GO
USE VarStates
GO
210
WHERE TABLE_NAME = 'Train')
DROP VIEW Train
SET @table_name = 'VarStates' + CAST (@num_states as varchar (10))
EXEC ('CREATE VIEW Train AS SELECT * FROM ' + @table_name)
RETURN
GO
EXEC Create_Table 2
GO
EXEC Create_Table 5
GO
EXEC Create_Table 10
GO
EXEC Create_Table 25
GO
EXEC Create_Table 50
GO
EXEC Create_Table 75
GO
EXEC Create_Train_View 2
GO
211
CREATE VIEW Train_Count AS
SELECT COUNT(*) AS Train_Cases FROM Train
GO
USE master
GO
USE VarPredAtt
GO
EXEC Create_Table
GO
EXEC Create_Train_View
212
GO
Este experimento possui uma série de utilitários DTS que na sua maioria são
semelhantes aos descritos anteriormente, a não ser por alguns que possuem
características relevantes e que serão reproduzidos a seguir.
Figura E.19. VarNumCases – Processamento das tarefas de predição por partes do classificador
SNBi
do Classificador SNBi. As tarefas Create Train View, Train Prediction e Inc View são
casos desejados. O script de comandos Visual Basic®, invocado pela tarefa Init View
213
repetidas a seguir, conforme mostra o código fonte da Listagem E.19. O controle desta
repetição é efetuado pela tarefa Inc View conforme mostra o script da Listagem E.20.
Este utilitário possui ainda variáveis globais definidas para permitir a sua utilização
para todas as tarefas de predição desejadas. Assim existe variáveis para o índice da
vista ativa, para o incremento do número de casos, para o número total de casos,
para o nome da tarefa sendo processada e também para o número de vistas que é
calculada pela tarefa Init View, conforme mostra o script da Listagem E.19. A Figura
Function Main()
DTSGlobalVariables("ind_view").Value = 1
DTSGlobalVariables("num_views").Value = CInt (DTSGlobalVariables("num_cases").Value
/ DTSGlobalVariables("inc_reg").Value)
if (DTSGlobalVariables("num_views").Value * DTSGlobalVariables("inc_reg").Value <
DTSGlobalVariables("num_cases").Value) then
DTSGlobalVariables("num_views").Value = DTSGlobalVariables("num_views").Value + 1
end if
Set oPkg = DTSGlobalVariables.Parent
oPkg.Steps("DTSStep_DTSExecuteSQLTask_19").ExecutionStatus =
DTSStepExecStat_Inactive
Main = DTSTaskExecResult_Success
End Function
Function Main()
Set oPkg = DTSGlobalVariables.Parent
If DTSGlobalVariables("ind_view").Value < DTSGlobalVariables("num_views").Value
Then
DTSGlobalVariables("ind_view").Value = DTSGlobalVariables("ind_view").Value + 1
oPkg.Steps("DTSStep_DTSExecuteSQLTask_11").ExecutionStatus =
DTSStepExecStat_Waiting
Else
oPkg.Steps("DTSStep_DTSExecuteSQLTask_19").ExecutionStatus =
DTSStepExecStat_Waiting
End If
Main = DTSTaskExecResult_Success
End Function
214
Figura E.20. VarNumCases – Tarefa de treinamento do classificador SNBi
Tabela E.8. VarInpAtt - Comandos SQL DM para criação do modelo de DM com 12 atributos de
dados
Classificador Comando
SNBi CREATE MINING MODEL [SNBi_12att] ([NumReg] LONG KEY, [A1] TEXT DISCRETE,
[A2] TEXT DISCRETE, ... [A12] TEXT DISCRETE, [Class] TEXT DISCRETE
PREDICT_ONLY) USING Simple_Naive_Bayes
MSDT CREATE MINING MODEL [MSDT_12att] ([NumReg] LONG KEY, [A1] TEXT DISCRETE,
[A2] TEXT DISCRETE, ... [A12] TEXT DISCRETE, [Class] TEXT DISCRETE
PREDICT_ONLY) USING Microsoft_Decision_Trees
Classificador Comando
215
SNBi CREATE MINING MODEL [SNBi_DiscAtt] ([NumReg] LONG KEY, [A1] TEXT
DISCRETE, [A2] TEXT DISCRETE, ... [A20] TEXT DISCRETE, [Class] TEXT
DISCRETE PREDICT_ONLY) USING Simple_Naive_Bayes
MSDT CREATE MINING MODEL [MSDT_DiscAtt] ([NumReg] LONG KEY, [A1] TEXT
DISCRETE, [A2] TEXT DISCRETE, ... [A20] TEXT DISCRETE, [Class] TEXT
DISCRETE PREDICT_ONLY) USING Microsoft_Decision_Trees
A Tabela E.9 mostra os comandos SQL DM utilizados para a criação dos modelos
de DM para o estudo de Variação do Número de Casos. A Listagem E.21 mostra o
comando para a tarefa de predição dos dados de teste do classificador SNBi.
A Tabela E.10 mostra os comandos SQL DM utilizados para a criação dos
modelos de DM do procedimento de Variação do Número de Estados dos Atributos
de Dados. Por outro lado a Tabela E.11 mostra os comandos SQL DM utilizados para a
criação dos modelos de DM do procedimento de Variação do Número de Atributos
de Predição para 32 atributos. Os comandos para outros números de atributos são
semelhantes. Estes dois últimos procedimentos do experimento também não possuem
tarefa de predição.
Listagem E.21. VarNumCases - Comando SQL DM para predição dos dados de teste, classificador
SNBi
Classificador Comando
SNBi CREATE MINING MODEL [VarStates_SNBi] ([Num Reg] LONG KEY, [A1] TEXT
DISCRETE, [A2] TEXT DISCRETE, ... [A20] TEXT DISCRETE, [Class] TEXT
DISCRETE PREDICT_ONLY) USING Simple_Naive_Bayes
MSDT CREATE MINING MODEL [VarStates_MSDT] ([Num Reg] LONG KEY, [A1] TEXT
DISCRETE, [A2] TEXT DISCRETE, ... [A20] TEXT DISCRETE, [Class] TEXT
DISCRETE PREDICT_ONLY) USING Microsoft_Decision_Trees
216
Tabela E.11. VarPredAtt - Comandos SQL DM para criação do modelo de DM com 32 atributos de
predição
Classificador Comando
SNBi CREATE MINING MODEL [SNBi_40att_32pred] ([Num Reg] LONG KEY, [A1] TEXT
DISCRETE, [A2] TEXT DISCRETE, ... [A8] TEXT DISCRETE, [A9] TEXT DISCRETE
PREDICT, [A10] TEXT DISCRETE PREDICT, ... [A40] TEXT DISCRETE PREDICT)
USING Simple_Naive_Bayes
MSDT CREATE MINING MODEL [MSDT _40att_32pred] ([Num Reg] LONG KEY, [A1] TEXT
DISCRETE, [A2] TEXT DISCRETE, ... [A8] TEXT DISCRETE, [A9] TEXT DISCRETE
PREDICT, [A10] TEXT DISCRETE PREDICT, ... [A40] TEXT DISCRETE PREDICT)
USING Microsoft_Decision_Trees
217
INTEGRAÇÃO DE RECURSOS DE DATA MINING COM
GERENCIADORES DE BANCOS DE DADOS RELACIONAIS
Tese de Doutorado
I t d ã
Introdução
Trabalhos Correlatos
Processo de KDD
Provedor de DM
Experimentos Computacionais
Conclusão
T b lh Futuros
Trabalhos F t
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 2
Introdução
ç
M ti ã (desenvolvimento
Motivação (d l de
d tecnologia
l de
d KDD))
A li ã das
Ampliação d áreas
á de
d aplicação
li ã
Exemplos:
Comerciais:
Científicos:
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 3
Sistema EOS
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 4
Áreas de aplicação
p ç - Comerciais
C
Comercialização:
i li ã segmentação,
t ã localização
l li ã ded consumidores,
id hábitos
hábit
de consumo
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 5
Áreas de aplicação
p ç - Científicas
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 6
Cenário
terabytes
y de dados com p
processamento paralelo
p de consultas
(usando múltiplos servidores com multiprocessadores)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 7
Conjuntura
j
Sugere
g a integração
g ç da tecnologia
g de
DM usando gerenciadores de bancos
de dados a baixo custo
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 8
Conteúdo
I t d ã
Introdução
Trabalhos Correlatos
Processo de KDD
Provedor de DM
Experimentos Computacionais
Conclusão
T b lh Futuros
Trabalhos F t
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 9
Trabalhos Correlatos
Projeto dbMiner
HAN et alii (1996) liderou um grupo de pesquisa que desenvolveu uma série de
trabalhos de integração de técnicas de DM com OLAP. Este projeto evoluiu
para um produto comercial (DBMINER, 2002).
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 10
Trabalhos Correlatos
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 11
Trabalhos Correlatos
Tecnologia OLE DB DM
Julho de 2000, publicação da especificação desta tecnologia
Março de 2001,
2001 lançamento do recurso de agregação de provedores de DM
DM,
incluído no SP1
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 12
Conteúdo
I t d ã
Introdução
Trabalhos Correlatos
Processo de KDD
Provedor de DM
Experimentos Computacionais
Conclusão
T b lh Futuros
Trabalhos F t
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 13
Processo de KDD
Processo de KDD
Problema Conhecimento
O Processo
P de
d KDD no contexto
t t d de solução
l ã d de um problema
bl (SILVER
(SILVER, 1998)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 14
Processo de KDD
Interpretação e avaliação
Conheciment o
Mineração dos dados
p(x)=0.02
Seleção e pré-processamento
é
Padrões e Modêlos
ç
Consolidação de dados
Dados Consolidados
Fontes de Dados
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 15
Conteúdo
I t d ã
Introdução
Trabalhos Correlatos
Processo de KDD
Provedor de DM
Experimentos Computacionais
Conclusão
T b lh Futuros
Trabalhos F t
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 16
Implementações
p ç incrementais
CRAWFORD (1989) - versão incremental do CART (Classification
g
and Regression Trees)) (BREIMAN
( et alii,, 1984))
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 17
Classificador Bayesiano
y Simples
p
Apresenta resultados melhores do que algoritmos mais sofisticados
(FRANK et alii
alii, 2000).
2000)
DOMINGOS & PAZZANI (1996, 1997) mostraram que mesmo para
problemas com presença de forte dependência entre atributos ele
apresentou
t b bons resultados
lt d
LANGLEY, IBA & THOMPSON (1992) demonstraram através de
uma análise formal o excelente comportamento deste classificador
em comparação com outros mais sofisticados e frente a problemas
complexos e com distúrbio de dados
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 18
Teorema de Thomas Bayes
y
P(B | A ) P( A )
P( A | B ) =
P(B )
onde:
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 19
Algoritmo
g de Treinamento do Classificador SNB – parte 1
Se houver dados de t reinament o ant erior
Recupere v (número de casos de t reinament o)
Recupere p (número de at ribut os de predição)
Para t = 1, p
Recupere mt (número de classes para o at ribut o de predição t)
Para j = 0, mt
R
Recupere s tj (número
( ú d
de casos d
de classe
l c tj , para o att ribut
ib t o de di ã t)
d predição
Para i = 1, n
Recupere oit (número de at ribut os possíveis para cada at ribut o ait , para o at ribut o
di ã t
d predição
de
Para h = 1, oit Recupere rjith (número de casos de classe c tj t endo o valor x ij , de
ordem h, para o at ribut o ait , para o at ribut o de predição t)
Recupere z tji (somat ória dos valores x ij para o at ribut o ait dos casos de classe c tj ,
para o at ribut o de predição t)
Recupere qtjji (somat ória dos quadrados dos valores x ij para o at ribut o ait dos
casos de classe c tj , para o at ribut o de predição t)
Fim de Para i = 1, n
Fim de Para j = 0, mt
Fim de Para t = 1, p
Fim de Se houver dados de t reinament o ant erior
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 20
Algoritmo
g de Treinamento do Classificador SNB – parte 2
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 21
Algoritmo
g de Predição
ç do Classificador SNB – parte 1
P
Para t = 1,
1 p (número
( ú de
d att ribut
ib t os de
d predição)
di ã )
Para j = 0, mt (número de classes para o at ribut o de predição t)
s tj
F
Faça Pjt = ( b bilid d a priori
(probabilidade i i das
d classes)
l )
r
Para i = 1, n (número de at ribut os de dados)
Defina a ordem h do at ribut o at ual ((h = 0 p
para at ribut o ausent e))
Comput e a probabilidade correspondent e ao at ribut o
Fim de Para i = 1, n
Fim de Para j = 0, mt
Escolha o maior valor ent re os valores de Pjt para j = 0, mt definindo o valor de j
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 22
Algoritmo
g de Predição
ç do Classificador SNB – parte 2
t2
t z ji
q ji −
rjit1
Faça σ jit = (fórmula IV-6)
rjit1 −1
2
t t
1 yi − μ ji
−
1 2 σ jit
Mult iplique Pjt por e (fórmula IV-4)
2πσ jit
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 23
Conteúdo
I t d ã
Introdução
Trabalhos Correlatos
Processo de KDD
Provedor de DM
Experimentos Computacionais
Conclusão
T b lh Futuros
Trabalhos F t
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 24
Sistemas de Integração
g ç com SGBDs
BEZERRA, MATTOSO & XEXÉO (2000) – classificação
Sistemas Externos
SGBD como repositório de dados
Vantagens: portabilidade
Desvantagens: elevado tráfego de dados; isolamento do aplicativo em relação
à desenvolvimentos futuros; não uso das facilidades do SGBD
Exemplo: dbMiner (HAN & KAMBER,
KAMBER 2001; DBMINER,
DBMINER 2002) pode ser
enquadrado nesta categoria
Sistemas Internos
Integração total com o SGBD
Vantagens: potencial para melhores resultados de processamento;
armazenamento do modelo de DM
Desvantagens: total falta de portabilidade; duplicação de esforço de
desenvolvimento
Exemplo: BEZERRA & XEXÉO (1998, 1999) – implementação de
funcionalidades internas para extração e armazenamento de regras em um
SGBD de uso experimental
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 25
Sistemas de Integração
g ç com SGBDs – Sistemas Acoplados
Acoplamento Íntimo
Usa comandos SQL e extensões da linguagem
Vantagem: aproveita características internas tais como paralelismo e
distribuição
Desvantagem: falta de portabilidade e elevado custo de desenvolvimento; uso
indiscriminado de SQLs produz baixa performance
Exemplo: SOUSA, MATTOSO & EBECKEN (1998)
Acoplamento por API
Usa comandos SQL quando conveniente sem utilizar recursos proprietários
Vantagens: pode aproveitar características internas tais como paralelismo e
distribuição
Desvantagens: se for utilizada API proprietária terá falta de portabilidade
Exemplo: BERNHARDT, CHAUDHURI S. & FAYYAD (1999) implementaram um
aplicativo para classificação de árvores de decisão (MSDT)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 26
Tecnologia
g OLE DB DM
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 27
Arquitetura MDAC
Consumidores de
Aplicativo dados Browser
OLE DB
DB, DB ffor OLAP & DB for
f DM Data
D t Providers
P id
Data Stores
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 28
Ferramentas
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 29
Provedor DMclcMine
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 30
AllElet - Dados de treinamento
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 31
Operações
p ç Fundamentais do Provedor de DM - NETZ et alii ((2000, 2001))
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 32
Criando o Modelo de DM
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 33
AllElet - Arquivo
q XML de criação
ç do modelo de DM
<?xml version="1.0"?>
<pmml name = "AllElet_SNB" GUID = "{4888A64B-C5A3-4CF8-AFB7-593495434496}"
creation-time
ti ti = "2003
"2003-05-03T01:35:34"
05 03T01 35 34" modified-time
difi d ti = "2003-05-03T01:35:34">
"2003 05 03T01 35 34"
<statements>
<statement type = "CREATE" value = "CREATE MINING MODEL [AllElet_SNB]
([NumReg] LONG KEY, [Age] TEXT DISCRETE, [Income] TEXT DISCRETE,
[St d t] TEXT DISCRETE PREDICT
[Student] PREDICT, [C
[CreditRating]
ditR ti ] TEXT DISCRETE,
DISCRETE
[BuysComputer] TEXT DISCRETE PREDICT) USING Simple_Naive_Bayes"/>
</statements>
<data-dictionary column-ordering = "ORDINAL" column-count = "6">
<k name = "NumReg"
<key "N R " d datatype
t t = "LONG" iisinput
i t = "true"
"t " column-ordinal
l di l = "0"/>
<categorical name = "Age" isinput = "true" datatype = "TEXT"
column-ordinal = "1"/>
<categorical name = "Income" isinput = "true" datatype = "TEXT"
column-ordinal
l di l = "2"/>
<categorical name = "Student" isinput = "true" ispredict = "true"
datatype = "TEXT" column-ordinal = "3"/>
<categorical name = "CreditRating" isinput = "true" datatype = "TEXT"
column ordinal = "4"/>
column-ordinal
<categorical name = "BuysComputer" isinput = "true" ispredict = "true"
datatype = "TEXT" column-ordinal = "5"/>
</data-dictionary>
<Simple naive bayes model/>
<Simple-naive-bayes-model/>
</pmml>
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 34
Povoando o Modelo de DM
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 35
AllElet - Arquivo
q XML do modelo completo
p de DM – parte 1
<?xml version="1.0"?>
<pmml name = "AllElet_SNB" GUID = "{4888A64B-C5A3-4CF8-AFB7-593495434496}"
creation-time = "2003-05-03T01:35:34" modified-time = "2003-05-03T02:46:44">
<statements>
<statement type = "CREATE" value = "CREATE MINING MODEL [AllElet_SNB]
([NumReg] LONG KEY, [Age] TEXT DISCRETE, [Income] TEXT DISCRETE,
[Student] TEXT DISCRETE PREDICT, [CreditRating] TEXT DISCRETE,
[BuysComputer] TEXT DISCRETE PREDICT) USING Simple_Naive_Bayes"/>
</statements>
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 36
AllElet - Arquivo
q XML do modelo completo
p de DM – parte 2
<data-dictionary column-ordering = "ORDINAL" column-count = "6">
<key name = "NumReg" datatype = "LONG" isinput = "true" column-ordinal = "0"/>
<categorical
t i l name = "Age"
"A " isinput
i i t = "true"
"t "
datatype = "TEXT" column-ordinal = "1">
<category missing = "true"/>
<category value = "<=30"/>
<category
t value
l = "31
"31-40"/>
40"/
<category value = ">40"/>
</categorical>
<categorical name = "Income" isinput = "true"
…
</categorical>
<categorical name = "Student" isinput = "true" ispredict = "true"
…
</ t
</categorical>
i l>
<categorical name = "CreditRating" isinput = "true"
…
</categorical>
<categorical name = "BuysComputer" isinput = "true" ispredict = "true“
…
</categorical>
</data-dictionary>
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 37
AllElet - Arquivo
q XML do modelo completo
p de DM – parte 3
<global-statistics>
<data-distribution>
<simple-attribute name = "Age"/>
<state missing = "true" support = "0"/>
<state value = "<=30" support = "5"/>
<state value = "31-40" support = "4"/>
<state value = ">40" support = "5"/>
</data distribution>
</data-distribution>
<data-distribution>
<simple-attribute name = "Income"/>
…
</data distribution>
</data-distribution>
<data-distribution>
<simple-attribute name = "Student"/>
…
</data distribution>
</data-distribution>
<data-distribution>
<simple-attribute name = "CreditRating"/>
…
</data distribution>
</data-distribution>
<data-distribution>
<simple-attribute name = "BuysComputer"/>
…
</data distribution>
</data-distribution>
</global-statistics>
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 38
AllElet - Arquivo
q XML do modelo completo
p de DM – parte 4
<Simple-naive-bayes-model>
<info name = "Count of Cases" value = "14"/>
<info
i f name = "Count
"C t off T
Trees"" value
l = "2"/
"2"/>
<data-distribution>
<simple-attribute name = "Student"/>
<state missing = "true" support = "0"/>
<state
t t value
l = ""no"" supportt = "7" "7">
<data-distribution>
<simple-attribute name = "Age"/>
<state value = "<=30" support = "3"/>
< t t value
<state l = "31"31-40"
40" supportt = "2"/>
<state value = ">40" support = "2"/>
</data-distribution>
…
</ t t >
</state>
…
</data-distribution>
<data-distribution>
<simple attribute name = "BuysComputer"/>
<simple-attribute
<state missing = "true" support = "0"/>
…
</data-distribution>
</Simple naive bayes model>
</Simple-naive-bayes-model>
</pmml>
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 39
Predizendo Atributos
Consulta criada com o auxílio do DTS do MS SQL Server ou do
utilitário DMSamp:
SELECT FLATTENED [T1].[NumReg], [T1].[Age], [T1].[Income],
[T1].[Student], [T1].[CreditRating], [T1].[BuysComputer],
[AllElet SNB] [BuysComputer] as BuysComputer FROM
[AllElet_SNB].[BuysComputer]
[AllElet_SNB] PREDICTION JOIN OPENROWSET ('SQLOLEDB.1',
'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist
Security Info=False;Initial
Info False;Initial Catalog=allelet;Data
Catalog allelet;Data Source=CLC'
Source CLC ,
'SELECT "NumReg", "Age", "Income", "Student",
"CreditRating", "BuysComputer" FROM "AllElet" ORDER BY
"NumReg"')
NumReg ) AS [T1] ON [AllElet_SNB].[NumReg]
[AllElet SNB].[NumReg] =
[T1].[NumReg] AND [AllElet_SNB].[Age] = [T1].[Age] AND
[AllElet_SNB].[Income] = [T1].[Income] AND
[[AllElet_SNB].[Student]
_ ][ ] = [T1].[Student]
[ ][ ] AND
[AllElet_SNB].[CreditRating] = [T1].[CreditRating] AND
[AllElet_SNB].[BuysComputer] = [T1].[BuysComputer]
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 40
Expondo
p o Modelo de DM
Tabelas virtuais
recuperadas por clientes do provedor de DM
através de comandos SQLQ DM do tipo
p Select
diretamente através de chamadas de função de
recuperação das propriedades dos nós das
árvores de predição.
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 41
AllElet - Árvores do modelo p
para os atributos de predição
p ç
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 42
AllElet - Conteúdo da tabela virtual do modelo de DM
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 43
AllElet – Árvore do atributo de predição BuysComputer exibida pelo Internet Explorer
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 44
Conteúdo
I t d ã
Introdução
Trabalhos Correlatos
Processo de KDD
Provedor de DM
Experimentos Computacionais
Conclusão
T b lh Futuros
Trabalhos F t
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 45
Experimentos
p Computacionais
p
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 46
Waveform - Funções
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 47
Waveform - Medidas
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 48
Waveform - datasets
Teste
5000 casos repositório UCI
Treinamento
a, b, c, d, e: respectivamente 300, 5.000,
10.000,, 100.000 e 1.000.000 de casos
gerados randomicamente por um programa
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 49
Waveform - Classificadores utilizados
Classificador Descrição Parâmetros
MSDT2 COMPLEXITY_PENALTY=0,
MSDT (CHICKERING, GEIGER & MINIMUM LEAF CASES=1 SCORE_METHOD=4,
MINIMUM_LEAF_CASES=1, SCORE METHOD=4
HECKERMAN, 1994) SPLIT_METHOD=2; todos atributos de dados
contínuos
MSDT2d COMPLEXITY_PENALTY=0,
MINIMUM_LEAF_CASES=1,
MINIMUM LEAF CASES=1 SCORE_METHOD=4,
SCORE METHOD=4
SPLIT_METHOD=2; todos atributos de dados
discretizados
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 50
Waveform - Tempos de processamento (s)
Etapa Grupo SNB WEKA SNBd MSDT1 MSDT2 MSDT2d C45
a 5 3 2 3 4 3 1
b 5 58 4 13 46 6 6
Treinamento c 8 107 6 25 85 8 13
d 47 981 45 307 912 69 282
e 428 9629 429 ? ? 934 12684
a 1 2 2 1 1 1 0
b 22 40 22 18 19 19 0
Predição do
Treinamento
c 45 74 44 35 35 37 0
d 430 693 413 333 328 352 1
e 4111 6704 4079 ? ? 3801 13
a 23 64 21 18 18 18 1
b 22 64 22 19 18 17 1
Predição do
Teste
c 22 63 22 18 19 17 1
d 21 61 22 17 20 17 1
e 29 59 36 ? ? 23 1
a 29 69 25 22 23 22 2
b 49 165 48 50 83 42 7
Total c 75 244 72 78 139 62 14
d 498 1735 480 657 1260 438 284
e 4568 16392 4544 ? ? 4758 12698
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 51
Waveform - Tempo de treinamento x Número de casos
14000
C45
12000
T em p o d e T re in a m en t o (s)
WEKA
10000
8000
6000
4000
2000
MSDT2d
MSDT2 SNBd
0 SNB
MSDT1
0 200000 400000 600000 800000 1000000
N ú m ero d e C a sos
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 52
Waveform - Acurácia (%)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 53
Waveform – validação cruzada
Tempos de processamento (s)
Treinamento 41 356
Predição Treinamento 198 162
Predição Teste 27 22
T t l
Total 266 540
Acurácia (%)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 54
Meteo - Previsão de Tempo
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 55
Meteo - Classificadores utilizados
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 56
Meteo - Resultados
Tempos de processamento (s)
Treinamento 10 10 28 20 19
Predição do Treinamento 72 69 58 59 0
Predição do Teste 33 32 26 27 1
Total 115 111 112 106 20
Acurácia (%)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 57
Meteo – Resultados da validação cruzada
Tempos de processamento (s)
Acurácia (%)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 58
Insurance - Dados de Seguro de Vida
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 59
Insurance - Diagrama
g de relacionamentos entre as tabelas originais
g
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 60
Insurance - Classificadores utilizados
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 61
Dados preparados
p p
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 62
Insurance - dados preparados
Tempos de processamento (s)
Acurácia (%)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 63
Insurance – dados preparados - validação cruzada
Tempos de processamento (s)
Acurácia (%)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 64
Dados originais
g
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 65
Insurance - dados originais
Tempos de Processamento (s)
Acurácia (%)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 66
Insurance – dados originais - validação cruzada
Tempos de Processamento (s)
Acurácia (%)
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 67
Estudo de Performance
SONI, TANG & YANG (2002) - estudo de performance para o
classificador MSDT
Variação
ç do Número de Atributos de Predição
ç
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 68
Performance - Classificadores utilizados
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 69
Variação
ç do Número de Atributos de Dados
M SD T ( 8 6 7 3 )
9000
8000
m p o d e T rrein a m en tto (s)
7000
SN B ( 6 2 8 5 )
6000
5000
4000
3000
2000
T em
1000
0
0 50 100 150 200
N ú m ero d e A t rib u t os
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 70
Variação
ç do Número de Casos - treinamento
8000
M SD T ( 7626)
7500
7000
SN B ( 6476)
6500
6000
5000
4500
4000
3500
3000
T em
2500
2000
1500
1000
500
0
0 2000000 4000000 6000000 8000000 10000000
N ú m ero d e C a sos
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 71
Variação
ç do Número de Casos - predição
M SD T p ( 1 1 0 0 2)
11000
10000 SN B ( 9 71 9 )
SN Bp
B ( 9 2 7 3)
9000
7000
6000
em p o d e P re
M SD T ( 4 9 87 )
5000
4000
Te
3000
2000
1000
0
0 500000 1000000 1500000 2000000
N ú m ero d e C a sos
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 72
Variação
ç do Número de Casos - predição
Falta de
M SD T p ( 1 1 0 0 2)
11000
memória
10000 SN B ( 9 71 9 )
SN Bp
B ( 9 2 7 3)
Predição
9000 p/ partes
7000
Excedeu
6000 tempo limite
em p o d e P re
M SD T ( 4 9 87 )
5000
4000
Te
3000
2000
1000
0
0 500000 1000000 1500000 2000000
N ú m ero d e C a sos
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 73
Variação
ç do Número de Casos – treinamento incremental
9500
a
SN B ( 8 94 0)
9000
8500
8000
7500
7000
SN B(( 6 47 6))
6500
T em p o d e T rein a m en to (s)
6000
5500
i
5000 SN B ( 6 314 )
4500
4000
3500
3000
2500
2000
1500
1000
500
0
0 2000000 4000000 6000000 8000000 10000000
N ú m ero d e C a sos
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 74
Variação
ç do Número de Estados dos Atributos de Dados
800
SN B ( 7
716)
16 )
700
M SD T ( 6 72 )
o (s)
600
T em p o d e T rein a m en to
500
400
300
200
100
0
0 25 50 75 100
N ú m ero d e E st a d os
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 75
Variação
ç do Número de Atributos de Predição
ç
14000
M SD T ( 12330)
12000
o (s)
10000
T em p o d e T rein a m en to
8000
6000
SN B ( 4 6 0 7 )
4000
2000
0
0 4 8 12 16 20 24 28 32
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 76
Conteúdo
I t d ã
Introdução
Trabalhos Correlatos
Processo de KDD
Provedor de DM
Experimentos Computacionais
Conclusão
T b lh Futuros
Trabalhos F t
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 77
Conclusão
O classificador SNB apresentou excelente escalabilidade dentro das
limitações do equipamento utilizado nos experimentos.
experimentos
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 78
Conclusão
A tecnologia OLE DB DM mostrou eficiência na implementação de
algoritmos de DM,
DM alcançando a completa integração com um
SGBD relacional de uso comercial.
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 79
Conteúdo
I t d ã
Introdução
Trabalhos Correlatos
Processo de KDD
Provedor de DM
Experimentos Computacionais
Conclusão
T b lh Futuros
Trabalhos F t
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 80
Trabalhos Futuros
A performance inferior do classificador SNB durante as tarefas de
predição
p ç de dados sugere
g um aperfeiçoamento
p ç da implementação
p ç
desta tarefa, tal como foi realizado por LEUNG & SZE (1998).
A implementação
i l t ã de
d procedimentos
di t para avaliação
li ã do
d
conhecimento obtido é uma tarefa altamente desejável e
promissora.
Maio, 2003 Integração de Recursos de Data Mining com Gerenciadores de Bancos de Dados Relacionais 81