Лучшая практика структуры данных машинного обучения для ввода - PullRequest
0 голосов
/ 28 июня 2011

Я работаю над созданием библиотеки машинного обучения C ++ для некоторых из моих собственных работ, и мне было интересно узнать о передовых методах представления входных данных. Сейчас я думаю об использовании класса DataManager, который обрабатывает операции ввода-вывода для чтения данных из файла, из потока и т. Д. При разработке этого я понял, что также необходимо создать классы для управления метками объектов. (связать с входными данными) и метками классов (в случае данных обучения).

Поэтому в моей реализации есть класс, который считывает данные из файла (я использую репозиторий машинного обучения UCI) в объект boost :: variable. Класс DataManager перегружает оператор >>, так что я могу прочитать каждое значение функции, разделенное запятыми, из предоставленной строки; если значение функции равно «?», оно вводит struct t_missing {}.

Для менеджеров классов / объектов, я думаю, что было бы целесообразно поддерживать связанный список имен объектов / классов и количество экземпляров, попадающих в каждый из них.

Во всяком случае, это была только моя первоначальная мысль о таком классе, и я хотел бы услышать некоторые другие мысли / предложения по реализации. Показывать код не обязательно; В основном мне просто интересно услышать о других вещах, которые, возможно, следует рассмотреть.

Спасибо!

1 Ответ

1 голос
/ 28 июня 2011

Некоторые проблемы обучения связаны с разреженными данными, то есть данными с большим количеством возможных функций, большинство из которых равны нулю.В этом случае гораздо эффективнее хранить только ненулевые функции.

Обычно это происходит с библиотеками SVM, такими как LibSVM , в которых векторы хранятся в виде списка пар (feature_index, feature_value).Например, формат, который они будут использовать для вектора:

 [0, 1, 0, 0, 1, 0, 0, 1]

будет: (индексы начинаются с 1)

 2:1 5:1 8:1
...