Разреженная матрица

Сценарий использования разреженной матрицы вместо плотной

Если вы помните, в предыдущей статье я использовал .toarray() для преобразования вывода кодировщика onehot. Почему я это сделал?

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

import pickle

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

with open("data/sp500info_df.pickle", "rb") as f:
    stocks_df = pickle.load(f).\
        filter(['sector', 'fullTimeEmployees', 'ebitda', 'freeCashflow',
                'sharesOutstanding', 'currentPrice'])

onehot_enc = OneHotEncoder()
sector_enc = onehot_enc.fit_transform(stocks_df[['sector']])
sector_enc
<503x12 sparse matrix of type '<class 'numpy.float64'>'
 with 503 stored elements in Compressed Sparse Row format>

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

Чтобы лучше понять это, посмотрите, как кодировщик onehot кодировал каждую категорию секторов в данных S&P500. Вы заметите, что для каждого сектора только один бит горячий (1), а остальные все холодные (0). Это приводит к большой трате памяти для хранения всех холодных (0) битов.

Вот где разреженная матрица становится полезной. Он сохраняет данные в сжатом формате, сохраняя только расположение горячих (1) битов.

Ну а теперь как вы видите матрицу в расширенном формате. Именно здесь функция .toarray() помогает преобразовать его в плотный массив Numpy.

sector_enc.toarray()