Odwzorowanie między dwoma zestawami wyników jest łatwe do obliczenia, ponieważ informacje uzyskane w teście mogą być reprezentowane jako zbiór trzech krotek: pierwszy składnik to (wielowymiarowy) punkt, drugi to (dowolna) etykieta klastra dostarczany przez algorytm, a trzeci to (dowolna) etykieta klastra dostarczana przez algorytm referencyjny. Skonstruuj na kkktabela klasyfikacji dla par etykiet: jeśli wyniki się zgadzają, będzie to wielokrotność macierzy permutacji. Oznacza to, że każdy wiersz i każda kolumna musi mieć dokładnie jedną niezerową komórkę. To prosta kontrola do zaprogramowania. Łatwo jest również śledzić niewielkie odchylenia od tego idealnego powrotu do poszczególnych punktów danych, dzięki czemu można dokładnie zobaczyć, jak dwie odpowiedzi różnią się, jeśli w ogóle się różnią. Nie zawracałbym sobie głowy obliczeniem statystycznych miar zgodności: albo istnieje idealna zgodność (aż do permutacji), albo jej nie ma, aw tym drugim przypadku musisz wyśledzić wszystkie punkty niezgody, aby zrozumieć, jak one występują. Wyniki albo się zgadzają, albo nie; każda różnica zdań, nawet w jednym punkcie, wymaga sprawdzenia.
Możesz użyć kilku rodzajów zestawów danych do testowania: (1) opublikowanych zestawów danych z opublikowanymi wynikami k-średnich; (2) syntetyczne zestawy danych z oczywistymi silnymi klastrami; (3) syntetyczne zestawy danych bez oczywistego grupowania. (1) jest dobrym dyscyplina w użyciu, gdy piszesz dowolny program matematyki lub statystyki. (2) jest łatwy do zrobienia na wiele sposobów, na przykład poprzez generowanie niektórych losowych punktów służących jako centra skupień, a następnie generowanie chmur punktów przez losowe przemieszczanie centrów skupień stosunkowo niewielkich ilości. (3) zapewnia losowe kontrole, które potencjalnie mogą wykryć nieoczekiwane zachowania; znowu jest to dobra ogólna dyscyplina testowania.
Ponadto rozważ utworzenie zestawów danych, które podkreślają algorytm, leżąc na granicy między ekstremalnymi rozwiązaniami. Będzie to wymagało kreatywności i głębokiego zrozumienia twojego algorytmu (który prawdopodobnie masz!). Jednym z przykładów, które chciałbym sprawdzić w każdym przypadku, byłyby zbiory wektorów postaci gdzie v jest wektorem bez składników zerowych i i przyjmuje sekwencyjne wartości całkowite 0 , 1 , 2 , … , n - 1 . Chciałbym również sprawdzić algorytm na zestawach wektorów, które tworzą wielokąty równoboczne. W obu przypadkach przypadki, w których n nie jestja vvja0 , 1 , 2 , … , n - 1nwielokrotność jest szczególnie interesująca, w tym gdzie n jest mniejsze niż k . Wspólne dla tych sytuacji jest to, że (a) wykorzystują wszystkie wymiary problemu, ale (b) prawidłowe rozwiązania są geometrycznie oczywiste i (c) istnieje wiele poprawnych rozwiązań.knk
(Twórz losowe wielokąty równoboczne w wymiarach , zaczynając od dwóch niezerowych wektorów u i v wybranych losowo. (Dobrym sposobem jest pozostawienie ich 2 d składowych niezależnym standardowym zmiennym normalnym.) Przeskaluj je, aby miały długość jednostkową; zadzwońmy te x oraz z . Usunąć x składnik z z za pomocą wzorure≥ 2uv2 dxzxz
w = z - ( z ⋅ x ) x .
Uzyskaj przez przeskalowanie w, aby uzyskać długość jednostki. Jeśli chcesz, równomiernie przeskaluj losowo zarówno x, jak i y . Wektory x i Y tworzą ortogonalną podstawę losowego podprzestrzeni 2d d wymiarach. Równoważny wielokąt n wierzchołków jest uzyskiwany jako zbiór cos ( 2 π k / n ) x + sin ( 2 π k / n ) y, gdy liczba całkowita k wynosi od 0 doywxyxyrensałata( 2 πk / n ) x + sin( 2 πk / n ) yk0 )n - 1