Я программирую дерево решений на C ++, используя слегка измененную версию Алгоритм C4.5. Каждый узел представляет атрибут или столбец вашего набора данных, и у него есть дочерние элементы для каждого возможного значения атрибута.
Моя проблема заключается в том, как сохранить набор обучающих данных, имея в виду, что мне нужно использовать подмножество для каждого узла, поэтому мне нужен быстрый способ выбрать только подмножество строк и столбцов.
Основная цель состоит в том, чтобы сделать это максимально эффективным способом памяти и времени (в порядке приоритета).
Лучший способ, который я подумал, это иметь массив массивов (или std :: vector) или что-то в этом роде, и для каждого узла есть список (массив, вектор и т. Д.) Или что-то с column,line
(вероятно, кортеж) пары, которые действительны для этого узла.
У меня теперь должен быть лучший способ сделать это, какие-либо предложения?
ОБНОВИТЬ: Что мне нужно, это что-то вроде этого:
В начале у меня есть эти данные:
Paris 4 5.0 True
New York 7 1.3 True
Tokio 2 9.1 False
Paris 9 6.8 True
Tokio 0 8.4 False
Но для второго узла мне просто нужны эти данные:
Paris 4 5.0
New York 7 1.3
Paris 9 6.8
И для третьего узла:
Tokio 2 9.1
Tokio 0 8.4
Но с таблицей миллионов записей с сотнями столбцов.
Я имею в виду, что все данные хранятся в матрице, а затем для каждого узла хранится информация о текущих столбцах и строках. Что-то вроде этого:
Paris 4 5.0 True
New York 7 1.3 True
Tokio 2 9.1 False
Paris 9 6.8 True
Tokio 0 8.4 False
Узел 2:
columns = [0,1,2]
rows = [0,1,3]
Узел 3:
columns = [0,1,2]
rows = [2,4]
Таким образом, в худшем случае я просто должен тратить
size_of(int) * (number_of_columns + number_of_rows) * node
Это намного меньше, чем наличие независимой матрицы данных для каждого узла.
Как насчет использования в Trie: http://en.wikipedia.org/wiki/Trie.
Также обсуждается, как реализовать trie:
Три реализация
Других решений пока нет …