(defun run-sample-experiment (&key (tbls (list "data/effort/telecom1.arff.lisp" "data/effort/kemerer.arff.lisp" "data/effort/maxwell.arff.lisp" "data/effort/albrecht.arff.lisp" "data/effort/china.arff.lisp" "data/effort/desharnais_1_1.arff.lisp" "data/effort/finnish.arff.lisp")) (repeats 20) (min-size 6) (crit 97) (treatments (list (list #'row-raw-cells "raw") (list #'row-log-cells "log") (list #'row-cells "norm"))) (idea-n (list (list #'idea #'knn) (list #'idea-k2 #'knn-k2))) (k-nearest (list 1 2 4 8))) (dolist (tbl tbls) (format t "~a~%~%" tbl) (let* ((results (make-hash-table)) (tbl1 (data tbl))) (doitems (treatment i treatments) (doitems (k j k-nearest) (doitems (n num idea-n) (let ((key-name (intern (concatenate 'string (second treatment) (string "+") (write-to-string k) (string "+") (parse-name (first n)))))) (setf (gethash key-name results) (make-effort-results :treatment key-name)))))) (dotimes (r repeats) (multiple-value-bind (train test) (traintest tbl1) (doitems (treatment i treatments) (doitems (k j k-nearest) (doitems (n num idea-n) (let* ((log (make-effort-result))) (classify-all1-effort train test log min-size (first treatment) k n) (push (effort-result-mres log) (effort-results-mres (gethash (intern (concatenate 'string (second treatment) (string "+") (write-to-string k) (string "+") (parse-name (first n)))) results))))))))) (let* (list-of-results) (dovalues (value results) (push value list-of-results)) (abccdddd list-of-results))))) ;; Take several tables and create ranks and (defun classify-multiple-numeric-sets (&key (tbls (list "data/effort/telecom1.arff.lisp" "data/effort/kemerer.arff.lisp" "data/effort/maxwell.arff.lisp" "data/effort/albrecht.arff.lisp" "data/effort/nasa93.arff.lisp" "data/effort/coc81.arff.lisp" "data/effort/desharnais_1_1.arff.lisp" "data/effort/finnish.arff.lisp" "data/effort/china.arff.lisp")) (repeats 20) (k 6)) ; Create an empty list of "effort-results" structs to pass to (display-effort-results when complete (let* ((results)) (dolist (tbl tbls) ; Load table and make an effort-results object to keep MRES from the crossvalidation (let* ((tbl1 (data tbl)) (result (make-effort-results))) (setf (effort-results-treatment result) tbl) ; Repeat repeats times for cross-validation (dotimes (r repeats) ; Create a effort-result object the knn learner uses to log results. (let* ((log (make-effort-result))) ; Split into train and test sets. (multiple-value-bind (train test) (traintest tbl1) ; Classify (classify-all1-effort train test log k)) ; Push the results we get back from the learner onto the effort-results list. (push (effort-result-mres log) (effort-results-mres result)))) ; We're finished with this set. Push the results onto a list for consumption by the display-efforts-results function. (push result results))) ; Display a pretty table for numeric results. (display-effort-results results 95 #'mann-whitney)))