(ns code.preprocessors.utils.bestk (:use (code.learners.knn knn_classifier)) (:use (code.utils utils folds)) (:use (code.experiments knn prep)) (:use (incanter core stats))) (declare superk bestk1) (defn bestk [n x y distance] "n = 5, x = 10, y = data number" (let [one (apply concat (map #(bestk1 n x % distance) (second (nth cdatasets y)))) two (apply min (map first one)) bk (second (first (sort-by second (filter #(= (first %) two) one))))] bk)) (defn bestk1 [n x D distance] (let [pro-folds (folds D n)] (loop [fold pro-folds result []] (if (empty? fold) result (recur (rest fold) (conj result (let [training (:train (first fold))] (superk training x distance)))))))) (defn superk [D x distance] (let [dat D N (take x dat) TN (loop [d D result []] (if (empty? d) (remove #(= 'none %) result) (recur (rest d) (conj result (if (member? (first d) N) 'none (first d)))))) bk (loop [k (range 1 (+ 1 (count TN))) result []] (if (empty? k) (first (sort-by first result)) (recur (rest k) (conj result (let [got (map #(knn-classifier (butlast %) (first k) TN distance) N) want (last (Transpose N)) goals (unique-goals D) pf (median (map second (abcd-stats want got goals)))] [pf (first k)])))))] bk))