Четыре вопроса в одном вопросе крайне неудобны - почему бы не сделать вопрос одним вопросом? Это не так, как если бы это стоило вам ;-). В любом случае, относительно "Как указать пустое значение?", См. документы относительно атрибута value
экземпляров Orange.Value
:
Если значение непрерывно или неизвестно, нет
дескриптор нужен. Для последнего
В результате получается строка «?», «~» или «.»
ибо не знаю, пофиг и прочее,
соответственно.
Я не уверен, что под пустым вы подразумеваете «не знаю» или «все равно», но в любом случае вы можете указать и то, и другое. Однако позаботьтесь о расстояниях - с этой другой страницы в документах :
Неизвестные значения обрабатываются правильно
только Евклидово и Рельефное расстояние.
Для другой меры расстояния
расстояние между неизвестным и известным или
между двумя неизвестными значениями всегда
0,5.
Расстояния, указанные на этой последней странице, - это значения Хэмминга, Максимума, Манхэттена, Евклида и Рельефа (последнее похоже на Манхэттен, но с правильной обработкой неизвестных значений) - расстояние от косинуса не предусмотрено: вам придется кодировать его самостоятельно.
Для (4), с небольшим количеством кода Python, вы, очевидно, можете форматировать результаты любым удобным для вас способом. Атрибут .clusters
объекта KMeans представляет собой список, ровно столько же, сколько и количество экземпляров данных: если вам нужен список списков экземпляров данных, например:
def loldikm(data, **k):
km = orange.KMeans(data, **k)
results = [[] for _ in km.centroids]
for i, d in zip(km.clusters, data):
results[i].append(d)