Разреженная матрица
Сценарий использования разреженной матрицы вместо плотной
Если вы помните, в предыдущей статье я использовал .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()