;; ;; FILE: fileio.lsp ;; AUTH: Michael John Radwin ;; ;; DATE: Sat Nov 9 15:15:39 EST 1996 ;; $Id: fileio.lsp,v 1.6 1997/03/27 20:49:18 mjr Exp mjr $ ;; ;; converts a raw (perl-processed) datafile into a list of nn-points (defun parse-datafile (pathname) (with-open-file (stream (pathname pathname) :direction :input) (let ((points '())) (loop (let ((line (read stream nil :end-of-file nil))) (when (eq line :end-of-file) (return-from parse-datafile points)) (push (make-nn-point :class (car line) :point (cdr line)) points)) )))) ;; split a nn-point list two parts and write them to disk in a form ;; that lisp can easily snarf later. (defun write-split-dataset (nn-point-list train-filename test-filename) (multiple-value-bind (train-data test-data) (nn-point-list->train-and-test nn-point-list) (with-open-file (train-stream (pathname train-filename) :direction :output) (format train-stream "~a~%" train-data)) (with-open-file (test-stream (pathname test-filename) :direction :output) (format test-stream "~a~%" test-data)))) ;; call write-split-dataset n times. prefix might be something like ;; "robot" or "cancer" (defun write-n-datasets (n &optional (pathname nil) (prefix "unnamed")) (let ((nn-point-list (parse-datafile (or pathname *data-file*)))) (dotimes (i n) (let ((train-filename (format nil "~a-train~a.data" prefix i)) (test-filename (format nil "~a-test~a.data" prefix i))) (format t "~&Writing ~a and ~a..." train-filename test-filename) (write-split-dataset nn-point-list train-filename test-filename) (format t "done!"))))) ;; reads a lisp-formatted nn-point file and makes the equiv of ;; parse-datafile. Use this to read the results of write-split-dataset. (defun snarf-nn-point-file (pathname) (with-open-file (stream (pathname pathname) :direction :input) (read stream))) ;; format should be "~~mjr/course/cs297/data/robot~a~a.data" (defun test-NN-from-file (format numsets numeric?) (dotimes (i numsets) (let* ((train-filename (format nil format "-train" i)) (test-filename (format nil format "-test" i)) (train-data (snarf-nn-point-file train-filename)) (test-data (snarf-nn-point-file test-filename))) (test-NN train-data test-data numeric?))))