|
1 | 1 | module TestElkan |
2 | 2 |
|
3 | 3 | using ParallelKMeans |
4 | | -using ParallelKMeans: update_containers |
5 | 4 | using Test |
6 | 5 | using Random |
7 | 6 |
|
8 | | -@testset "centroid distances" begin |
9 | | - containers = (centroids_dist = Matrix{Float64}(undef, 3, 3), ) |
10 | | - centroids = [1.0 2.0 4.0; 2.0 1.0 3.0] |
11 | | - update_containers(LightElkan(), containers, centroids, 1) |
12 | | - centroids_dist = containers.centroids_dist |
13 | | - @test centroids_dist[1, 2] == centroids_dist[2, 1] |
14 | | - @test centroids_dist[1, 3] == centroids_dist[3, 1] |
15 | | - @test centroids_dist[2, 3] == centroids_dist[3, 2] |
16 | | - @test centroids_dist[1, 2] == 0.5 |
17 | | - @test centroids_dist[1, 3] == 2.5 |
18 | | - @test centroids_dist[2, 3] == 2.0 |
19 | | - @test centroids_dist[1, 1] == 0.5 |
20 | | - @test centroids_dist[2, 2] == 0.5 |
21 | | - @test centroids_dist[3, 3] == 2.0 |
22 | | -end |
23 | | - |
24 | | -@testset "basic kmeans light elkan" begin |
25 | | - X = [1. 2. 4.;] |
26 | | - res = kmeans(LightElkan(), X, 1; n_threads = 1, tol = 1e-6, verbose = false) |
27 | | - @test res.assignments == [1, 1, 1] |
28 | | - @test res.centers[1] ≈ 2.3333333333333335 |
29 | | - @test res.totalcost ≈ 4.666666666666666 |
30 | | - @test res.converged |
31 | | - |
32 | | - res = kmeans(LightElkan(), X, 2; n_threads = 1, init = [1.0 4.0], tol = 1e-6, verbose = false) |
33 | | - @test res.assignments == [1, 1, 2] |
34 | | - @test res.centers ≈ [1.5 4.0] |
35 | | - @test res.totalcost ≈ 0.5 |
36 | | - @test res.converged |
37 | | -end |
38 | | - |
39 | | -@testset "no convergence yield last result" begin |
40 | | - X = [1. 2. 4.;] |
41 | | - res = kmeans(LightElkan(), X, 2; n_threads = 1, init = [1.0 4.0], tol = 1e-6, max_iters = 1, verbose = false) |
42 | | - @test !res.converged |
43 | | - @test res.totalcost ≈ 0.5 |
44 | | -end |
45 | | - |
46 | | -@testset "singlethread linear separation" begin |
47 | | - Random.seed!(2020) |
48 | | - |
49 | | - X = rand(3, 100) |
50 | | - res = kmeans(LightElkan(), X, 3; n_threads = 1, tol = 1e-6, verbose = false) |
51 | | - |
52 | | - @test res.totalcost ≈ 14.16198704459199 |
53 | | - @test res.converged |
54 | | - @test res.iterations == 11 |
55 | | -end |
56 | | - |
57 | | -@testset "multithread linear separation quasi two threads" begin |
58 | | - Random.seed!(2020) |
59 | | - |
60 | | - X = rand(3, 100) |
61 | | - res = kmeans(LightElkan(), X, 3; n_threads = 2, tol = 1e-6, verbose = false) |
62 | | - |
63 | | - @test res.totalcost ≈ 14.16198704459199 |
64 | | - @test res.converged |
65 | | -end |
66 | | - |
67 | 7 | @testset "basic kmeans elkan" begin |
68 | 8 | X = [1. 2. 4.;] |
69 | 9 | res = kmeans(Elkan(), X, 1; n_threads = 1, tol = 1e-6, verbose = false) |
|
94 | 34 |
|
95 | 35 | @test res.totalcost ≈ 14.16198704459199 |
96 | 36 | @test !res.converged |
97 | | - @test res.iterations == 11 |
| 37 | + @test res.iterations == 10 |
98 | 38 | end |
99 | 39 |
|
100 | 40 | @testset "elkan multithread linear separation quasi two threads" begin |
|
0 commit comments