My recent theme has been that we should be using artificial intelligence by ourselves on ourselves, and not using it against other people. Whence I am going to start a second show building and exploring AI skills grounded in common lisp's CLML on sbcl. I'm not sure where to put the corrollary show yet, but here's an sh script that runs some sbcl lisp. If you haven't already compiled CLML, it has lots of dependencies to collect and takes a little while to compile. CLML does exactly the right thing: Use an alien interface to the BLAS (fortran) algebra in order to in this case do a PCA at reasonable speed on a CPU. Principle component analysis (~ eigendecomposition / singular values) is useful for exploration and intuition building, not just as a gear in some machine learning. CLML only supports a few lisp distributions, and I will use sbcl. ```sh ## Data cat > data.sexp <<EOG (("foo" "bar" "a" "b") ("thing1" "green" 1.0 2.0) ("thing2" "blue" 3.0 4.0) ("thing3" "red" 2.5 2.5) ("thing4" "gray" 1.2 2.9)) EOG ## Principle components sbcl --dynamic-space-size 2460 <<EOG 2>/dev/null (require 'asdf) (require 'clml) (defpackage :our-test (:use :cl :clml.hjs.meta ;:clml.hjs.matrix ;:clml.hjs.vector clml.hjs.read-data ;:clml.statistics ;:clml.hjs.vars :clml.pca)) (in-package :our-test) (defun pca-sexp-file (pathstring) (let ((data (pick-and-specialize-data (read-data-from-file pathstring) :except '(0 1) ; descriptive strings :data-types (make-list 2 :initial-element :numeric)))) (princomp data))) (let ((results (pca-sexp-file "data.sexp"))) (format t " ~@{~{ ~a ~a ~}~} " (list "components" (components results)) (list "contributions" (contributions results)) (list "loading-factors" (loading-factors results)) (list "pca-method" (pca-method results)))) (terpri) EOG ```