Відображення між двома наборами результатів легко обчислити, оскільки інформація, яку ви отримуєте в тесті, може бути представлена у вигляді набору з трьох кортежів: перший компонент є (багатовимірною) точкою, другий - міткою довільної кластери надається вашим алгоритмом, а третя - мітка (довільна) кластера, що постачається опорним алгоритмом. Побудуйте по kккТаблиця класифікації пар міток: якщо результати узгоджуються, це буде кратним матриці перестановки. Тобто кожен рядок і кожен стовпець повинні мати рівно одну ненульову комірку. Це проста перевірка програми. Також легко відстежувати невеликі відхилення від цього ідеального повернення до окремих точок даних, щоб ви могли точно бачити, як відрізняються обидві відповіді, якщо вони взагалі відрізняються. Я б не покладався на обчислення статистичних заходів узгодження: або існує досконала згода (аж до перестановки), або її немає, і в останньому випадку вам потрібно відстежити всі точки розбіжності, щоб зрозуміти, як вони відбуваються. Результати або згодні, або вони не відповідають; будь-яка кількість розбіжностей, навіть лише в одному пункті, потребує перевірки.
Для тестування ви можете використовувати кілька типів наборів даних: (1) опубліковані набори даних з опублікованими результатами k-засобів; (2) синтетичні набори даних із очевидними сильними кластерами; (3) синтетичні набори даних без явного кластеризації. (1) - це хороша дисципліна, яку слід використовувати, коли ви пишете будь-яку програму з математики чи статистики. (2) це легко зробити багатьма способами, наприклад, генеруючи деякі випадкові точки, що служать центрами кластерів, а потім генерувати хмари точок шляхом випадкового переміщення центрів кластерів порівняно невеликими кількостями. (3) надає деякі випадкові перевірки, які потенційно можуть виявити несподівані поведінки; знову ж таки, це хороша загальна дисципліна тестування.
Крім того, розгляньте можливість створення наборів даних, які підкреслюють алгоритм, лежачи просто на межах між крайніми рішеннями. Для цього знадобиться творчість і глибоке розуміння алгоритму (який, мабуть, у вас є!). Одним із прикладів, який я хотів би перевірити в будь-якому випадку, були б набори векторів форми де v - вектор без нульових компонентів, і я приймає послідовні цілісні значення 0 , 1 , 2 , … , n - 1 . Я також хотів би перевірити алгоритм на множинах векторів, які утворюють рівносторонні багатокутники. В будь-якій ситуації випадки, коли n - нія vvi0 , 1 , 2 , … , n - 1нкратно , особливо цікаві, в тому числі , де п є менше , ніж до . Загальним для цих ситуацій є те, що (а) вони використовують усі виміри проблеми, але (б) правильні рішення є геометрично очевидними, і (в) є кілька правильних рішень.кнк
г≥ 2уv2 дхzхz
w = z -( z ⋅ x ) x .
ушхухугнcos( 2 πk / n ) x + sin( 2 πк / п ) ук0n - 1