Python KMeans Orange Framework - PullRequest
       6

Python KMeans Orange Framework

1 голос
/ 07 февраля 2010

Я планирую использовать оранжевый для кластеризации kmeans. Я прошел уроки, но у меня все еще есть пара вопросов, которые я хотел бы задать:

Я имею дело с кластеризацией на векторах высокой размерности. 1) Есть ли косинусное расстояние? 2) Я не хочу давать нули пустым значениям. Я пытался не иметь нулей в пустых полях и получаю сообщение об ошибке:

SystemError: 'orange.TabDelimExampleGenerator': the number of attribute types does not match the number of attributes

Как мне указать пустое значение? 3) Есть ли способ использовать включить идентификатор в таблицу примеров? Я хочу пометить свои данные идентификатором (НЕ классификацией) для более легкой ссылки. Я не делаю столбец ID моей официальной частью моих данных.

4) Есть ли способ вывода по-разному для кластеров kmeans? Я бы предпочел что-то в этом формате:

cluster1: [ <id1>, <id2>, ...]
cluster2: [ <id3>, ... ]
rather than just [1, 2, 3,1 , 2, ... ]

Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 февраля 2010

Четыре вопроса в одном вопросе крайне неудобны - почему бы не сделать вопрос одним вопросом? Это не так, как если бы это стоило вам ;-). В любом случае, относительно "Как указать пустое значение?", См. документы относительно атрибута 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)
0 голосов
/ 20 января 2015

Я думаю, что оригинальные KMeans не подходят для косинусного расстояния. Поскольку его нет в евклидовом пространстве, вам нужно определить центр тяжести косинусного расстояния, и вы не сможете гарантировать сходимость. Но если ваши векторы признаков положительны, вы можете попробовать. Дополнительная информация: Добавить API для определяемой пользователем функции расстояния в k-средних

...