Введение
В этом практическом занятии мы будем изучать случайную проекцию для снижения размерности с использованием библиотеки scikit-learn. Случайная проекция - это метод, который позволяет уменьшить размерность данных, сохраняя при этом попарные расстояния между примерами. Это может быть полезно для ускорения вычислений и уменьшения потребления памяти в алгоритмах машинного обучения.
Советы по использованию ВМ
После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook полностью загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортируем необходимые библиотеки
Начнем с импорта необходимых библиотек для этого практического занятия.
import numpy as np
from sklearn import random_projection
Генерируем случайные данные
Далее, давайте сгенерируем некоторые случайные данные, которые мы можем использовать для снижения размерности.
X = np.random.rand(100, 10000)
Здесь мы генерируем двумерный массив X с 100 примерами и 10 000 признаками. Это будут наши исходные данные с высокой размерностью.
Гауссовская случайная проекция
Теперь давайте применим Гауссовскую случайную проекцию для уменьшения размерности наших данных.
transformer = random_projection.GaussianRandomProjection()
X_new = transformer.fit_transform(X)
В этом шаге мы создаем экземпляр класса GaussianRandomProjection и настраиваем его на наших данных X. Затем мы применяем преобразование, вызвав метод fit_transform. Результат сохраняется в переменной X_new.
#稀疏随机投影
接下来,让我们尝试另一种称为稀疏随机投影的随机投影类型。
transformer = random_projection.SparseRandomProjection()
X_new = transformer.fit_transform(X)
在这里,我们创建了SparseRandomProjection类的一个实例,并使用fit_transform方法将其应用于我们的数据X。结果存储在X_new变量中。
Обратное преобразование
Трансформеры случайной проекции имеют возможность вычислить обратную матрицу проекции. Давайте исследуем эту функцию, применяя обратное преобразование к нашим проектированным данным.
transformer = random_projection.SparseRandomProjection(compute_inverse_components=True)
X_new = transformer.fit_transform(X)
## Compute the inverse transform
X_new_inversed = transformer.inverse_transform(X_new)
В этом шаге мы создаем экземпляр класса SparseRandomProjection с параметром compute_inverse_components, установленным в True. Затем мы настраиваем трансформер на наших данных X и применяем преобразование. Наконец, мы вычисляем обратное преобразование, вызвав метод inverse_transform для проектированных данных X_new.
Проверка
Для проверки правильности обратного преобразования мы можем сравнить исходные данные X с результатом обратного преобразования.
X_new_again = transformer.transform(X_new_inversed)
np.allclose(X_new, X_new_again)
Здесь мы применяем преобразование к обратно преобразованным данным X_new_inversed и проверяем, равно ли оно исходным проектированным данным X_new с использованием функции np.allclose.
Резюме
В этом практическом занятии мы узнали, как выполнять случайную проекцию для уменьшения размерности данных с использованием библиотеки scikit - learn. Мы изучили как Гауссовскую случайную проекцию, так и спарсную случайную проекцию. Также мы узнали, как вычислить обратное преобразование проектированных данных для восстановления исходных данных. Случайная проекция может быть полезным инструментом для уменьшения размерности высокомерных данных в задачах машинного обучения.