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 package org.openimaj.demos.ml.linear.data;
31
32 import java.util.ArrayList;
33 import java.util.List;
34
35 import org.openimaj.ml.linear.data.FixedDataGenerator;
36 import org.openimaj.ml.linear.kernel.LinearVectorKernel;
37 import org.openimaj.ml.linear.learner.perceptron.DoubleArrayKernelPerceptron;
38 import org.openimaj.ml.linear.learner.perceptron.MeanCenteredKernelPerceptron;
39 import org.openimaj.ml.linear.learner.perceptron.PerceptronClass;
40 import org.openimaj.ml.linear.learner.perceptron.ThresholdDoubleArrayKernelPerceptron;
41 import org.openimaj.util.pair.IndependentPair;
42
43 import cern.colt.Arrays;
44
45
46
47
48
49 public class WikipediaPerceptronExample {
50
51
52
53
54 public static void main(String[] args) {
55 thresholded(createData());
56 centered(createData());
57 }
58
59 private static void centered(FixedDataGenerator<double[], PerceptronClass> fdg) {
60 System.out.println("CENTERED");
61 final DoubleArrayKernelPerceptron mkp = new MeanCenteredKernelPerceptron(new LinearVectorKernel());
62 for (int i = 0; i < 10; i++) {
63 System.out.println("Iteration: " + i);
64 for (int j = 0; j < 4; j++) {
65 final IndependentPair<double[], PerceptronClass> v = fdg.generate();
66 final double[] x = v.firstObject();
67 final PerceptronClass y = v.secondObject();
68 final PerceptronClass yestb = mkp.predict(x);
69 mkp.process(x, y);
70 final PerceptronClass yesta = mkp.predict(x);
71
72 System.out.println(String.format("x: %s, y: %s, ypred_b: %s, ypred_a: %s", Arrays.toString(x), y, yestb,
73 yesta));
74
75 }
76 }
77 }
78
79 private static FixedDataGenerator<double[], PerceptronClass> createData() {
80
81 final List<IndependentPair<double[], PerceptronClass>> data = new ArrayList<IndependentPair<double[], PerceptronClass>>();
82 data.add(IndependentPair.pair(new double[] { 1, 0, 0 }, PerceptronClass.TRUE));
83 data.add(IndependentPair.pair(new double[] { 1, 0, 1 }, PerceptronClass.TRUE));
84 data.add(IndependentPair.pair(new double[] { 1, 1, 0 }, PerceptronClass.TRUE));
85 data.add(IndependentPair.pair(new double[] { 1, 1, 1 }, PerceptronClass.FALSE));
86 final FixedDataGenerator<double[], PerceptronClass> fdg = new FixedDataGenerator<double[], PerceptronClass>(data);
87 return fdg;
88 }
89
90 private static void thresholded(
91 FixedDataGenerator<double[], PerceptronClass> fdg)
92 {
93 System.out.println("Thresholded");
94 final DoubleArrayKernelPerceptron mkp = new ThresholdDoubleArrayKernelPerceptron(new LinearVectorKernel());
95 for (int i = 0; i < 10; i++) {
96 System.out.println("Iteration: " + i);
97 for (int j = 0; j < 4; j++) {
98 final IndependentPair<double[], PerceptronClass> v = fdg.generate();
99 final double[] x = v.firstObject();
100 final PerceptronClass y = v.secondObject();
101 final PerceptronClass yestb = mkp.predict(x);
102 mkp.process(x, y);
103 final PerceptronClass yesta = mkp.predict(x);
104
105 System.out.println(String.format("x: %s, y: %s, ypred_b: %s, ypred_a: %s", Arrays.toString(x), y, yestb,
106 yesta));
107
108 }
109 }
110 }
111
112 }