Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Hell yeah, working clojure example.

The output is a bit different than when running
the ruby example with the same input, as there
is not yet a unified way of selecting the "best"
generalization.
  • Loading branch information...
commit 6bfb5da8412714409d7a3befa395224f2d053389 1 parent fb4a3e0
@arthurschreiber authored
Showing with 137 additions and 0 deletions.
  1. +71 −0 clojure/input.csv
  2. +66 −0 clojure/src/example.clj
View
71 clojure/input.csv
@@ -0,0 +1,71 @@
+Nr;Altersgruppe;Geschlecht;Verheiratet;Kinderzahl;Abschluss;Beruf;Einkommen;Buch
+0;19-24;m;nein;0;keiner;Angestellter;3000-3999;Buch_C
+1;25-35;m;nein;1;Realschule;Arbeitslos;1000-1999;Buch_C
+2;36-49;m;nein;0;Hochschule;Angestellter;3000-3999;Buch_C
+3;25-35;m;ja;1;Hochschule;Fuehrungskraft;5000 und mehr;Buch_C
+4;36-49;w;nein;0;Gymnasium;Angestellter;2000-2999;Buch_C
+5;<18;w;nein;0;keiner;Hausfrau;2000-2999;Buch_A
+6;19-24;w;ja;1;Hauptschule;Arbeitslos;1000-1999;Buch_B
+7;25-35;w;ja;1;Hochschule;Arbeitslos;<1000;Buch_C
+8;<18;w;nein;0;keiner;Angestellter;2000-2999;Buch_A
+9;19-24;w;nein;0;keiner;Selbstaendig;1000-1999;Buch_A
+10;50-65;m;nein;0;Promotion;Fuehrungskraft;5000 und mehr;Buch_C
+11;<18;m;nein;0;Realschule;Angestellter;3000-3999;Buch_C
+12;<18;w;ja;1;keiner;Arbeitslos;<1000;Buch_A
+13;36-49;m;nein;0;Hochschule;Angestellter;2000-2999;Buch_C
+14;36-49;w;ja;2;Hochschule;Arbeiter;1000-1999;Buch_C
+15;36-49;w;ja;0;Realschule;Angestellter;1000-1999;Buch_C
+16;36-49;w;nein;0;Hochschule;Hausfrau;3000-3999;Buch_C
+17;25-35;m;nein;1;Hochschule;Angestellter;3000-3999;Buch_C
+18;50-65;m;nein;0;keiner;Rentner;1000-1999;Buch_A
+19;50-65;w;nein;1;Hochschule;Angestellter;2000-2999;Buch_C
+20;25-35;m;nein;1;Gymnasium;Selbstaendig;5000 und mehr;Buch_C
+21;19-24;m;ja;0;Gymnasium;Angestellter;2000-2999;Buch_C
+22;25-35;w;ja;4;Hochschule;Hausfrau;2000-2999;Buch_C
+23;36-49;w;ja;1;keiner;Angestellter;2000-2999;Buch_A
+24;50-65;m;ja;2;Hauptschule;Angestellter;2000-2999;Buch_C
+25;19-24;m;nein;0;Gymnasium;Angestellter;3000-3999;Buch_C
+26;36-49;m;ja;0;Hochschule;Angestellter;2000-2999;Buch_C
+27;36-49;w;ja;2;keiner;Arbeiter;1000-1999;Buch_A
+28;25-35;m;nein;0;Hochschule;Arbeitslos;<1000;Buch_C
+29;50-65;w;nein;0;Promotion;Hausfrau;3000-3999;Buch_C
+30;<18;w;nein;0;keiner;Hausfrau;2000-2999;Buch_A
+31;36-49;m;ja;2;Hochschule;Selbstaendig;2000-2999;Buch_C
+32;<18;m;nein;0;Realschule;Angestellter;1000-1999;Buch_C
+33;36-49;m;nein;0;keiner;Angestellter;1000-1999;Buch_A
+34;36-49;w;nein;0;Hochschule;Selbstaendig;5000 und mehr;Buch_C
+35;19-24;w;nein;0;keiner;Selbstaendig;3000-3999;Buch_B
+36;50-65;m;nein;0;Hochschule;Rentner;2000-2999;Buch_C
+37;<18;m;nein;0;keiner;Angestellter;2000-2999;Buch_A
+38;19-24;w;nein;0;keiner;Hausfrau;4000-4999;Buch_B
+39;25-35;m;nein;0;keiner;Arbeiter;2000-2999;Buch_A
+40;25-35;w;nein;0;Hochschule;Selbstaendig;2000-2999;Buch_C
+41;25-35;w;nein;1;keiner;Hausfrau;4000-4999;Buch_C
+42;25-35;w;nein;0;Realschule;Angestellter;2000-2999;Buch_C
+43;36-49;m;ja;1;Hochschule;Fuehrungskraft;5000 und mehr;Buch_C
+44;36-49;m;nein;1;Hauptschule;Angestellter;3000-3999;Buch_C
+45;25-35;m;nein;0;Hochschule;Selbstaendig;3000-3999;Buch_C
+46;25-35;m;nein;1;Hochschule;Lehrer;2000-2999;Buch_C
+47;19-24;w;nein;0;Hauptschule;Angestellter;2000-2999;Buch_B
+48;25-35;w;ja;1;Hochschule;Lehrer;2000-2999;Buch_C
+49;25-35;m;ja;3;Promotion;Fuehrungskraft;5000 und mehr;Buch_C
+50;25-35;w;ja;0;Hochschule;Hausfrau;3000-3999;Buch_C
+51;19-24;w;nein;0;keiner;Angestellter;3000-3999;Buch_B
+52;<18;m;ja;0;keiner;Angestellter;2000-2999;Buch_A
+53;36-49;w;ja;3;keiner;Angestellter;2000-2999;Buch_A
+54;<18;w;ja;0;Realschule;Angestellter;2000-2999;Buch_B
+55;19-24;m;nein;0;keiner;Arbeiter;1000-1999;Buch_A
+56;<18;m;nein;0;keiner;Angestellter;3000-3999;Buch_C
+57;36-49;m;nein;1;Hauptschule;Angestellter;2000-2999;Buch_C
+58;19-24;w;nein;0;keiner;Hausfrau;2000-2999;Buch_A
+59;19-24;w;nein;0;Hauptschule;Hausfrau;1000-1999;Buch_B
+60;19-24;w;nein;0;Gymnasium;Angestellter;2000-2999;Buch_B
+61;19-24;w;nein;0;Gymnasium;Angestellter;2000-2999;Buch_B
+62;>65;w;ja;1;Hochschule;Rentner;2000-2999;Buch_C
+63;36-49;w;nein;0;keiner;Hausfrau;<1000;Buch_A
+64;36-49;w;nein;0;Gymnasium;Angestellter;2000-2999;Buch_C
+65;19-24;m;nein;0;Realschule;Arbeitslos;2000-2999;Buch_C
+66;25-35;m;nein;1;keiner;Arbeitslos;3000-3999;Buch_C
+67;50-65;m;ja;2;Realschule;Arbeiter;2000-2999;Buch_C
+68;19-24;w;ja;0;Gymnasium;Hausfrau;3000-3999;Buch_B
+69;36-49;w;ja;0;Hochschule;Angestellter;2000-2999;Buch_C
View
66 clojure/src/example.clj
@@ -0,0 +1,66 @@
+(ns example
+ (:use [clojure.java.io :only (reader)])
+ (:use [clojure.string :only (split)])
+)
+
+(load "src/version_space")
+
+
+(defn get-positive-examples [groups key]
+ (map (fn [example]
+ (rest (butlast example))
+ ) (get groups key))
+)
+
+(defn get-negative-examples [groups key]
+ (map (fn [example]
+ (rest (butlast example))
+ ) (reduce concat '() (vals (dissoc groups key))))
+)
+
+(defn gen-star [pos_example negatives]
+ (first
+ (reduce (fn [vs neg_example]
+ (version-space/negative-example vs neg_example)
+ ) (version-space/positive-example
+ (version-space/gen-version-space (count pos_example))
+ pos_example
+ ) negatives)
+ )
+)
+
+(defn gen-best-generalization [pos_example negatives]
+ ; TODO "bessere" generalisierung wählen
+ (first (gen-star pos_example negatives))
+)
+
+(defn gen-concept-space-helper [positives negatives k]
+ (if
+ (empty? positives) k
+ (let [ g (gen-best-generalization (first positives) negatives) ]
+ (gen-concept-space-helper
+ (remove (fn [pos_example]
+ (version-space/more-general? g pos_example)
+ ) positives)
+ negatives (cons g k))
+ )
+ )
+)
+
+(defn gen-concept-space [positives negatives]
+ (gen-concept-space-helper positives negatives '())
+)
+
+(let [ examples (map (fn [line] (split line #";")) (rest (line-seq (reader "input.csv"))))
+ vs (version-space/gen-version-space (count (first examples)))
+ groups (group-by (fn [example] (last example)) examples) ]
+
+ (doseq [key (keys groups)]
+ (let [ positives (get-positive-examples groups key)
+ negatives (get-negative-examples groups key) ]
+
+ (println "K für" key)
+ (doseq [k (gen-concept-space positives negatives)] (println k))
+ )
+ )
+)
Please sign in to comment.
Something went wrong with that request. Please try again.