;;;TODO-1 Определяет функцию list-Average, которая вычисляет среднее значение списка.
;;;Примечание: если список пуст, эта функция должна вернуть -1000
;;;Для этой функции необходимо выполнить не менее 5 модульных тестов (deflabel todo-1)
(среднее значение по списку (l)
0; заменить эту строку на правильное определение
)
(ожидание чека (среднее по списку (список 4 6 5)) 5)
(ожидание чека (среднее по списку (список 12 17 16)) 15)
;;;TODO-2 Определяет функцию кластер-центров, которая вычисляет центры по
;;;список элементов кластера
;;;Убедитесь, что у вас есть как минимум 5 модульных тестов для этой функции
(deflabel todo-2)
(defun cluster-центров (кластеров)
ноль; замените эту строку направильное определение
)
(проверка-ожидание (кластер-центры (список (список 4 6 5) (список 12 17 16) (список 23 27))) (список 5 15 25))
;;;TODO-3 Определить ближайший кластер, который находит центр кластера,
;;;ближе всего к конкретной точке. Если два центра одинаково близки, выберите
;;;тот, который находится раньше в списке.
;;;Обязательно проведите не менее 5 юнит-тестов для этой функции
;;;Подсказка;Взгляните на определение и определение уравнений для "min"
;;;функция, заданная в классе.
(deflabel todo-3)
(определение ближайшего кластера (центры точек)
0; замените эту строку на правильное определение
)
(ожидаемый чек (ближайший кластер 6 (список 5 15 25)) 5)
(ожидающий чек (ближайший кластер 14 (список 5 15 25)) 15)
;;;TODO-4 Определите функцию add-to-cluster, которая добавляет точку к
;;;кластер это принадлежит. Можно предположить, что центры кластеров и
;;;элементы кластера - это списки одинаковой длины (как описано выше)
;;;Обязательно проведите как минимум 5 модульных тестов для этой функции
;;;Подсказка: обратите внимание, что в этой функции нет оснований ожидать, что центры
;;;на самом деле центры кластеров в кластерах!
(deflabel todo-4)
(defun add-to-cluster (точки кластеров центров с ближайшими центрами)
ноль; замените эту строку на правильное определение
)
(ожидаемый чек (add-to-cluster 6 5 (список 5 15 25)) (список (список 4 6 5) (список 12 17)16) (список 23 27)))
(list (list 6 4 6 5) (list 12 17 16) (list 23 27)))
(проверка-ожидание (добавление в кластер 14 15 (список 5 15 25)) (список (список 4 6 5) (список 12 17 16)(список 23 27)))
(list (list 4 6 5) (list 14 12 17 16) (list 23 27)))
;;; TODO-5 Определите функцию add-all-points-to-cluster, которая добавляет все точки
;;; всписок к соответствующему кластеру. Обязательно добавьте точки так, чтобы
;;; точки в возвращенном кластере были в том же порядке, что и в
;;; список ввода
;;; Обязательно проведите не менее 5 юнит-тестов для этой функции
;;; Совет: обратите внимание, что в этой функции нет оснований ожидать, что центры
;;; на самом деле центры кластеров в кластерах!
(deflabel todo-5)
(defun add-all-points-to-cluster (кластеры центров точек)
ноль;замените эту строку на правильное определение
)
(ожидание проверки (добавление всех точек в кластер (список 6))
(list 5 15 25)
(list nil nil nil))
(list (list 6) nil nil))
(ожидание проверки(добавить все точки в кластер (список 6 24)
(list 5 15 25)
(list (list 4 6 5) (list 12 17 16) (list 23 27)))
(list (list 6 4 6 5) (list 12 17 16) (list 24 23 27)))
;;; TODO-6 Определить функцию под названием step-k-means, которая делает один шаг в k-средних
;;; алгоритм. То есть, учитывая список элементов кластера, он возвращает
;;; новый список элементов кластера (после выяснения, что центр кластера действительно
;;; ближайший к каждому из элементов кластера)
;;; Обязательно проведите не менее 5 модульных тестов для этой функции
(deflabel todo-6)
(defun step-k-means (кластеры)
ноль;заменить эту строку на правильное определение
)
(проверка-ожидание (step-k-means (список (список 4 15 5) (список 12 26 16) (список 23 7)))
(list (list 4 5 7) (list 26 23) (list 15 12 16)))
;;; TODO-7 Определить функцию run-k-средних, которая выполняет "n" шагов
;;; алгоритм k-средних
;;; Убедитесь, что у вас есть как минимум 5 модульных тестов для этой функции
(deflabel todo-7)
(defun run-k-means (n кластеров)
ноль; заменить эту строку на правильное определение
)
(проверка-ожидание (run-k-means 2 (список (список 4 15 5) (список 12 26 16) (список 23 7))))
(list (list 4 5 7) (list 26 23) (list 15 12 16)))
;;; TODO-8 Определите начальные центры функции, которые находят "k", равномерно распределенные
;;; центры кластеров между двумя границами. Обратите внимание, чтобыть фиксированным
;;; количеством места между каждым центром кластера, и что должно быть половина
;;; это количество между нижним (верхним) пределом и первым (последним)центр
;;; Убедитесь, что у вас минимум 5 единиц тестаts для этой функции
(deflabel todo-8)
(defun начальные центры (k нижний верхний)
ноль;замените эту строку на правильное определение
)
(ожидаемая проверка (начальные центры 5 0 100)
(list 10 30 50 70 90))
;;; TODO-9 Определите функцию k-means-clustering, которая объединяет перечисленные выше функции
;; для выполнения кластеризации k-средних по списку точек.
;;; параметры k и n задают количество кластерови
;;; число шагов, которые необходимо предпринять для алгоритма k-средних. Нижний и верхний
;;; - это диапазон, используемый для поиска кластеров
;;; Обязательно проведите не менее 5 модульных тестов для этой функции
(deflabel todo-9)
(defun k-средних-кластеризация (kn нижние верхние точки)
ноль; заменить эту строку на правильное определение
)
(проверка-ожидание (k-средних-кластеризация 3 10 0 40 (список 4 6 5 12 17 16 23 27))
(list (list 4 6 5) (list 12 17 16) (list 23 27)))
;;; TODO-10 Один из способов измерить качество найденных кластеров -
;;; вычислить сумму расстояний от каждого элемента кластера. вход в его кластер
;;;центр. Напишите небольшую теорию, которая гласит, что это количество «ошибок» никогда
;;;уменьшается после запуска run-k-means, так что решение кластеризации получает
;;;все лучше и лучше (конечно, пока оно не достигнет оптимального значения).
;;;Подсказка используется (random-Между-списком 0 9) для создания списка случайных чисел
;;;от 0 до 9.
;;;ПРИМЕЧАНИЕ: напишите немного теории. ACL2 было бы очень трудно доказать
(deflabel todo-10)
(defproperty-program k-means-Улучшено на каждом шаге
nil nil;замените эту строку на правильное свойство
)