Outdated egg!

This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.

If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.

Classifiers

Some algorithms to develop classification models of data. This library uses dataset-utils; another classification algorithm is provided in libsvm.

Exported Procedures

The classifiers are constructed using a (build-X training-data target-class) procedure. Training data are a relation, as defined in dataset-utils, and target-class is the name of the attribute to be used for the target classification.

Generic procedures

[procedure] (classify-instance classifier instance)

Given a classifier and a data instance, returns a classification.

[procedure] (to-string classifier)

Given a classifier, returns a string representation of the classifier model.

ZeroR

A simple rule: always predicts the majority class of the training data.

[procedure] (build-zero-r training-data target-class)

Constructs an instance of a ZeroR classifier. Training data are a relation, as defined in dataset-utils, and target-class is the name of the attribute to be used for the target classification.

OneR

Finds the attribute which best predicts the training data.

[procedure] (build-one-r training-data target-class)

Constructs an instance of a OneR classifier. Training data are a relation, as defined in dataset-utils, and target-class is the name of the attribute to be used for the target classification.

ID3

[procedure] (build-id3 training-data target-class)

Constructs an instance of a decision-tree classifier using the ID3 algorithm. Training data are a relation, as defined in dataset-utils, and target-class is the name of the attribute to be used for the target classification. All attributes must be nominal.

Instance-based

[procedure] (build-one-nn training-data target-class #!key metric)

Constructs a simple instance-based classifier, which returns the class of nearest neighbour for any test instance. Training data are a relation, as defined in dataset-utils, and target-class is the name of the attribute to be used for the target classification. metric is a function taking two instance definitions and returning a real number reflecting the distance between the instances; see dataset-utils for some standard metrics. metric defaults to euclidean-distance.

Example

#;1> (use dataset-utils)
#;2> (use classifiers)
#;3> (use format)
#;4> (define weather 
           (make-relation 'plays-tennis
                 (list (make-nominal-attribute 'outlook 'sunny 'overcast 'rainy)
                       (make-nominal-attribute 'temperature 'hot 'mild 'cool)
                       (make-nominal-attribute 'humidity 'high 'normal)
                       (make-nominal-attribute 'windy 'true 'false)
                       (make-nominal-attribute 'play 'yes 'no))
                 '((sunny hot high false no)
                   (sunny hot high true no)
                   (overcast hot high false yes)
                   (rainy mild high false yes)
                   (rainy cool normal false yes)
                   (rainy cool normal true no)
                   (overcast cool normal true yes)
                   (sunny mild high false no)
                   (sunny cool normal false yes)
                   (rainy mild normal false yes)
                   (sunny mild normal true yes)
                   (overcast mild high true yes)
                   (overcast hot normal false yes)
                   (rainy mild high true no)))) 
#;5> (define one-r (build-one-r weather 'play))
#;6> (format #t "~a~&" (to-string one-r))
OneR: uses attribute outlook
  : sunny => no
  : rainy => yes
  : overcast => yes

#t
#;7> (define id3 (build-id3 weather 'play))
#;8> (format #t "~a~&" (to-string id3))
ID3
Node: outlook
 value rainy
  Node: windy
   value false
    Leaf: yes
   value true
    Leaf: no
 value overcast
  Leaf: yes
 value sunny
  Node: humidity
   value normal
    Leaf: yes
   value high
    Leaf: no
#;9> (for-each (lambda (item) 
                    (format #t "~a Prediction is: ~a~&"
                              item
                              (classify-instance id3 item)))
         (relation-data weather))
(sunny hot high false no) Prediction is: no
(sunny hot high true no) Prediction is: no
(overcast hot high false yes) Prediction is: yes
(rainy mild high false yes) Prediction is: yes
(rainy cool normal false yes) Prediction is: yes
(rainy cool normal true no) Prediction is: no
(overcast cool normal true yes) Prediction is: yes
(sunny mild high false no) Prediction is: no
(sunny cool normal false yes) Prediction is: yes
(rainy mild normal false yes) Prediction is: yes
(sunny mild normal true yes) Prediction is: yes
(overcast mild high true yes) Prediction is: yes
(overcast hot normal false yes) Prediction is: yes
(rainy mild high true no) Prediction is: no

Author

Peter Lane.

License

GPL version 3.0.

Requirements

Works with dataset-utils.

Version History

in trunk.