CL-ID3

CL-ID3 is a pure Common Lisp implementation of the well-known ID3 AI/data-mining algorithm.

Here is a typical usage example:

CL-USER> 
(defpackage #:id3-examples
  (:use "ID3" "COMMON-LISP" "CL-USER"))
Package "ID3-EXAMPLES"

CL-USER> (in-package :id3-examples) Package "ID3-EXAMPLES"

ID3-EXAMPLES> (defparameter *examples* '((:outlook sunny :temp hot :humidity high :wind weak :play-tennis no) (:outlook sunny :temp hot :humidity high :wind strong :play-tennis no) (:outlook overcast :temp hot :humidity high :wind weak :play-tennis yes) (:outlook rain :temp mild :humidity high :wind weak :play-tennis yes) (:outlook rain :temp cool :humidity normal :wind weak :play-tennis yes) (:outlook rain :temp cool :humidity normal :wind strong :play-tennis no) (:outlook overcast :temp cool :humidity normal :wind strong :play-tennis yes) (:outlook sunny :temp mild :humidity high :wind weak :play-tennis no) (:outlook sunny :temp cool :humidity normal :wind weak :play-tennis yes) (:outlook rain :temp mild :humidity normal :wind weak :play-tennis yes) (:outlook sunny :temp mild :humidity normal :wind strong :play-tennis yes) (:outlook overcast :temp mild :humidity high :wind strong :play-tennis yes) (:outlook overcast :temp hot :humidity normal :wind weak :play-tennis yes) (:outlook rain :temp mild :humidity high :wind strong :play-tennis no)) "Examples for testing. Play tennis or not? That's the question.")

*EXAMPLES*

ID3-EXAMPLES> (defun example-1 () "Build and use a classifier function." ;; Create the classifier function (setf (symbol-function 'classification-of) (build-id3-classifier *examples* :play-tennis :positive-value 'yes :negative-value 'no)) ;; Make a couple of test instances (let ((instances '((:wind strong :outlook sunny :humidity high) (:outlook sunny :humidity normal :wind weak)))) ;; Try to classify them (loop for instance in instances do (format t "Adding classification of instance ~A~%" instance) collect (classification-of instance))))

EXAMPLE-1

ID3-EXAMPLES> (defun example-2 () "Build a tree. Then traverse it with a tree-traverser." ;; Build the tree (let ((decision-tree (id3 *examples* :play-tennis :positive-value 'yes :negative-value 'no)) ;; Make a couple of test instances (instances '((:wind strong :outlook sunny :humidity high) (:outlook sunny :humidity normal :wind weak)))) ;; Try to classify the instances using the tree (loop for instance in instances do (format t "Adding classification of instance ~A~%" instance) collect (classify instance decision-tree))))

EXAMPLE-2

ID3-EXAMPLES> (example-1) Adding classification of instance (WIND STRONG OUTLOOK SUNNY HUMIDITY HIGH) Adding classification of instance (OUTLOOK SUNNY HUMIDITY NORMAL WIND WEAK) (NO YES)

ID3-EXAMPLES> (example-2) Adding classification of instance (WIND STRONG OUTLOOK SUNNY HUMIDITY HIGH) Adding classification of instance (OUTLOOK SUNNY HUMIDITY NORMAL WIND WEAK) (NO YES)

ID3-EXAMPLES>

Download ASDF package from http://www.pvv.ntnu.no/~oyvinht/static/OSS/cl-id3/cl-id3_latest.tar.gz


Artificial Intelligence

CLiki pages can be edited by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively