LISP


;;; This is one of the example programs from the textbook:
;;;
;;; Artificial Intelligence: 
;;; Structures and strategies for complex problem solving
;;;
;;; by George F. Luger and William A. Stubblefield
;;; 
;;; These programs are copyrighted by Benjamin/Cummings Publishers.
;;;
;;; We offer them for use, free of charge, for educational purposes only.
;;;
;;; Disclaimer: These programs are provided with no warranty whatsoever as to
;;; their correctness, reliability, or any other property.  We have written 
;;; them for specific educational purposes, and have made no effort
;;; to produce commercial quality computer programs.  Please do not expect 
;;; more of them then we have intended.

;;;
;;; To run the credit assessment example, evaluate the contnts of this file, 
;;; then, build a tree and bind it to the variable *tree* by evaluating:
;;;
;;; (setq *tree* (build-tree credit-examples))
;;;
;;; using this tree, you can classify instances.  E.g.
;;;
;;; (classify '((history . good) (debt . low) (collateral . none) (income . 15k-to-35k)) 
;;;            *tree*)
;;;


;;; Functions defining a test example from the credit approval domain.

(setq examples 
      '(((risk . high) (history . bad) (debt . high) (collateral . none) (income . 0-to-15k))
        ((risk . high) (history . unknown) (debt . high) (collateral . none) (income . 15k-to-35k))
        ((risk . moderate)(history . unknown) (debt . low) (collateral . none) (income . 15k-to-35k))
        ((risk . high)(history . unknown) (debt . low) (collateral . none) (income . 0-to-15k))
        ((risk . low)(history . unknown) (debt . low) (collateral . none) (income . over-35k))
        ((risk . low)(history . unknown) (debt . low) (collateral . adequate) (income . over-35k))
        ((risk . high)(history . bad) (debt . low) (collateral . none) (income . 0-to-15k))
        ((risk . moderate)(history . bad) (debt . low) (collateral . adequate) (income . over-35k))
        ((risk . low)(history . good) (debt . low) (collateral . none) (income . over-35k))
        ((risk . low)(history . good) (debt . high) (collateral . adequate) (income . over-35k))
        ((risk . high)(history . good) (debt . high) (collateral . none) (income . 0-to-15k))
        ((risk . moderate)(history . good) (debt . high) (collateral . none) (income . 15k-to-35k))
        ((risk . low)(history . good) (debt . high) (collateral . none) (income . over-35k))
        ((risk . high)(history . bad) (debt . high) (collateral . none) (income . 15k-to-35k))))

(defun history (obj)
  (cdr (assoc 'history obj :test #'equal)))

(defun debt (obj)
  (cdr (assoc 'debt obj :test #'equal)))

(defun collateral (obj)
  (cdr (assoc 'collateral obj :test #'equal)))

(defun income (obj)
  (cdr (assoc 'income obj :test #'equal)))

(defun risk (obj)
  (cdr (assoc 'risk obj :test #'equal)))

(setq test-set
      (list
       (make-property 
        :name 'history
        :test #'history
        :values '(good bad unknown))
       (make-property 
        :name 'debt
        :test #'debt
        :values '(high low))
       (make-property 
        :name 'collateral
        :test #'collateral
        :values '(none adequate))
       (make-property 
        :name 'income
        :test #'income
        :values '(0-to-15k 15k-to-35k over-35k))))

(setq classifier 
      (make-property 
       :name 'risk
       :test #'risk
       :values '(high moderate low)))

;;; this is the example frame for this test problem:

(setq credit-examples 
      (make-example-frame 
       :instances examples 
       :properties test-set
       :classifier classifier
       :size (list-length examples)
       :information (compute-information examples classifier)))




  

Close Window