Сопоставление двух наборов результатов легко вычислить, поскольку информация, которую вы получаете в тесте, может быть представлена в виде набора из трех кортежей: первый компонент (многомерная) точка, второй - (произвольная) метка кластера предоставляется вашим алгоритмом, а третий - (произвольная) метка кластера, предоставляемая эталонным алгоритмом. Построить по kККтаблица классификации для пар меток: если результаты совпадают, она будет кратна матрице перестановок. То есть каждая строка и каждый столбец должны иметь ровно одну ненулевую ячейку. Это простая проверка для программирования. Также очень просто отследить небольшие отклонения от этого идеала до отдельных точек данных, чтобы вы могли точно увидеть, как эти два ответа отличаются, если они различаются вообще. Я бы не стал подсчитывать статистические показатели согласия: либо есть совершенное согласие (вплоть до перестановки), либо его нет, и в последнем случае вам необходимо отследить все точки несогласия, чтобы понять, как они возникают. Результаты либо совпадают, либо нет; любое количество разногласий, даже в одной точке, нуждается в проверке.
Возможно, вы захотите использовать несколько видов наборов данных для тестирования: (1) опубликованные наборы данных с опубликованными результатами k-средних; (2) синтетические наборы данных с очевидными сильными кластерами; (3) синтетические наборы данных без очевидной кластеризации. (1) - хорошая дисциплина, которую следует использовать всякий раз, когда вы пишете какую- либо программу по математике или статистике. (2) это легко сделать многими способами, например, путем генерации некоторых случайных точек, которые будут служить центрами кластеров, а затем генерации облаков точек путем случайного смещения центров кластеров на относительно небольшие величины. (3) предоставляет некоторые случайные проверки, которые потенциально могут обнаружить неожиданное поведение; опять же, это хорошая общая дисциплина тестирования.
Кроме того, рассмотрите возможность создания наборов данных, которые подчеркивают алгоритм, лежа на границах между крайними решениями. Это потребует творческого подхода и глубокого понимания вашего алгоритма (который, вероятно, у вас есть!). Одним примером, который я хотел бы проверить в любом событии, были бы наборы векторов вида где v - вектор без нулевых компонентов, и i принимает последовательные целые значения 0 , 1 , 2 , … , n - 1 . Я также хотел бы проверить алгоритм на множествах векторов, которые образуют равносторонние многоугольники. В любой ситуации, случаи , когда п является нея вvя0 , 1 , 2 , … , n - 1Nкратно , особенно интересны, в том числе , где п есть меньше , чем к . Общим для этих ситуаций является то, что (а) они используют все измерения проблемы, но (б) правильные решения геометрически очевидны, и (в) существует множество правильных решений.КNК
d≥ 2Uv2 дИксZИксZ
w = z -( z ⋅ x ) x .
YвесИксYИксYdNсоз( 2 πк / н ) х + грех( 2 πк / н ) уК0n - 1