53 lines
2.1 KiB
Clojure
53 lines
2.1 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)))
|