Большинство реализаций k-средних определяют начальные центроиды, используя фактические точки данных, а не случайные точки в ограничительной рамке, нарисованной переменными. Тем не менее, некоторые предложения по решению вашей актуальной проблемы приведены ниже.
Вы можете взять другую точку данных наугад и сделать ее новым центроидом кластера. Это очень просто и быстро реализовать, и не должно отрицательно влиять на алгоритм.
Вы также можете попробовать сделать более разумный начальный выбор центроидов кластера, используя kmeans ++ . Этот алгоритм случайным образом выбирает первый центроид и выбирает оставшиеся центроиды K-1, чтобы попытаться максимизировать расстояние между центрами. Выбирая более умных центроидов, вы гораздо реже сталкиваетесь с проблемой центроида, которому назначают нулевые точки данных.
Если вы хотите быть немного умнее, вы можете использовать алгоритм kmeans ++ для создания нового центроида всякий раз, когда центроиду назначают ноль точек данных.