Рубрики
Без рубрики

Анализ основных компонентов с Tensorflow 2.0

PCA – это методика снижения сложности, которая пытается уменьшить набор переменных вниз до меньшего набора … Помечено с машиной, Python, Deplearning, Tensorflow.

Линейная алгебра с Tensorflow 2.0 (4 части серии)

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

Ранее, когда мы делали транспонирование или матрицу обратно, мы полагались на использование встроенных функций Tensorflow, но для PCA такого функции не существует, кроме одного в расширенном разделении Tensorflow (TFT).

Существует несколько способов реализовать PCA в Tensorflow, но поскольку этот алгоритм такой важный в мире машинного обучения, мы возьмем длинный маршрут.

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

# To start working with PCA, let's start by creating a 2D data set

x_data = tf.multiply(5, tf.random.uniform([100], minval=0, maxval=100, dtype = tf.float32, seed = 0))
y_data = tf.multiply(2, x_data) + 1 + tf.random.uniform([100], minval=0, maxval=100, dtype = tf.float32, seed = 0)

X = tf.stack([x_data, y_data], axis=1)

plt.rc_context({'axes.edgecolor':'orange', 'xtick.color':'red', 'ytick.color':'red'})
plt.plot(X[:,0], X[:,1], '+', color='b')
plt.grid()

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

def normalize(data):
    # creates a copy of data
    X = tf.identity(data)
    # calculates the mean
    X -=tf.reduce_mean(data, axis=0)
    return X

normalized_data = normalize(X)
plt.plot(normalized_data[:,0], normalized_data[:,1], '+', color='b')
plt.grid()

Напомним, что PCA можно рассматривать как применение сжатия с потерями в коллекцию х Точки данных. То, как мы можем минимизировать потерю точностью, находя функцию декодирования f (x) ≈ C где C будет соответствующий вектор.

PCA определяется нашим выбором этой функции декодирования. В частности, сделать декодер очень просто, мы решили использовать Matrix умножение на карту C и определить G (C) Отказ Наша цель – минимизировать расстояние между входной точкой х к его реконструкции и сделать то, что мы используем L ^ 2 норма. Который сводится к нашей функции кодирования C ^ T x Отказ

Наконец, чтобы восстановить PCA, мы используем ту же матрицу D Чтобы декодировать все точки и решить эту проблему оптимизации, мы используем Eigendecomposition.

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

d ^ * tr (d ^ t x ^ t xd)

Найти D Мы можем рассчитать собственныевекторы Х ^ т х .

# Finding the Eigne Values and Vectors for the data
eigen_values, eigen_vectors = tf.linalg.eigh(tf.tensordot(tf.transpose(normalized_data), normalized_data, axes=1))

print("Eigen Vectors: \n{} \nEigen Values: \n{}".format(eigen_vectors, eigen_values))

Eigen Vectors:
[[-0.8908606  -0.45427683]
[ 0.45427683 -0.8908606 ]]
Eigen Values:
[   16500.715 11025234.   ]

Eigenvectors (основные компоненты) определяют направления нового пространства функций, а собственные значения определяют их величину.

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

Напомним нашу функцию кодирования C ^ T x , где D Это матрица, содержащая собственныеветеры, которые мы рассчитали ранее.

X_new = tf.tensordot(tf.transpose(eigen_vectors), tf.transpose(normalized_data), axes=1)

plt.plot(X_new[0, :], X_new[1, :], '+', color='b')
plt.xlim(-500, 500)
plt.ylim(-700, 700)
plt.grid()

Это преобразованные данные.

Это раздел Двенадцать главы на линейной алгебре с Tensorflow 2.0 книги Глубокое обучение с Tensorflow 2.0 Отказ

Вы можете прочитать этот раздел и следующие темы:

02.01 – скалярные, векторы, матрицы и тензоры 02.02 – размножающие матрицы и векторы 02.03 – личность и обратные матрицы 02.04 – линейная зависимость и промежуток 02.05 – Нормы 02.06 – Специальные виды матриц и векторов 02.07 – Eigendecomposition 02.08 – Особое значение. Мур-Пенроуз псевдоинверсий 02.10 – оператор трассировки 02.11 – определитель 02.12 – пример: анализ основных компонентов

на Глубокое обучение с TF 2.0: 02.00- линейная алгебра . Вы можете получить код для этой статьи и остальной части главы здесь Отказ Ссылки на ноутбук в Google Colab и Jupyter Binder находятся в конце ноутбук Отказ

Линейная алгебра с Tensorflow 2.0 (4 части серии)

Оригинал: “https://dev.to/mmithrakumar/principal-components-analysis-with-tensorflow-2-0-21hl”