forked from bmabey/clj-ml
/
io.clj
86 lines (69 loc) · 2.64 KB
/
io.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
;;
;; Storing and reading data from different formats
;; @author Antonio Garrote
;;
(ns #^{:author "Antonio Garrote <antoniogarrote@gmail.com>"}
clj-ml.io
"Functions for reading and saving datasets, classifiers and clusterers to files and other
persistence mechanisms."
(:import (weka.core.converters CSVLoader ArffLoader XRFFLoader LibSVMLoader)
(weka.core.converters CSVSaver ArffSaver XRFFSaver LibSVMSaver)
(java.io File InputStream OutputStream)
(java.net URL URI))
(:use [clojure.java.io :only [input-stream output-stream]]))
;; Loading of instances
(defmulti load-instances
"Load instances from different data sources"
(fn [kind source & options] kind))
(defmacro m-load-instances [loader source]
`(do
(if (= (class ~source) java.io.File)
(.setFile ~loader ~source)
(.setSource ~loader (if (= (class ~source) java.lang.String)
(input-stream ~source)
^InputStream ~source)))
(.getDataSet ~loader)))
(defmethod load-instances :arff
([kind source & options]
(let [loader (new ArffLoader)]
(m-load-instances loader source))))
(defmethod load-instances :xrff
([kind source & options]
(let [loader (new XRFFLoader)]
(m-load-instances loader source))))
(defmethod load-instances :csv
([kind source & options]
(let [loader (new CSVLoader)]
(m-load-instances loader source))))
(defmethod load-instances :libsvm
([kind source & options]
(let [loader (new LibSVMLoader)]
(m-load-instances loader source))))
;; Saving of instances
(defmulti save-instances
"Save instances into data destinies"
(fn [kind destiny instances & options] kind))
(defmacro m-save-instances [saver destiny instances]
`(do
(condp #(isa? %2 %1) (class ~destiny)
String (.setDestination ~saver (output-stream ~destiny))
File (.setFile ~saver ~destiny)
OutputStream (.setDestination ~saver ~destiny))
(.setInstances ~saver ~instances)
(.writeBatch ~saver)))
(defmethod save-instances :arff
([kind destiny instances & options]
(let [saver (new ArffSaver)]
(m-save-instances saver destiny instances))))
(defmethod save-instances :xrff
([kind destiny instances & options]
(let [saver (new XRFFSaver)]
(m-save-instances saver destiny instances))))
(defmethod save-instances :csv
([kind destiny instances & options]
(let [saver (new CSVSaver)]
(m-save-instances saver destiny instances))))
(defmethod save-instances :libsvm
([kind destiny instances & options]
(let [saver (new LibSVMSaver)]
(m-save-instances saver destiny instances))))