Как я могу создать новый столбец с двоичными значениями из разреженной матрицы TfidfVectorizer?

Вопрос или проблема

У меня в настоящее время есть объект разреженной матрицы TfidfVectorizer, длина которого составляет 1000. Сейчас он отображается так:

(0, 833)    0.0125811983337
(0, 273)    0.017346359033
(0, 602)    0.0150870927018
(0, 336)    0.123313011424
(0, 921)    0.117637963781
(0, 387)    0.0255455514666
(0, 151)    0.0402355794242
(0, 959)    0.0752284252869
(0, 862)    0.0183447833135
(0, 119)    0.0142898118798
(0, 289)    0.156947194082
(0, 820)    0.484668345462
(0, 95)     0.265061750957
(0, 351)    0.0958489700942
(0, 192)    0.148380396091
(0, 104)    0.104538714112
(0, 558)    0.137032224303
(0, 692)    0.0121762757783

и так далее.

Я хотел бы создать новый столбец, содержащий список длиной 1000 с бинарными значениями, где у нас есть 1 в первой строке (индекс 0) и $833^{rd}$ элементе (столбец 833, который представляет 0,833 0.0125811) и так далее…

Примерно так:

столбец 1 2 3 4 5 ... 833 ... 1000

строка 0 [0 0 0 0 0 ...  1 ....   0]

И я хотел бы сделать это для каждой строки, для которой была рассчитана разреженная матрица. Как я могу это сделать?

var = (0,833)
new_var = np.zeros(1000)
for i in var:
    new_var[i] = 1

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

Ответ или решение

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

Шаги для создания бинарной колонки

  1. Инициализация: Для начала необходимо создать пустой массив с бинарными значениями длиной согласно количеству столбцов в исходной матрице, где все элементы равны 0.

  2. Преобразование разреженной матрицы: Разреженная матрица TfidfVectorizer хранит ненулевые элементы и их позиции. Используйте эти позиции для обновления бинарной матрицы.

  3. Анализ ненулевых элементов: Проходите по разреженной матрице и обновляйте соответственные индексы бинарного массива, устанавливая их значение в 1.

  4. Создание бинарной матрицы для всех строк: Повторите описанный процесс для всех строк в вашей разреженной матрице.

Пример кода на Python

Вот пример кода, который реализует указанный алгоритм с использованием библиотеки SciPy:

import numpy as np
from scipy.sparse import csr_matrix

# Предположим, matrix - это ваша разреженная матрица TfidfVectorizer в формате csr_matrix
# Например:
data = [0.0125811983337, 0.017346359033, ...]  # значения
row_ind = [0, 0, ...]  # индексы строк
col_ind = [833, 273, ...]  # индексы столбцов
matrix = csr_matrix((data, (row_ind, col_ind)), shape=(1, 1000))  # для одной строки

# Начинаем с создания бинарной матрицы
num_rows, num_cols = matrix.shape
binary_matrix = np.zeros((num_rows, num_cols), dtype=int)

# Проходим по элементам разреженной матрицы
for row in range(num_rows):
    # Получаем разреженные данные для текущей строки
    start, end = matrix.indptr[row], matrix.indptr[row + 1]
    indices = matrix.indices[start:end]

    # Устанавливаем значение 1 в бинарной матрице для каждого индекса
    binary_matrix[row, indices] = 1

# Теперь binary_matrix содержит бинарные значения присутствия
print(binary_matrix)

Заключение

Подход, описанный выше, позволяет эффективно преобразовывать разреженные матрицы в бинарные матрицы, что может быть полезным для дальнейших этапов анализа данных и машинного обучения. Это позволяет визуализировать наличие признаков и проводить более точный анализ данных. Обратите внимание, что использование библиотеки SciPy и формата csr_matrix упрощает работы с разреженными данными и повышает производительность.

Оцените материал
Добавить комментарий

Капча загружается...