Analyzing & Debugging ILP Data Mining Query Execution

Similar documents
Background knowledge-enrichment for bottom clauses improving.

Efficient Algorithms for Decision Tree Cross-validation

BET : An Inductive Logic Programming Workbench

Results in Data Mining for Adaptive System Management

Adding New Level in KDD to Make the Web Usage Mining More Efficient. Abstract. 1. Introduction [1]. 1/10

Péter Hegedűs, István Siket MTA-SZTE Research Group on Artificial Intelligence, Szeged, Hungary

Database Marketing, Business Intelligence and Knowledge Discovery

Comparing Methods to Identify Defect Reports in a Change Management Database

Module 10. Coding and Testing. Version 2 CSE IIT, Kharagpur

Chapter 1. Dr. Chris Irwin Davis Phone: (972) Office: ECSS CS-4337 Organization of Programming Languages

Program Visualization for Programming Education Case of Jeliot 3

Process Modelling from Insurance Event Log

Load Balancing. Load Balancing 1 / 24

IAI : Expert Systems

CHAPTER 2 DATABASE MANAGEMENT SYSTEM AND SECURITY

Activity Mining for Discovering Software Process Models

Standard for Software Component Testing

Improved Software Testing Using McCabe IQ Coverage Analysis

Pattern Insight Clone Detection

Branch-and-Price Approach to the Vehicle Routing Problem with Time Windows

Texas Essential Knowledge and Skills Correlation to Video Game Design Foundations 2011 N Video Game Design

Improving Knowledge-Based System Performance by Reordering Rule Sequences

End-User Software Development: Tool Support for Mobile Data Collections

What Is Specific in Load Testing?

Chapter 3: Data Mining Driven Learning Apprentice System for Medical Billing Compliance

Fourth generation techniques (4GT)

Extend Table Lens for High-Dimensional Data Visualization and Classification Mining

New Generation of Software Development

The Big Data methodology in computer vision systems

Intelligent and Automated Software Testing Methods Classification

To introduce software process models To describe three generic process models and when they may be used

Binary Coded Web Access Pattern Tree in Education Domain

A Serial Partitioning Approach to Scaling Graph-Based Knowledge Discovery

Software Development. Topic 1 The Software Development Process

Creating Synthetic Temporal Document Collections for Web Archive Benchmarking

Analysis of Compression Algorithms for Program Data

WoPeD - An Educational Tool for Workflow Nets

Feature. Applications of Business Process Analytics and Mining for Internal Control. World

MAGENTO HOSTING Progressive Server Performance Improvements

1/20/2016 INTRODUCTION

Extension of Decision Tree Algorithm for Stream Data Mining Using Real Data

Learning is a very general term denoting the way in which agents:

zen Platform technical white paper

Ten steps to better requirements management.

Training Management System for Aircraft Engineering: indexing and retrieval of Corporate Learning Object

In-Memory Databases Algorithms and Data Structures on Modern Hardware. Martin Faust David Schwalb Jens Krüger Jürgen Müller

Static Data Mining Algorithm with Progressive Approach for Mining Knowledge

Enforcing Data Quality Rules for a Synchronized VM Log Audit Environment Using Transformation Mapping Techniques

CHAPTER 7 GENERAL PROOF SYSTEMS

Introducing diversity among the models of multi-label classification ensemble

IMPLEMENTATION OF DATA PROCESSING AND AUTOMATED ALGORITHM BASED FAULT DETECTION FOR SOLAR THERMAL SYSTEMS

Augmented Search for Web Applications. New frontier in big log data analysis and application intelligence

Linux Process Scheduling Policy

A Tool for Generating Partition Schedules of Multiprocessor Systems

Toward a community enhanced programming education

A Review of Data Mining Techniques

Horizontal Aggregations In SQL To Generate Data Sets For Data Mining Analysis In An Optimized Manner

Semantic Errors in SQL Queries: A Quite Complete List

Language Evaluation Criteria. Evaluation Criteria: Readability. Evaluation Criteria: Writability. ICOM 4036 Programming Languages

Demand Attach / Fast-Restart Fileserver

The ProB Animator and Model Checker for B

APP INVENTOR. Test Review

Model Discovery from Motor Claim Process Using Process Mining Technique

Fundamentals of LoadRunner 9.0 (2 Days)

Intro to scientific programming (with Python) Pietro Berkes, Brandeis University

Integrating Benders decomposition within Constraint Programming

MetaGame: An Animation Tool for Model-Checking Games

Pentaho Data Mining Last Modified on January 22, 2007

Programming Language Concepts for Software Developers

Instructor Özgür ZEYDAN BEU Dept. of Enve. Eng. CIV 112 Computer Programming Lecture Notes (1)

CSE Case Study: Optimising the CFD code DG-DES

A Comparison Study of Qos Using Different Routing Algorithms In Mobile Ad Hoc Networks

Cost Model: Work, Span and Parallelism. 1 The RAM model for sequential computation:

Intelligent Human Machine Interface Design for Advanced Product Life Cycle Management Systems

Practical Performance Understanding the Performance of Your Application

Six Strategies for Building High Performance SOA Applications

Instrumentation Software Profiling

Mining Binary Expressions: Applications and Algorithms

Static Program Transformations for Efficient Software Model Checking

InvGen: An Efficient Invariant Generator

Software Engineering. Software Processes. Based on Software Engineering, 7 th Edition by Ian Sommerville

Your guide to DevOps. Bring developers, IT, and the latest tools together to create a smarter, leaner, more successful coding machine

MS SQL Performance (Tuning) Best Practices:

Chapter 13: Program Development and Programming Languages

Chapter 13: Query Processing. Basic Steps in Query Processing

Integrating Pattern Mining in Relational Databases

Utilizing Domain-Specific Modelling for Software Testing

Rational Application Developer Performance Tips Introduction

Transcription:

Analyzing & Debugging ILP Data Mining Query Execution Remko Tronçon Katholieke Universiteit Leuven Dept. of Computer Science Celestijnenlaan 200A B-3001 Leuven, Belgium remko.troncon@cs.kuleuven.be Gerda Janssens Katholieke Universiteit Leuven Dept. of Computer Science Celestijnenlaan 200A B-3001 Leuven, Belgium gerda.janssens@cs.kuleuven.be ABSTRACT We present a trace based approach for analyzing the runs of Inductive Logic Programming Data Mining systems, without needing to modify the actual implementation of the ILP mining algorithms. We discuss the use of traces as the basis for easy and fast, semi-automated debugging of the underlying (query) execution engine of the ILP system. Our approach also provides a way to monitor the behavior of queries generated by the ILP algorithm, allowing an evaluation and comparison of the impact of different execution mechanisms. The traces can be extended further, and as such be useful for visualization and monitoring of other aspects of ILP data mining systems. Categories and Subject Descriptors: D.2.5 [Software ering]: Debugging; D.2.8 [Software ering]: Metrics; I.2.6 [Artificial Intelligence]: Learning General Terms: Algorithms, Measurement, Performance Keywords: Inductive Logic Programming, Traces, Debugging, Monitoring 1. INTRODUCTION Data mining [12] is the process of finding patterns that describe a large set of data best. Inductive Logic Programming (ILP) [14] is a multi-relational data mining approach, which uses the Logic Programming paradigm as its basis. ILP uses a generate-and-test approach, where in each iteration a large set of hypotheses (or queries ) has to be evaluated on the data (also called examples ). Based on the results of this evaluation, the ILP process selects the best hypotheses and refines them further. Due to the size of the data of the problems handled by ILP, the underlying query evaluation engine 1 is a crucial part of a real life ILP system. Hence, a lot of effort is invested in optimizing the engine to 1 A classical Prolog engine could be taken as a query evaluation engine. Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. AADEBUG 05, September 19 21, 2005, Monterey, California, USA. Copyright 2005 ACM 1-59593-050-7/05/0009...$5.00. yield faster evaluation time through the use of new execution mechanisms, different internal data representations,... However, while tracing bugs in these newly developed execution mechanisms is still feasible for small test programs, many bugs only appear during the execution of the ILP algorithm on real life data sets. Unfortunately, several factors make debugging in this situation difficult: The size of the ILP system itself. Real life ILP systems often have a very large code base, combining multiple algorithms and small variants of these algorithms together. This makes it very tedious to instrument the code with the necessary debug calls. The size of the mining problem. With large problems, it can take a very long time (hours, even days) before a specific bug occurs. When debugging, this is not very desirable, as one typically wants to perform multiple runs with small modifications to pin-point the exact problem. The high complexity of the hypothesis generation phase. While the evaluation of hypotheses is often the bottleneck, some algorithms (such as rule learners) have a very expensive hypothesis generation phase, so it could take a very long time before the bug in the execution mechanism exposes itself. These same properties cause problems when performing analyses of execution mechanisms, such as gathering information on the structure of hypotheses, profiling run-time behavior to find bottlenecks in the execution, comparing execution times of different execution mechanisms,... Traces of executions have been used in the past to understand misbehavior of programs [9, 10]. In this work, we present a trace based approach for analyzing the runs of an ILP Data Mining system without needing to modify the actual implementation of the algorithms. This is an effective algorithm-independent approach for easy and fast debugging of the underlying query execution engines, and provides an easy way to evaluate and compare the impact of different execution mechanisms. While we mainly focus ourselves on the engine designer s point of view, this approach can also help in visualizing the ILP algorithm itself (e.g. to expose for bugs). The approaches described here have been successfully applied in the development of new execution mechanisms in hipp [2], the engine of the ACE Data Mining system [1]. The organization of the paper is as follows: In Section 2, we give a brief introduction to Logic Programming and ILP.

% QH: Queue of hypotheses QH := Initialize repeat Remove H from QH Choose refinements r 1,..., r k to apply on H Apply refinements r 1,..., r k on H to get H 1,..., H n Add H 1,..., H n to QH Evaluate & Prune QH until Stop-criterion(QH) Figure 1: Generic ILP Algorithm Section 3 discusses the collection of the run-time information necessary for our trace based approach. Section 4 then discusses using these traces to allow fast and easy debugging of query execution. Section 5 describes analyzing the gathered information to monitor the queries and their execution. Finally, we give some conclusions and future work in Section 6. 2. BACKGROUND: (INDUCTIVE) LOGIC PROGRAMMING A logic program is in essence a collection of Horn clauses, which are logical implications of the form H B 1... B n, where H is the head and B 1... B n is the body of the clause. The reading of such a clause is: If B 1,... and B n are true, then H is also true. Different clauses build the definition of a predicate, which models a relation. A fact is a clause without a body. A logic program is executed by executing a query against the program. If the query is consistent with the program, it succeeds. Otherwise, a query fails. We denote queries by prefixing them with?-. In Inductive Logic Programming, every example in the data set is represented as a logic program, the patterns to be found are logical queries, and knowledge about the problem domain (or background knowledge ) is also represented as a logic program. ILP algorithms typically follow the same generate-and-test pattern: a set of queries is generated, of which all queries are tested on (a subset of) the examples in the data set. The query (or queries) which cover the data the best are then selected and extended, after which the process restarts with the extended queries. Hence, the query space is exhaustively searched, starting from the most general query and refining it further and further until the query (or queries) cover the data well enough. The generic ILP algorithm (as described in [14]) can be seen in Figure 1. In this algorithm, the Initialize, Remove, Choose, Evaluate & Prune and Stop-criterion procedures are to be filled in by the ILP algorithm, creating a special instance of this generic algorithm. Hence, these are the functions that characterize an ILP algorithm. In general, the most crucial step with respect to execution time is the Evaluate & Prune step: the (often large) set of queries H 1,..., H n has to be run for each example. It is not uncommon to have a set of 3000 queries which are executed up to 1000 times. Therefore, fast query execution mechanisms are needed. One of the developed techniques are query packs [4], which exploit the similar structure of the set of queries which have to be evaluated, and combine them into a tree-like query, yielding speedups up to a factor 100. When the word query is used in the following sections, it should be interpreted as query pack, since this technique is almost always used in practice. Concrete examples of ILP algorithms are Tilde [3], a decision tree learner, and Warmr [7], a frequent pattern learner. Both algorithms were implemented in the ACE Data Mining system [1]. The ACE system uses hipp [2] as its execution engine, a high-performance Prolog engine (written in C) with specific extensions for ILP such as query packs [4] and query transformations [6]. Recent research in query execution includes the combination of query packs with other query transformations [18], and new compilation techniques for queries [17]. The development of these new methods are done on a low level in the execution engine, and therefore can make debugging quite tedious. Typical ILP benchmarks are Mutagenesis [16] and Carcinogenesis [15], 2 data sets containing information about the structures of molecules, and where the task of the ILP system is to learn to predict whether an unseen molecule can cause cancer or not. Both data sets are relatively small: the Mutagenesis data set consists of 230 examples, while Carcinogenesis contains 330 examples. A more real-life data set is the HIV data set [8], containing over 4000 examples. 3. GATHERING RUN-TIME INFORMATION Our approach uses traces to perform debugging and analysis of of query execution in an ILP algorithm. For this purpose, the crucial step in the ILP algorithm is the Evaluate & Prune step from Figure 1. We will therefore record the queries executed in each step, together with the examples these queries are run on. This information in itself is enough to simulate the query evaluation phase of the ILP algorithm; why and how these queries were generated is irrelevant to their execution. So, a first format of our trace could consist of query/2 facts similar to the following: query((atom(x, c )), [1,2,3,4,5]). query((atom(x, c ),atom(y, o ),bond(x,y)), [1,5]). This trace represents a run of an ILP algorithm that only executed 2 queries on the data set: a first query, atom(x, c ), executed on all 5 examples, and a second query which is a refinement of the first one, (atom(x, c ), atom(y, o ), bond(x,y)), which was only executed on the first and the last example. More advanced execution mechanisms such as query packs group sets of queries into trie-like structures, factoring out the common parts of the queries. The syntax of these query packs is the same as the ones for normal disjunctions in Prolog, but the execution mechanisms is adapted and improved for the ILP setting. Instead of logging regular queries, we will log these query packs in our traces. For example, executing the following 2 queries (with both a common goal atom(x, c ))?- atom(x, c ), atom(y, o ).?- atom(x, c ), atom(z, h ). in a query pack on the first 3 examples would result in the following query trace: query((atom(x, c ), (atom(y, o ) ; atom(z, h ))), [1,2,3]). The information in the trace can be extended even further. For example, for purposes such as visualization of ILP algorithms, information on the origin of a query is useful: when H 1 and H 2 are the result of applying r 1 and r 2

to a hypothesis H, one might want to visualize this relation. Such information is also useful in the research for incremental query representations, used in execution schemes which exploit the incremental nature of query execution. The sizes of the traces can grow quite large in practice. For example, running the Tilde algorithm on 4150 examples of the HIV data set results in a trace of 204 queries, encompassing a total of 63 MB. For our purposes, this does not pose any problems, since the debugging and analyses presented in Section 4 and Section 5 only use sequential access to this data. However, when needing random access to the trace (e.g. for a visualizing trace browser ), the traces will need smarter storage methods (e.g. building indexes on the traces). In this first phase of the analysis approach, the relevant information of a specific run of an ILP algorithm on a data set was gathered into a trace. This trace is independent of the concrete algorithm itself, in the sense that it is just a sequence of queries the algorithm evaluated on the examples. 4. DEBUGGING QUERY EXECUTION When developing optimizations for query evaluation, different execution mechanisms are investigated. Since a new execution mechanism needs to yield the same final results as the existing one, inconsistencies are typically detected by running the data mining algorithm using each execution mechanism, and comparing the final data mining results. However, this only indicates that there is a bug in the execution somewhere, but it doesn t show where; to be able to determine this, the complete data mining algorithm has to be run using both the debugger of the host language of the ILP system, and the debugger of the host language of the execution engine. This is very hard and time-consuming in practice. Moreover, comparing the output results only works when the data mining has a deterministic behavior: if the decisions it makes are based on a random factor, the outputs of the algorithm can (slightly) differ, and comparing runs is not possible. To verify that a new execution mechanism is correct, the trace of queries can be used, and for each query in the trace, the results of the query are compared for each execution mechanism. Differing results indicate a bug in the new execution scheme, and the query for which this conflict occurs is investigated further. Comparing the result of a single query in ILP is simple: for each example in the data set, only the success of the query has to be logged to determine whether the hypothesis covers the example or not. This can be done by simply adorning the query with a final call to a predicate logging the success of a query. So, the query?- atom(x, c ), atom(y, o ), bond(x,y). is transformed into?- atom(x, c ), atom(y, o ), bond(x,y), cur_example(ex), log_success(ex). Note that cur example/1 is a predicate provided by the ILP system to identify the current example. When execution reaches the end of the query (meaning that the query applies to the current example), log success/1 stores the successful result of applying the query on the example in the dynamic database. After executing a query (pack) on the requested set of examples, the results are compared against each other, and conflicting results are reported as bugs. With multi-query execution mechanisms such as query packs, a single entry in the trace represents a set of queries. Therefore, each branch of the query pack is given a unique identifier, and the success of each branch is recorded separately in the database. Comparing the successes of the separate queries serves as a first pass to indicate a query pack causing a bug. A second pass can then gradually prune the query pack to the minimal pack which has a faulty execution. The pruning process can be automated by a process which greedily prunes branches from the pack, given that there still is at least one query with different execution results in the pack. Although this might not give the minimal pack causing buggy execution, it gives effective results nevertheless. Other pruning processes can be used to reduce the buggy pack even further. By separately testing the success of every query (pack) it is easy to isolate queries which expose bugs in newly developed execution mechanisms. Even if the bug is not related to a single query (which is often the case with bugs in the memory management), the number of queries which have to be executed to make the bug occur can be trimmed down drastically by modifying the trace, thus shortcutting the simulated algorithm execution, which helps a lot in improving the speed of the debugging process. This debugging approach is currently used in the development of new execution mechanisms for the ACE Data Mining system. The ACE data mining system was first instrumented with query logging code, which yields the traces for debugging. A small Prolog program was written which subsequently annotates each query in the trace with the log success/2 calls, executes the annotated query under each execution mechanism, and checks if the results match. Upon conflicting results, the trace is manually trimmed down to the smallest trace yielding buggy execution, and the query of interest is semi-automatically trimmed to a smaller query for easy handling. Since the simulating Prolog program is essentially only a loop of query executions, debugging execution in such a simple program is a lot easier and faster than having to debug in the full data mining system. 5. MONITORING QUERIES The usefulness of traces for monitoring in the context of logic programming was already identified in [13]. Here, we will talk about monitoring query execution in ILP through the use of the traces. Goals of this analysis are: (1) Predicting or explaining behavior of execution mechanisms on a data set; (2) comparing different execution mechanisms; and (3) detecting bottlenecks in query execution of data sets, such that new improvements can be developed to solve these. We will perform 2 analyses on the traces: a static analysis, gathering relevant statistics by looking at the traces only, and a dynamic analysis, by profiling query execution using simulation. The static analysis is just a matter of traversing each query of the trace while keeping counters for several aspects of query. For a query pack, relevant statistics are the total number of goals in the query (pack), the number of of queries in the pack, the (average, minimum, maximum) branching factor of the pack,... For the dynamic analysis, every query of the trace is instrumented with profiling calls, and then executed on all the examples of the data set on which the original algorithm evaluated the example. A first interesting aspect to monitor is the inputs and outputs of the Box Model [5] for every

Static # Goals 17149 # Queries 7613 Depth 7 Min. Goals per Query 3 Avg. Goals per Query 7.83 Max. Goals per Query 11 Min. Branching Factor 2 Avg. Branching Factor 42.37 Max. Branching Factor 91 Calls 6e+06 5e+06 4e+06 3e+06 2e+06 1e+06 Query Packs ADPacks Dynamic QPacks ADPacks Examples 13 Min. Call 59452 19296 Avg. Call 447692.23 61240.77 Max. Call 1469595 137569 Tot. Call 5819999 796130 Min. Redo 1205 545 Avg. Redo 7933.31 2411.54 Max. Redo 24084 6348 Tot. Redo 103133 31350 Figure 2: Collected statistics for a query pack 0e+00 0 5 10 15 20 25 30 35 40 Pack Figure 3: Total number of calls to goals in a pack for Query Packs and ADPacks % Unused 100 80 60 40 20 goal of the query: this measures how many times a goal was called, succeeded, failed, or was backtracked to. This information is for example useful in determining how well execution mechanisms that try to avoid redundant backtracking (such as in [18]) perform. Another interesting aspect of doing dynamic analysis using traces is the ability to perform reliable timings of query execution. By timing execution in a simple trace simulator, there is no influence on the timing results from the ILP algorithm itself. Moreover, accurate timings can be done on a per-query basis by executing the query multiple times, and averaging the total execution time. Both the static and dynamic analysis can be performed on different levels: the static statistics are first measured on a per-query basis, and then aggregated into minima, maxima and averages over the complete set of queries to yield an overview of a data set. Since the dynamic analysis involves running the query on every example, the dynamic statistics are collected on a per-example basis, and then aggregated over all examples and over all queries in the trace. For analyzing the structure of the queries generated by the algorithms, a query analyzer was written in Prolog. The static part takes the query trace as input, and computes statistics on the structure of the query packs over the different iterations of the ILP algorithm. The dynamic part of the analysis consists in annotating each query of the pack with profiling calls, and then running the query to collect the measurements. Both analyses output their information in an XML document, which is in turn transformed into structured HTML pages. The resulting document provides a high-level overview of the ILP data mining run, comparing different execution mechanisms, and illustrating the behavior of the queries over the complete run. Figure 2 shows a table with both static and dynamic statistics collected from a specific pack of the resulting trace from running Tilde on the Carcinogenesis data set. The 0 0 50 100 150 200 Pack Figure 4: Percentage of unreached goals table with the dynamic statistics allows us to compare the original query packs approach with the more advanced AD- Packs [18], a variant of query packs aimed at reducing redundant backtracking. Plotting out the number of calls over the whole trace, as seen in Figure 3, shows that the AD- Packs mechanism reduces the number of calls over all queries, reaching the highest reduction in the 21 st pack. Finally, Figure 4 illustrates for the HIV data set the percentage of goals of a query pack that are never reached. For the HIV data set, this runs up to 85% of a pack, which means that the largest part of this query pack is generated and compiled in vain. Not only do these results motivate the study for lazy compilation techniques [17], but this information is also useful for the data mining experts for tweaking the language bias of the data set (which controls the query generation process) to yield more relevant queries. 6. CONCLUSIONS & FUTURE WORK In this work, we illustrated a trace based approach to debugging and analyzing query execution mechanisms for ILP data mining. Using a trace based approach yields several advantages in this context: the specific workings of the ILP algorithm do not have to be known, as the traces are algorithm independent, yet provide enough information for performing a perfect simulation of the query execution of the algorithm itself. Moreover, by altering the traces (e.g. reducing the number and size of queries) execution can be shortcut, allowing bugs to be exposed very fast without having to go through the whole trace. Also, with trace-based execution,

Data Mining Dataset Query Analyzer Static Analyzer Dynamic Analyzer XML Document HTML Report Data Mining system Query Trace Trace Simulator Debugger Figure 5: Overview of the debugging and analysis process time is only spent on the execution of queries. Therefore, a complex query generation phase of an ILP algorithm will not affect the total execution time of a trace, and so debugging can be done faster. Finally, it is not necessary to have full knowledge of the code base of the data mining system, which can in practice become very large. Besides being useful in debugging, the query traces can also be used for analyzing and comparing query execution mechanisms. Figure 5 shows an overview of the debugging and analysis process. Running the data mining system (built upon the execution engine) with a data set as input yields the query trace such as described in Section 3. The trace, together with the original data, is then used as an input to the trace simulator, which executes the queries on the data; since this simulator is very small, bugs in the execution mechanism can be easily found by running the engine on top of the debugger (as described in Section 4). The trace also serves as an input to the trace analysis (as described in Section 5); the static analysis looks only at the trace, while the dynamic analyzer also needs the data set as an input to be able to profile runs of the queries from the query trace on the data. The dynamic trace analysis uses a source level transformation to collect run-time statistics. While this approach is flexible and easy to implement, it introduces significant run-time overhead. Future work consists in making this approach more efficient by introducing special profiling instructions at the bytecode level. In [11], traces of logic program executions are used for visualizing the LP execution mechanism. This idea can also be applied on the ILP query traces, and as such have a visualization which can serve both didactic purposes as to acquire an understanding on what happens in the query execution of an algorithm on a concrete data set. All the different analyses, visualizations, and debugging approaches described above can be combined into a fully interactive integrated environment. Due to the size of the analyzed problems, such a tool needs to tackle intelligent visualization issues to allow easy interactive inspection. Finally, a trace based approach could lend itself very well to visualization of ILP algorithms themselves (instead of just their query execution), by extending the traces to contain information concerning the other steps from Figure 1. Adding even more algorithm-dependent data can serve in making visualizations for specific algorithms. The same advantages apply here: there is no need to instrument the ILP system with calls to a user interface, time-consuming steps can be avoided, visualizations are implementation-independent,... Acknowledgments Remko Tronçon is supported by the Institute for the Promotion of Innovation by Science and Technology in Flanders (I.W.T.). 7. REFERENCES [1] The ACE data mining system. http://www.cs.kuleuven.be/ dtai/ace/. [2] hipp: A high performance Prolog system. http://www.cs.kuleuven.be/ dtai/hipp/. [3] H. Blockeel and L. De Raedt. Top-down induction of first order logical decision trees. Artificial Intelligence, 101(1-2), June 1998. [4] H. Blockeel, L. Dehaspe, B. Demoen, G. Janssens, J. Ramon, and H. Vandecasteele. Improving the efficiency of Inductive Logic Programming through the use of query packs. Journal of Artificial Intelligence Research, 16, 2002. [5] L. Byrd. Understanding the control flow of prolog programs. In S.-A. Tarnlund, editor, Proceedings of the Workshop on Logic Programming, 1980. [6] V. S. Costa, A. Srinivasan, R. Camacho, H. Blockeel, B. Demoen, G. Janssens, J. Struyf, H. Vandecasteele, and W. Van Laer. Query transformations for improving the efficiency of ILP systems. Journal of Machine Learning Research, 2002. [7] L. Dehaspe and H. Toivonen. Discovery of frequent datalog patterns. Data Mining and Knowledge Discovery, 3(1), 1999. [8] The developmental therapeutics program. NCI/NIH. http://dtp.nci.nih.gov. [9] M. Ducassé. Coca: an automated debugger for C. In ICSE 99: Proceedings of the 21st international conference on Software engineering. IEEE Computer Society Press, 1999. [10] M. Ducassé. Opium: An extendable trace analyser for Prolog. The Journal of Logic programming, 1999. [11] M. Eisenstadt and M. Brayshaw. The transparent prolog machine (tpm): An execution model and graphical debugger for logic programming. Journal of Logic Programming, 5(4), 1988. [12] U. Fayyad and R. Uthurusamy. Data mining and knowledge discovery in databases. Communications of the ACM, 39(11), 1996. [13] E. Jahier and M. Ducassé. Generic program monitoring by trace analysis. Theory and Practice of Logic Programming, 2(4-5), 2002. [14] S. Muggleton and L. D. Raedt. Inductive Logic Programming: Theory and methods. Journal of Logic Programming, 19/20, 1994. [15] A. Srinivasan, R. King, and D. Bristol. An assessment of ILP-assisted models for toxicology and the PTE-3 experiment. In Proceedings of the Ninth International Workshop on Inductive Logic Programming, volume 1634 of Lecture Notes in Artificial Intelligence. Springer-Verlag, 1999. [16] A. Srinivasan, S. Muggleton, M. Sternberg, and R. King. Theories for mutagenicity: A study in first-order and feature-based induction. Artificial Intelligence, 85(1,2), 1996. [17] R. Tronçon, G. Janssens, and H. Vandecasteele. Fast query evaluation with (lazy) control flow compilation. In Logic Programming, 20th International Conference, ICLP 2004, Proceedings, volume 3132 of Lecture Notes in Artificial Intelligence. Springer Verlag, 2004. [18] R. Tronçon, H. Vandecasteele, J. Struyf, B. Demoen, and G. Janssens. Query optimization: Combining query packs and the once-tranformation. In Inductive Logic Programming, 13th International Conference, ILP 2003, Szeged, Hungary, Short Presentations, 2003.