clj-ml/test/clj_ml/clusterers_test.clj

53 lines
2.2 KiB
Clojure

(ns clj-ml.clusterers-test
(:use [clj-ml clusterers data] :reload-all)
(:use clojure.test midje.sweet))
(deftest make-clusterers-options-k-means
(fact
(let [options (vec (make-clusterer-options :k-means {:display-standard-deviation true :replace-missing-values true :preserve-instances-order true
:number-clusters 3 :random-seed 2 :number-iterations 1}))]
options => (just ["" "-V" "-M" "-O" "-N" "3" "-S" "2" "-I" "1"] :in-any-order))))
(deftest make-clusterers-options-expectation-maximization
(fact
(let [options (vec (make-clusterer-options :expectation-maximization {:number-clusters 3 :maximum-iterations 10 :minimum-standard-deviation 0.001 :random-seed 30}))]
options => (just ["" "-N" "3" "-I" "10" "-M" "0.001" "-S" "30"] :in-any-order))))
(deftest make-and-build-clusterer
(let [ds (make-dataset :test [:a :b] [[1 2] [3 4]])
c (make-clusterer :k-means)]
(clusterer-build c ds)
(is (= weka.clusterers.SimpleKMeans (class c)))))
(deftest make-clusterer-with-distance
(let [c (clj-ml.clusterers/make-clusterer :k-means {:distance-function {:manhattan {:attributes [0 1 2]}}})]
(is (= weka.core.ManhattanDistance (class (.getDistanceFunction c))))))
(deftest test-make-cobweb
(let [ds (make-dataset :test [:a :b] [[1 2] [3 4]])
c (make-clusterer :cobweb)]
(clusterer-build c ds)
(is true)))
(deftest test-update-clusterer-cobweb
(let [ds (make-dataset :test [:a :b] [])
c (make-clusterer :cobweb)]
(clusterer-build c ds)
(clusterer-update c (clj-ml.data/make-instance ds [1 2]))
(is true)))
(deftest test-update-clusterer-cobweb-many-instances
(let [ds (make-dataset :test [:a :b] [])
c (make-clusterer :cobweb)
to-update (make-dataset :test [:a :b] [[1 2] [3 4]])]
(clusterer-build c ds)
(clusterer-update c to-update)
(is true)))
(deftest test-evaluate-clusterer-cross-validation
(let [ds (make-dataset :test [:a :b] [[1 2] [3 4] [5 6]])
c (make-clusterer :expectation-maximization)]
(clusterer-build c ds)
(clusterer-evaluate c :cross-validation ds 2)
(is true)))