]> gitweb.factorcode.org Git - factor.git/commitdiff
machine-learning: Add transform protocol. Add label-encoder, label-binarizer.
authorDoug Coleman <doug.coleman@gmail.com>
Tue, 4 Dec 2012 19:43:48 +0000 (11:43 -0800)
committerDoug Coleman <doug.coleman@gmail.com>
Tue, 4 Dec 2012 19:45:24 +0000 (11:45 -0800)
extra/machine-learning/label-binarizer/authors.txt [new file with mode: 0644]
extra/machine-learning/label-binarizer/label-binarizer-tests.factor [new file with mode: 0644]
extra/machine-learning/label-binarizer/label-binarizer.factor [new file with mode: 0644]
extra/machine-learning/label-encoder/authors.txt [new file with mode: 0644]
extra/machine-learning/label-encoder/label-encoder-tests.factor [new file with mode: 0644]
extra/machine-learning/label-encoder/label-encoder.factor [new file with mode: 0644]
extra/machine-learning/transformer/authors.txt [new file with mode: 0644]
extra/machine-learning/transformer/transformer.factor [new file with mode: 0644]

diff --git a/extra/machine-learning/label-binarizer/authors.txt b/extra/machine-learning/label-binarizer/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/extra/machine-learning/label-binarizer/label-binarizer-tests.factor b/extra/machine-learning/label-binarizer/label-binarizer-tests.factor
new file mode 100644 (file)
index 0000000..65c38f9
--- /dev/null
@@ -0,0 +1,16 @@
+! Copyright (C) 2012 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel machine-learning.label-binarizer
+machine-learning.transformer tools.test ;
+IN: machine-learning.label-binarizer.tests
+
+{ { { 1 0 0 0 } { 0 0 0 1 } } } [
+    <label-binarizer> { 1 2 6 4 2 } over fit-y
+    { 1 6 } swap transform-y
+] unit-test
+
+{ { 1 6 } } [
+    <label-binarizer> { 1 2 6 4 2 } over fit-y
+    { 1 6 } over transform-y swap inverse-transform-y
+] unit-test
+
diff --git a/extra/machine-learning/label-binarizer/label-binarizer.factor b/extra/machine-learning/label-binarizer/label-binarizer.factor
new file mode 100644 (file)
index 0000000..60fcfd6
--- /dev/null
@@ -0,0 +1,23 @@
+! Copyright (C) 2012 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors arrays fry kernel machine-learning.transformer
+math.extras sequences sets sorting ;
+IN: machine-learning.label-binarizer
+
+TUPLE: label-binarizer classes_ ;
+
+: <label-binarizer> ( -- lb )
+    label-binarizer new ; inline
+
+M: label-binarizer fit-y
+    [ members natural-sort ] dip classes_<< ;
+
+M: label-binarizer transform-y
+    classes_>> dup length '[
+        _ search-sorted [ 1 ] dip _ 0 <array> [ set-nth ] keep
+    ] map ;
+
+M: label-binarizer inverse-transform-y
+    classes_>> '[
+        [ 1 = ] find drop _ nth
+    ] map ;
diff --git a/extra/machine-learning/label-encoder/authors.txt b/extra/machine-learning/label-encoder/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/extra/machine-learning/label-encoder/label-encoder-tests.factor b/extra/machine-learning/label-encoder/label-encoder-tests.factor
new file mode 100644 (file)
index 0000000..235bb48
--- /dev/null
@@ -0,0 +1,10 @@
+! Copyright (C) 2012 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel machine-learning.label-encoder
+machine-learning.transformer tools.test ;
+IN: machine-learning.label-encoder.tests
+
+{ { 1 3 2 4 } } [
+    <label-encoder> { 1 2 3 4 3 2 3 2 2 3 2 } over fit-y
+    { 1 3 2 4 } over transform-y swap inverse-transform-y
+] unit-test
diff --git a/extra/machine-learning/label-encoder/label-encoder.factor b/extra/machine-learning/label-encoder/label-encoder.factor
new file mode 100644 (file)
index 0000000..35f1f6e
--- /dev/null
@@ -0,0 +1,18 @@
+! Copyright (C) 2012 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors fry kernel locals machine-learning.transformer
+math.extras sequences sets sorting ;
+IN: machine-learning.label-encoder
+
+TUPLE: label-encoder classes_ ;
+
+: <label-encoder> ( -- le ) label-encoder new ; inline
+
+M: label-encoder fit-y ( y transformer -- )
+    [ members natural-sort ] dip classes_<< ;
+
+M: label-encoder transform-y ( y transformer -- y' )
+    classes_>> '[ _ search-sorted ] map ;
+
+M: label-encoder inverse-transform-y ( y' transformer -- y )
+    classes_>> '[ _ nth ] map ;
diff --git a/extra/machine-learning/transformer/authors.txt b/extra/machine-learning/transformer/authors.txt
new file mode 100644 (file)
index 0000000..7c1b2f2
--- /dev/null
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/extra/machine-learning/transformer/transformer.factor b/extra/machine-learning/transformer/transformer.factor
new file mode 100644 (file)
index 0000000..d8d6618
--- /dev/null
@@ -0,0 +1,9 @@
+! Copyright (C) 2012 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: ;
+IN: machine-learning.transformer
+
+GENERIC: fit-y ( y transformer -- )
+GENERIC: transform-y ( y transformer -- y' )
+GENERIC: inverse-transform-y ( y transformer -- y' )
+