0

Я хочу выполнить технику уменьшения размеров (DR) для визуализации моих данных и того, как они связаны друг с другом. Я планирую использовать Barnes-hut tsne, но я не могу получить способ ввода ввода в TSNE, потому что пример приложения имеет данные в обычной форме матрицы в соответствии с user guide. У меня около 12 миллионов записей с 5000 различными значениями, и я не могу их хранить в основной памяти. Я хочу выполнить уменьшение размера (DR), чтобы визуализировать эти различные значения на двухмерном участке разброса. У меня есть данные в виде списка смежности (поскольку он слишком разрежен).Уменьшение размеров (TSNE/PCA) на разреженной матрице

Пусть говорят, я следующие записи:

2 3 10 
4 6 
7 
7 9 10 
2 
5 6 

Они должны быть мои первые 6 записей. И в этом случае у меня есть только 10 различных значений. И приведенная выше матрица (таблица) предполагает, что 1-я запись имеет 2,3 и 10 столбцов как 1, а другие столбцы - 0 (список смежности).

Эти различные значения отображаются на слова (метки), имеющиеся в документе (запись).

Как я могу выполнить fast-TSNE с такими данными. Или как я могу преобразовать это в совместимый формат, требуемый TSNE? На каком языке я должен предпочесть?

Я предпочитаю использовать Python или Matlab, но все остальное тоже прекрасно. Дайте мне знать ваши предложения.

P.S. У меня действительно высокая вычислительная машина для выполнения этой задачи.

ответ

1

Код t-SNE Barnes-Hut не поддерживает это из коробки, но это должно быть относительно простое изменение кода, чтобы он поддерживал это. В частности, см следующую строку кода: https://github.com/lvdmaaten/bhtsne/blob/master/tsne.cpp#L123

Эта линия заполняет row_P, col_P и val_P с матрицей NxN подобия в строке сжатых разреженных формате матрицы. То есть row_P имеет N+1 элементов, которые содержат индексы в col_P и val_P, которые имеют nnz элементов (N - это количество строк и nnz количество ненулевых записей разреженной матрицы). Элементы в val_P считаются неотрицательными (например, гауссовские значения ядра).

Я думаю, что проще всего заменить этот вызов функции вызовом новой функции, которая вычисляет матрицу подобия на основе ваших собственных входных данных (работа на любом разреженном формате наиболее удобна для вас). Вы даже можете реализовать вычисление матрицы подобия в Matlab, а затем записать бит Mex-кода, который получает полученную разреженную матрицу и копирует ее в row_P, col_P и val_P. Это должно быть легко, потому что Matlab также использует сжатый сжатый формат матрицы; посмотрите на функции mxGetIr и mxGetJc Mex.

Остальная часть кода t-SNE Barnes-Hut не зависит от того, как были вычислены совпадения ввода, поэтому вам не придется делать никаких других изменений.