построение 2D-матрицы в Python, кода и наиболее полезной визуализации - PullRequest
7 голосов
/ 05 апреля 2011

У меня очень большая матрица (10x55678) в формате "numpy". строки этой матрицы соответствуют некоторым «темам», а столбцы соответствуют словам (уникальным словам из текстового корпуса). Каждая запись i, j в этой матрице является вероятностью, означающей, что слово j принадлежит теме i с вероятностью x. Так как я использую идентификаторы, а не реальные слова, и поскольку размер моей матрицы действительно велик, мне нужно визуализировать ее таким образом. Какую визуализацию вы предлагаете? простой сюжет? или более сложный и информативный? (я спрашиваю об этом, потому что я не знаю о полезных типах визуализации). Если это возможно, можете ли вы привести пример использования матрицы? спасибо

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

Ответы [ 2 ]

17 голосов
/ 05 апреля 2011

Конечно, вы можете использовать метод matplotlib imshow или pcolor для отображения данных, но, как уже упоминалось в комментариях, может быть сложно интерпретировать без увеличения подмножеств данных.

a = np.random.normal(0.0,0.5,size=(5000,10))**2
a = a/np.sum(a,axis=1)[:,None]  # Normalize

pcolor(a)

Unsorted random example

Затем можно отсортировать слова по вероятности того, что они принадлежат к кластеру:

maxvi = np.argsort(a,axis=1)
ii = np.argsort(maxvi[:,-1])

pcolor(a[ii,:])

enter image description here

Здесь индекс слова по оси y больше не равен исходному порядку, поскольку вещи отсортированы.

Другая возможность заключается в использовании пакета networkx для построения кластеров слов для каждой категории, где слова с наибольшей вероятностью представлены узлами, которые больше или ближе к центру графика, и игнорируют те слова, которые имеют нет членства в категории. Это может быть проще, так как у вас есть большое количество слов и небольшое количество категорий.

Надеюсь, одно из этих предложений будет полезным.

2 голосов
/ 05 апреля 2011

Ключевым моментом, который необходимо учитывать, является наличие у вас важной структуры вдоль обоих измерений в матрице. Если вы это сделаете, то стоит попробовать цветной матричный график (например, imshow), но если ваши десять тем в основном независимы, вам, вероятно, лучше сделать десять отдельных линейных или гистограммных графиков. Оба участка имеют свои преимущества и недостатки.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...