Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Как уменьшить количество измерений и извлечь из этого пользу / Хабр Расшифровка

Если требуется что-то более экзотичное

Есть такой метод, который изначально разрабатывался для разложения сигнала с аддитивными компонентами — я говорю об

. При этом принимается гипотеза, что эти компоненты имеют не нормальное распределение, и их источники независимы. Простейший пример —

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

на основе дивергенции

; 2)с максимизацией «негауссовости» (тут используются такие меры как


На картинке ниже — простой пример, где смешиваются две синусоиды, потом они же с помощью ICA и выделяются.

Код на R, ICA:
x <- seq(0, 2*pi, length.out=5000)
y1 <- sin(x)
y2 <- sin(10*x pi)
S <- cbind(y1, y2)
A <- matrix(c(1/3, 1/2, 2, 1/4), 2, 2)
y <- S %*% A
library(fastICA)
IC <- fastICA(y, 2)
par(mfcol = c(2, 3))
plot(x, y1, type="l", col="blue", pch=19, cex=0.1, xlab="", ylab="", main="Исходные сигналы")
plot(x, y2, type="l", col="green", pch=19, cex=0.1, xlab = "", ylab = "")
plot(x, y[,1], type="l", col="red", pch=19, cex=0.5, xlab = "", ylab = "", main="Смешанные сигналы")
plot(x, y[,2], type="l", col="red", pch=19, cex=0.5, xlab = "", ylab = "")
plot(x, IC$S[,1], type="l", col="blue", pch=19, cex=0.5, xlab = "", ylab = "", main="ICA")
plot(x, IC$S[,2], type="l", col="green", pch=19, cex=0.5, xlab = "", ylab = "")

Какое отношение имеет ICA к задаче уменьшения размерности данных? Попробуем представить данные — вне зависимости от их природы — как смесь компонент, тогда можно будет разделить эту смесь на то количество «сигналов», которое нам подходит. Особого критерия, как в случае с PCA, по выбору количества компонент нет — оно подбирается экспериментально.

Последний подопытный в этом обзоре — автоэнкодеры, которые представляют собой особый класс нейронных сетей, настроенных таким образом, чтобы отклик на выходе автокодировщика был максимально близок к входному сигналу. Со всей мощью и гибкостью нейронных сетей мы одновременно получаем и массу проблем, связанных с поиском оптимальных параметров: количества скрытых слоев и нейронов в них, функции активации (sigmoid, tanh, ReLu,), алгоритма обучения и его параметров, способов регуляризации (L1, L2, dropout).

Если обучать автоэнкодер на зашумленных данных с тем, чтобы сеть восстанавливала их, то получается denoising autoencoder . Предварительно настроенные автокодировщики также можно «стыковать» в виде каскадов для предобучения глубоких сетей без учителя.

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

Собственно, в пакете

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

, но быстро убедился, что несколькими предложениями тут не отделаешься, поэтому далее будут картинки с

набившими всем оскомину

рукописными цифрами из этого

Данные представлены в виде .csv файлов (train.csv и test.csv), их довольно много, поэтому в дальнейшем для упрощения я буду работать с 10% данных из train.csv; колонка с метками (labels) будет использоваться только для целей визуализации. Но прежде чем выясним, что можно сделать с помощью автоэнкодера, посмотрим, что дают нам первые три компоненты при разложении PCA, ICA, NMF:

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

Код на R, h2o автоэнкодер:
train <- read.csv("train.csv")
label <- data$label
train$label <- NULL
train <- train / max(train)
# Подготовка выборки для обучения
library(caret)
tri <- createDataPartition(label, p=0.1)$Resample1
train <- train[tri, ]
label <- label[tri]
# Запуска кластера h2o
library(h2o)
h2o.init(nthreads=4, max_mem_size='14G')
train.h2o <- as.h2o(train)
# Обучение автоэнкодера и выделение фич
m.deep <- h2o.deeplearning(x=1:ncol(train.h2o), training_frame=train.h2o, activation="Tanh", hidden=c(150, 25, 3, 25, 150), epochs=600, export_weights_and_biases=T, ignore_const_cols=F, autoencoder=T)
deep.fea <- as.data.frame(h2o.deepfeatures(m.deep, train.h2o, layer=3))
library(rgl)
palette(rainbow(length(unique(labels))))
plot3d(deep.fea[, 1], deep.fea[, 2], deep.fea[, 3], col=label 1, type="s", size=1, box=F, axes=F, xlab="", ylab="", zlab="", main="AEC") 

Другие сокращения:  Wby что значит на английском сленг

Тут кластеры более четко определены и разнесены в пространстве. У сети довольно простая архитектура с 5 скрытыми слоями и небольшим количеством нейронов; в третьем скрытом слое всего 3 нейрона, и фичи оттуда как раз и изображены выше. Еще немного занимательных картинок:

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

Вышеозначенный автоэнкодер несложно превратить в denoising autoencoder. Так как такому автокодировщику на вход надо подавать искаженные образы, перед первым скрытым слоем достаточно разместить

. Благодаря ему с некоторой вероятностью нейроны будут находиться в «выключенном» состоянии, что а) будет вносить искажения в обрабатываемый образ; б) будет служить своеобразной регуляризацией при обучении.

Еще одно интересное применение автоэнкодера — определение аномалий в данных по ошибке реконструкции образов. В целом, если подавать на вход автоэнкодера данные не из обучающей выборки, то, понятно, ошибка реконструкции каждого образа из новой выборки будет выше таковой из тренировочной выборки, но более-менее одного порядка. При наличии аномалий эта ошибка будет в десятки, а то и сотни раз больше.

Системы линейных алгебраических уравнений. основные определения

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

Системой линейных алгебраических уравнений (СЛАУ) называется совокупность МатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицы (матричная форма системы)Приведем еще один способ представления системы уравнений с помощью матриц. Пусть матрица-столбец МатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыМатрицыосновной матрицей системы. Присоединяя справа (через вертикальную черту) к матрице МатрицыМатрицыМатрицырасширенной матрицей системы:

Понятно, что операции над строками расширенно и матрицы являются операциями над соответствующими уравнениями системы.

Решением системы уравнений называется такой набор чисел МатрицыМатрицы

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

Система линейных уравнений называется неоднородной, если хотя бы один элемент матрицы-столбца свободных членов отличается от нуля. Если все элементы Матрицыоднородной. Однородная система уравнений имеет вид:где МатрицыМатрицыМатрицы

Действия с матрицами

Данное методическое пособие поможет Вам научиться выполнять действия с матрицами: сложение (вычитание) матриц, транспонирование матрицы, умножение матриц, нахождение обратной матрицы. Весь материал изложен в простой и доступной форме, приведены соответствующие примеры, таким образом, даже неподготовленный человек сможет научиться выполнять действия с матрицами.
Для самоконтроля и самопроверки Вы можете бесплатно скачать матричный калькулятор >>>.

Я буду стараться минимизировать теоретические выкладки, кое-где возможны объяснения «на пальцах» и использование ненаучных терминов. Любители основательной теории, пожалуйста, не занимайтесь критикой, наша задача – научиться выполнять действия с матрицами.

Для СВЕРХБЫСТРОЙ подготовки по теме (у кого «горит») есть интенсивный pdf-курс Матрица, определитель и зачёт!

Начнем.

Матрица – это прямоугольная таблица каких-либо элементов. В качестве элементов мы будем рассматривать числа, то есть числовые матрицы. ЭЛЕМЕНТ – это термин. Термин желательно запомнить, он будет часто встречаться, не случайно я использовал для его выделения жирный шрифт.

Другие сокращения:  Что такое кВА, как перевести кВА в кВт мощности?

Обозначение: матрицы обычно обозначают прописными латинскими буквами Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Пример: рассмотрим матрицу «два на три»:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Данная матрица состоит из шести элементов:
Как уменьшить количество измерений и извлечь из этого пользу / Хабр
Все числа (элементы) внутри матрицы  существуют сами по себе, то есть ни о каком вычитании речи не идет:
Как уменьшить количество измерений и извлечь из этого пользу / Хабр
Это просто таблица (набор) чисел!

Также договоримся не переставлять числа, если иного не сказано в объяснениях. У каждого числа свое местоположение, и перетасовывать их нельзя!

Рассматриваемая матрица имеет две строки:
Как уменьшить количество измерений и извлечь из этого пользу / Хабр
и три столбца:
Как уменьшить количество измерений и извлечь из этого пользу / Хабр

СТАНДАРТ: когда говорят о размерах матрицы, то сначала указывают количество строк, а только потом – количество столбцов. Мы только что разобрали по косточкам матрицу «два на три».

Если количество строк и столбцов матрицы совпадает, то матрицу называют квадратной, например: Как уменьшить количество измерений и извлечь из этого пользу / Хабр – матрица «три на три».

Если в матрице один столбец Как уменьшить количество измерений и извлечь из этого пользу / Хабр или одна строка Как уменьшить количество измерений и извлечь из этого пользу / Хабр, то такие матрицы также называют векторами.

На самом деле понятие матрицы мы знаем еще со школы, рассмотрим, например точку с координатами «икс» и «игрек»: Как уменьшить количество измерений и извлечь из этого пользу / Хабр. По существу, координаты точки Как уменьшить количество измерений и извлечь из этого пользу / Хабр записаны в матрицу «один на два». Кстати, вот Вам и пример, почему порядок чисел имеет значение: Как уменьшить количество измерений и извлечь из этого пользу / Хабр и Как уменьшить количество измерений и извлечь из этого пользу / Хабр – это две совершенно разные точки плоскости.

Теперь переходим непосредственно к изучению действий с матрицами:

1) Действие первое. Вынесение минуса из матрицы (внесение минуса в матрицу).

Вернемся к нашей матрице Как уменьшить количество измерений и извлечь из этого пользу / Хабр. Как вы наверняка заметили, в данной матрице слишком много отрицательных чисел. Это очень неудобно с точки зрения выполнения различных действий с матрицей, неудобно писать столько минусов, да и просто в оформлении некрасиво выглядит.

Вынесем минус за пределы матрицы, сменив у КАЖДОГО элемента матрицы знак:
Как уменьшить количество измерений и извлечь из этого пользу / Хабр
У нуля, как Вы понимаете, знак не меняется, ноль – он и в Африке ноль.

Обратный пример: Как уменьшить количество измерений и извлечь из этого пользу / Хабр. Выглядит безобразно.

Внесем минус в матрицу, сменив у КАЖДОГО элемента матрицы знак:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Ну вот, гораздо симпатичнее получилось. И, самое главное, выполнять какие-либо действия с матрицей будет ПРОЩЕ. Потому что есть такая математическая народная примета: чем больше минусов – тем больше путаницы и ошибок.

2) Действие второе. Умножение матрицы на число.

Пример:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Всё просто, для того чтобы умножить матрицу на число, нужно каждый элемент матрицы умножить на данное число. В данном случае – на тройку.

Еще один полезный пример:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр – умножение матрицы на дробь

Сначала рассмотрим то, чего делать НЕ НАДО:
Как уменьшить количество измерений и извлечь из этого пользу / Хабр
Вносить дробь в матрицу НЕ НУЖНО, во-первых, это только затрудняет дальнейшие действия с матрицей, во-вторых, затрудняет проверку решения преподавателем (особенно, если  Как уменьшить количество измерений и извлечь из этого пользу / Хабр – окончательный ответ задания).

И, тем более, НЕ НАДО делить каждый элемент матрицы на минус семь:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

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

Единственное, что желательно сделать в этом примере – это внести минус в матрицу:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

А вот если бы ВСЕ элементы матрицы делились на 7 без остатка, то тогда можно (и нужно!) было бы поделить.

Пример:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

В этом случае можно и НУЖНО умножить все элементы матрицы на Как уменьшить количество измерений и извлечь из этого пользу / Хабр, так как все числа матрицы делятся на 2 без остатка.

Примечание: в теории высшей математики школьного понятия «деление» нет. Вместо фразы «это поделить на это» всегда можно сказать «это умножить на дробь». То есть, деление – это частный случай умножения.

3) Действие третье. Транспонирование матрицы.

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

Другие сокращения:  Полный гематологический анализ крови что это

Пример:

Транспонировать матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Строка здесь всего одна и, согласно правилу, её нужно записать в столбец:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр – транспонированная матрица.

Транспонированная матрица обычно обозначается надстрочным индексом Как уменьшить количество измерений и извлечь из этого пользу / Хабр или штрихом справа вверху.

Пошаговый пример:

Транспонировать матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Сначала переписываем первую строку в первый столбец:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Потом переписываем вторую строку во второй столбец:
Как уменьшить количество измерений и извлечь из этого пользу / Хабр

И, наконец, переписываем третью строку в третий столбец:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Готово. Образно говоря,  транспонировать – это значит взять матрицу за правый верхний угол и аккуратно повернуть её «на себя» по диагонали, «стряхивая» числа в столбцы транспонированной матрицы. Такая вот у меня ассоциация.

4) Действие четвертое. Сумма (разность) матриц.

Сумма матриц действие несложное.
НЕ ВСЕ МАТРИЦЫ МОЖНО СКЛАДЫВАТЬ. Для выполнения сложения (вычитания) матриц, необходимо, чтобы они были ОДИНАКОВЫМИ ПО РАЗМЕРУ.

Например, если дана матрица «два на два», то ее можно складывать только с матрицей «два на два» и никакой другой!
Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Пример:

Сложить матрицы Как уменьшить количество измерений и извлечь из этого пользу / Хабр и Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Для того чтобы сложить матрицы, необходимо сложить их соответствующие элементы:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Для разности матриц правило аналогичное, необходимо найти разность соответствующих элементов.

Пример:

Найти разность матриц Как уменьшить количество измерений и извлечь из этого пользу / Хабр, Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

А как решить данный пример проще, чтобы не запутаться? Целесообразно избавиться от лишних минусов, для этого внесем минус в матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр:

 Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Примечание: в теории высшей математики школьного понятия «вычитание» нет. Вместо фразы «из этого вычесть это» всегда можно сказать «к этому прибавить отрицательное число». То есть, вычитание – это частный случай сложения.

5) Действие пятое. Умножение матриц.

Чем дальше в лес, тем толще партизаны. Скажу сразу, правило умножения матриц выглядит очень странно, и объяснить его не так-то просто, но я все-таки постараюсь это сделать, используя конкретные примеры.

Какие матрицы можно умножать?

Чтобы матрицу  Как уменьшить количество измерений и извлечь из этого пользу / Хабр можно было умножить на матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр нужно, чтобы число столбцов матрицы Как уменьшить количество измерений и извлечь из этого пользу / Хабр равнялось числу строк матрицы Как уменьшить количество измерений и извлечь из этого пользу / Хабр.

Пример:
Можно ли умножить матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр на матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр?

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Как уменьшить количество измерений и извлечь из этого пользу / Хабр, значит, умножать данные матрицы можно.

А вот если матрицы переставить местами, то, в данном случае, умножение уже невозможно!

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Как уменьшить количество измерений и извлечь из этого пользу / Хабр, следовательно, выполнить умножение невозможно:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

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

Следует отметить, что в ряде случаев можно умножать матрицы и так, и так.
Например, для матриц, Как уменьшить количество измерений и извлечь из этого пользу / Хабр и Как уменьшить количество измерений и извлечь из этого пользу / Хабр возможно как умножение Как уменьшить количество измерений и извлечь из этого пользу / Хабр, так и умножение Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Как умножить матрицы?

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

Начнем с самого простого:

Пример:

Умножить матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр на матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр
Я буду сразу приводить формулу для каждого случая:

Как уменьшить количество измерений и извлечь из этого пользу / Хабр – попытайтесь сразу уловить закономерность.

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Пример сложнее:

Умножить матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр на матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Формула: Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

В результате получена так называемая нулевая матрица.

Попробуйте самостоятельно выполнить умножение Как уменьшить количество измерений и извлечь из этого пользу / Хабр (правильный ответ Как уменьшить количество измерений и извлечь из этого пользу / Хабр).

Обратите внимание, что Как уменьшить количество измерений и извлечь из этого пользу / Хабр! Это почти всегда так!

Таким образом, при умножении переставлять матрицы нельзя!

Если в задании предложено умножить матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр на матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр, то и умножать нужно именно в таком порядке. Ни в коем случае не наоборот.

Переходим к матрицам третьего порядка:

Умножить матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр на матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Формула очень похожа на предыдущие формулы:
Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

А теперь попробуйте самостоятельно разобраться в умножении следующих матриц:

Умножьте матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр на матрицу Как уменьшить количество измерений и извлечь из этого пользу / Хабр

Вот готовое решение, но постарайтесь сначала в него не заглядывать!

Как уменьшить количество измерений и извлечь из этого пользу / Хабр

6) Действие шестое. Нахождение обратной матрицы.

Данная тема достаточно обширна, и я вынес этот пункт на отдельную страницу.

А пока спектакль закончен.

После освоения начального уровня рекомендую отработать действия с матрицами на уроке Свойства операций над матрицами. Матричные выражения.

Желаю успехов!

Автор: Емелин Александр

Как уменьшить количество измерений и извлечь из этого пользу / Хабр Блог Емелина Александра

Высшая математика для заочников и не только >>>

(Переход на главную страницу)

Оцените статью
Расшифруй.Ру