77 lines
3.2 KiB
Clojure
77 lines
3.2 KiB
Clojure
(ns clj-ml.classifiers-test
|
|
(:use [clj-ml classifiers data] :reload-all)
|
|
(:use clojure.test midje.sweet))
|
|
|
|
|
|
(deftest make-classifiers-options-c45
|
|
(fact
|
|
(let [options (make-classifier-options :decision-tree :c45 {:unpruned true :reduced-error-pruning true :only-binary-splits true :no-raising true
|
|
:no-cleanup true :laplace-smoothing true :pruning-confidence 0.12 :minimum-instances 10
|
|
:pruning-number-folds 5 :random-seed 1})]
|
|
options => (just ["-U" "-R" "-B" "-S" "-L" "-A" "-C" "0.12" "-M" "10" "-N" "5" "-Q" "1"] :in-any-order))))
|
|
|
|
|
|
(deftest make-classifier-c45
|
|
(let [c (make-classifier :decision-tree :c45)]
|
|
(is (= (class c)
|
|
weka.classifiers.trees.J48))))
|
|
|
|
(deftest train-classifier-c45
|
|
(let [c (make-classifier :decision-tree :c45)
|
|
ds (clj-ml.data/make-dataset "test" [:a :b {:c [:m :n]}] [[1 2 :m] [4 5 :m]])]
|
|
(clj-ml.data/dataset-set-class ds 2)
|
|
(classifier-train c ds)
|
|
(is true)))
|
|
|
|
(deftest make-classifier-bayes
|
|
(fact
|
|
(let [c (clj-ml.classifiers/make-classifier :bayes :naive {:kernel-estimator true :old-format true})
|
|
opts (vec (.getOptions c))]
|
|
opts => (contains ["-K" "-O"]))))
|
|
|
|
(deftest make-classifier-bayes-updateable
|
|
(let [c (clj-ml.classifiers/make-classifier :bayes :naive {:updateable true})]
|
|
(is (= (class c)
|
|
weka.classifiers.bayes.NaiveBayesUpdateable))))
|
|
|
|
(deftest train-classifier-bayes
|
|
(let [c (clj-ml.classifiers/make-classifier :bayes :naive {:kernel-estimator true :old-format true})
|
|
ds (clj-ml.data/make-dataset "test" [:a :b {:c [:m :n]}] [[1 2 :m] [4 5 :m]])]
|
|
(clj-ml.data/dataset-set-class ds 2)
|
|
(classifier-train c ds)
|
|
(is true)))
|
|
|
|
|
|
(deftest classifier-evaluate-dataset
|
|
(let [c (make-classifier :decision-tree :c45)
|
|
ds (clj-ml.data/make-dataset "test" [:a :b {:c [:m :n]}] [[1 2 :m] [4 5 :m]])
|
|
tds (clj-ml.data/make-dataset "test" [:a :b {:c [:m :n]}] [[4 1 :n] [4 5 :m]])
|
|
_ (clj-ml.data/dataset-set-class ds 2)
|
|
_ (clj-ml.data/dataset-set-class tds 2)
|
|
_ (classifier-train c ds)
|
|
res (classifier-evaluate c :dataset ds tds)]
|
|
(is (= 26 (count (keys res))))))
|
|
|
|
(deftest make-classifier-svm-smo-polykernel
|
|
(let [svm (make-classifier :support-vector-machine :smo {:kernel-function {:polynomic {:exponent 2.0}}})]
|
|
(is (= weka.classifiers.functions.supportVector.PolyKernel
|
|
(class (.getKernel svm))))))
|
|
|
|
|
|
(deftest classifier-evaluate-cross-validation
|
|
(let [c (make-classifier :decision-tree :c45)
|
|
ds (clj-ml.data/make-dataset "test" [:a :b {:c [:m :n]}] [[1 2 :m] [4 5 :m]])
|
|
_ (clj-ml.data/dataset-set-class ds 2)
|
|
_ (classifier-train c ds)
|
|
res (classifier-evaluate c :cross-validation ds 2)]
|
|
(is (= 26 (count (keys res))))))
|
|
|
|
(deftest update-updateable-classifier
|
|
(let [c (clj-ml.classifiers/make-classifier :bayes :naive {:updateable true})
|
|
ds (clj-ml.data/make-dataset "test" [:a :b {:c [:m :n]}] [[1 2 :m] [4 5 :m]])
|
|
_ (dataset-set-class ds 2)
|
|
inst (make-instance ds {:a 56 :b 45 :c :m})]
|
|
(classifier-train c ds)
|
|
(classifier-update c ds)
|
|
(classifier-update c inst)
|
|
(is true)))
|