Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> структура данных для реализации алгоритма apriori 
:(
    Опции темы
s_a_s_h_a
Дата 25.8.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



Подскажите, пожалуйста, структуру данных для реализации алгоритма apriori. 
Что использовать для транзацкий, что для наборов элементов, а что для множеств наборов элементов?
PM MAIL   Вверх
s_a_s_h_a
Дата 26.8.2011, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1



согласен мало кто полезет смотреть что из себя представляет алгоритм, просто подумалось, а вдруг кто-нибудь уже реализовывал. В интернете есть и работающие коды и не совсем, но те работающие, что я находил либо без комментариев и сложные да еще и на других языках со своими структурами данных, либо слишком много лишнего.
Попытаюсь дать представление об алгоритме. Постановка задачи.
Есть база транзакций D, каждая транзакция T - это набор элементов. Задача найти часто встречающиеся наборы элементов  в базе транзакций. Например:
a, b, d
a, b, c, e
f, a
c, d
d, e, a, b 
если задать уровень поддержки = 2, то данному уровню будут удовлетворять наборы:
a, b  встречается 3 раза
a, d - 2
a, e - 2
b, e - 2
a, b, d - 2
одноэлементные наборы нам не нужны
Кроме того необходимо найти ассоциативные правила:
a => b  с достоверностью 75%    (из a следует b с достоверностью = число транзакций содержащих b / число транзакций содержащих a * 100%)
a => {b, d} с достоверностью 50%
и т.д.

Псевдокод алгоритма:
F1 = {часто встречающиеся 1-элементные наборы} 
для (k=2; Fk-1 <> ; k++) { 
      Ck = Apriorigen(Fk-1) // генерация кандидатов 
      для всех транзакций t T { 
           Ct = subset(Ck, t) // удаление избыточных правил 
           для всех кандидатов c Ct 
           c.count ++ 
      } 
Fk = { c Ck | c.count >= minsupport} // отбор кандидатов 
Результат U Fk


Опишем функцию генерации кандидатов. На это раз нет никакой необходимости вновь обращаться к базе данных. Для того, чтобы получить k-элементные наборы, воспользуемся (k-1)-элементными наборами, которые были определены на предыдущем шаге и являются часто встречающимися.
Вспомним, что наш исходный набор хранится в упорядоченном виде. Генерация кандидатов также будет состоять из двух шагов.

1.    Объединение. Каждый кандидат Ck будет формироваться путем расширения часто встречающегося набора размера (k-1) добавлением элемента из другого (k-1)- элементного набора. Приведем алгоритм этой функции Apriorigen в виде небольшого SQL-подобного запроса:

INSERT  into Ck
SELECT p.item1, p.item2, …, p.itemk-1, q.itemk-1 
FROM Fk-1 p, Fk-1 q 
WHERE  p.item1= q.item1, p.item2 = q.item2, … , p.itemk-2 = q.itemk-2, p.itemk-1 < q.itemk-1


2.    Удаление избыточных правил. На основании свойства анти-монотонности, следует удалить все наборы c Ck если хотя бы одно из его (k-1) подмножеств не является часто встречающимся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.