18
18
package org .apache .spark .mllib .regression ;
19
19
20
20
import java .io .Serializable ;
21
- import java .util .ArrayList ;
22
- import java .util .Arrays ;
23
21
import java .util .List ;
24
22
25
- import org .apache .spark .api .java .JavaDoubleRDD ;
26
23
import scala .Tuple3 ;
27
24
25
+ import com .google .common .collect .Lists ;
28
26
import org .junit .After ;
29
27
import org .junit .Assert ;
30
28
import org .junit .Before ;
31
29
import org .junit .Test ;
32
30
31
+ import org .apache .spark .api .java .JavaDoubleRDD ;
33
32
import org .apache .spark .api .java .JavaRDD ;
34
33
import org .apache .spark .api .java .JavaSparkContext ;
35
34
36
35
public class JavaIsotonicRegressionSuite implements Serializable {
37
36
private transient JavaSparkContext sc ;
38
37
39
38
private List <Tuple3 <Double , Double , Double >> generateIsotonicInput (double [] labels ) {
40
- List <Tuple3 <Double , Double , Double >> input = new ArrayList <> ();
39
+ List <Tuple3 <Double , Double , Double >> input = Lists . newArrayList ();
41
40
42
- for (int i = 1 ; i <= labels .length ; i ++) {
43
- input .add (new Tuple3 (labels [i -1 ], (double )i , 1d ));
41
+ for (int i = 1 ; i <= labels .length ; i ++) {
42
+ input .add (new Tuple3 < Double , Double , Double > (labels [i -1 ], (double ) i , 1d ));
44
43
}
45
44
46
45
return input ;
47
46
}
48
47
49
- private double difference (List <Tuple3 <Double , Double , Double >> expected , IsotonicRegressionModel model ) {
50
- double diff = 0 ;
51
-
52
- for (int i = 0 ; i < model .predictions ().length ; i ++) {
53
- Tuple3 <Double , Double , Double > exp = expected .get (i );
54
- diff += Math .abs (model .predict (exp ._2 ()) - exp ._1 ());
55
- }
56
-
57
- return diff ;
58
- }
59
-
60
48
private IsotonicRegressionModel runIsotonicRegression (double [] labels ) {
61
49
JavaRDD <Tuple3 <Double , Double , Double >> trainRDD =
62
- sc .parallelize (generateIsotonicInput (labels )).cache ();
50
+ sc .parallelize (generateIsotonicInput (labels ), 2 ).cache ();
63
51
64
52
return new IsotonicRegression ().run (trainRDD );
65
53
}
@@ -80,20 +68,16 @@ public void testIsotonicRegressionJavaRDD() {
80
68
IsotonicRegressionModel model =
81
69
runIsotonicRegression (new double []{1 , 2 , 3 , 3 , 1 , 6 , 7 , 8 , 11 , 9 , 10 , 12 });
82
70
83
- List <Tuple3 <Double , Double , Double >> expected =
84
- generateIsotonicInput (new double [] {1 , 2 , 7d /3 , 7d /3 , 7d /3 , 6 , 7 , 8 , 10 , 10 , 10 , 12 });
85
-
86
- Assert .assertTrue (difference (expected , model ) == 0 );
71
+ Assert .assertArrayEquals (
72
+ new double [] {1 , 2 , 7d /3 , 7d /3 , 6 , 7 , 8 , 10 , 10 , 12 }, model .predictions (), 1e-14 );
87
73
}
88
74
89
75
@ Test
90
76
public void testIsotonicRegressionPredictionsJavaRDD () {
91
77
IsotonicRegressionModel model =
92
78
runIsotonicRegression (new double []{1 , 2 , 3 , 3 , 1 , 6 , 7 , 8 , 11 , 9 , 10 , 12 });
93
79
94
- JavaDoubleRDD testRDD =
95
- sc .parallelizeDoubles (Arrays .asList (new Double [] {0.0 , 1.0 , 9.5 , 12.0 , 13.0 }));
96
-
80
+ JavaDoubleRDD testRDD = sc .parallelizeDoubles (Lists .newArrayList (0.0 , 1.0 , 9.5 , 12.0 , 13.0 ));
97
81
List <Double > predictions = model .predict (testRDD ).collect ();
98
82
99
83
Assert .assertTrue (predictions .get (0 ) == 1d );
@@ -102,4 +86,4 @@ public void testIsotonicRegressionPredictionsJavaRDD() {
102
86
Assert .assertTrue (predictions .get (3 ) == 12d );
103
87
Assert .assertTrue (predictions .get (4 ) == 12d );
104
88
}
105
- }
89
+ }
0 commit comments