Лямбда матрица: Анализ независимых компонент в Python

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

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

Однако, если бы происходящее было сценой фильма, микрофон, который использовался бы для записи разговора, не обязательно обладал бы способностью различать все звуки в комнате. И вот здесь в игру вступает анализ независимых компонент, АНК. 

АНК — это вычислительный метод, разделяющий многомерный сигнал на компоненты. Используя АНК, можно выделить нужный компонент (беседа с девушкой, например) из комплекса сигналов. 

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

АНК можно разбить на следующие шаги: 

  1. Центрирование массива x вычитанием среднего значения.
  2. Избавление от корреляции.
  3. Выбор случайного начального значения для демикширования матрицы w.
  4. Расчет нового значения w.
  5. Нормализация w.
  6. Проверка сходимости алгоритма. Если сходимости нет — возврат к шагу 4. 
  7. Вычисление скалярного произведения w и x для получения независимых источников сигналов. 

Избавление от корреляции

Прежде чем применять алгоритм АНК, необходимо избавиться от корреляции. Это означает, что мы преобразовываем сигнал таким образом, чтобы потенциальные корреляции между его компонентами исчезли (ковариация стала равна 0), а дисперсия каждого компонента стала равна 1. Также можно сказать, что ковариационная матрица будет равна единичной матрице. 

Единичная матрицаКовариационная матрица

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

Где D — это диагональная матрица собственных значений (каждая лямбда является собственным значением ковариационной матрицы), 

а E — ортогональная матрица собственных значений.

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

где

Код Python 

Давайте посмотрим, как реализовать АНК в Python, используя Numpy. 

Для начала импортируем следующие библиотеки:

import numpy as np
np.random.seed(0)
from scipy import signal
from scipy.io import wavfile
from matplotlib import pyplot as plt
import seaborn as sns
sns.set(rc={'figure.figsize':(11.7,8.27)})

Теперь задаем g и g’, которые будем использовать для определения нового значения w:

def g(x):
    return np.tanh(x)
def g_der(x):
    return 1 - g(x) * g(x)

Создаем функцию, чтобы центрировать сигнал вычитанием среднего: 

def center(X):
    X = np. array(X)
    
    mean = X.mean(axis=1, keepdims=True)
    
    return X- mean

Определяем функцию для избавления от корреляции методом, описанным выше: 

def whitening(X):
    cov = np.cov(X)    
    d, E = np.linalg.eigh(cov)  
    D = np.diag(d)    
    D_inv = np.sqrt(np.linalg.inv(D))   
    X_whiten = np.dot(E, np.dot(D_inv, np.dot(E.T, X)))    
    return X_whiten

Определяем функцию для обновления демикшированной матрицы w:

def calculate_new_w(w, X):
    w_new = (X * g(np.dot(w.T, X))).mean(axis=1) - g_der(np.dot(w.T, X)).mean() * w    
    w_new /= np.sqrt((w_new ** 2).sum())    
    return w_new

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

x, чтобы получить источники:

def ica(X, iterations, tolerance=1e-5):
    X = center(X)
    
    X = whitening(X)
        
    components_nr = X.shape[0]
W = np.zeros((components_nr, components_nr), dtype=X.dtype)
for i in range(components_nr):
        
        w = np.random.rand(components_nr)
        
        for j in range(iterations):
            
            w_new = calculate_new_w(w, X)
            
            if i >= 1:
                w_new -= np.dot(np.dot(w_new, W[:i].T), W[:i])
            
            distance = np.abs(np.abs((w * w_new).sum()) - 1)
            
            w = w_new
            
            if distance < tolerance:
                break
                
        W[i, :] = w
        
    S = np.dot(W, X)
    
    return S

Определяем функцию для построения и сравнения оригинальных, смешанных и предсказанных сигналов:

def plot_mixture_sources_predictions(X, original_sources, S):
    fig = plt.
figure() plt.subplot(3, 1, 1) for x in X: plt.plot(x) plt.title("mixtures") plt.subplot(3, 1, 2) for s in original_sources: plt.plot(s) plt.title("real sources") plt.subplot(3,1,3) for s in S: plt.plot(s) plt.title("predicted sources") fig.tight_layout() plt.show()

Дальше для примера создадим метод для искусственного смешивания сигналов из различных источников:

def mix_sources(mixtures, apply_noise=False):
    for i in range(len(mixtures)):
        
        max_val = np.max(mixtures[i])
        
        if max_val > 1 or np.min(mixtures[i]) < 1:
            
            mixtures[i] = mixtures[i] / (max_val / 2) - 0.5
            
    X = np.c_[[mix for mix in mixtures]]
    
    if apply_noise:
        
        X += 0.02 * np.random.normal(size=X.shape)
        
    return X

Затем создадим три сигнала, каждый из которых имеет собственный шаблон:

n_samples = 2000
time = np.linspace(0, 8, n_samples)
s1 = np. sin(2 * time)  # синусоидальная волна
s2 = np.sign(np.sin(3 * time))  # меандр
s3 = signal.sawtooth(2 * np.pi * time)  # пилообразная волна

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

X = np.c_[s1, s2, s3]
A = np.array(([[1, 1, 1], [0.5, 2, 1.0], [1.5, 1.0, 2.0]]))
X = np.dot(X, A.T)
X = X.T
S = ica(X, iterations=1000)
plot_mixture_sources_predictions(X, [s1, s2, s3], S)

Теперь используем АНК для разложения смеси реальных аудиодорожек и отображения результата. Если вы хотите попробовать сделать это сами, можете найти аудиодорожки здесь. 

sampling_rate, mix1 = wavfile.read('mix1.wav')
sampling_rate, mix2 = wavfile.read('mix2.wav')
sampling_rate, source1 = wavfile.read('source1.wav')
sampling_rate, source2 = wavfile.read('source2.wav')
X = mix_sources([mix1, mix2])
S = ica(X, iterations=1000)
plot_mixture_sources_predictions(X, [source1, source2], S)
wavfile.
write('out1.wav', sampling_rate, S[0]) wavfile.write('out2.wav', sampling_rate, S[1])

Sklearn

Наконец, посмотрим, как можно получить тот же результат, используя scikit-learn.

from sklearn.decomposition import FastICA
np.random.seed(0)
n_samples = 2000
time = np.linspace(0, 8, n_samples)
s1 = np.sin(2 * time)
s2 = np.sign(np.sin(3 * time))
s3 = signal.sawtooth(2 * np.pi * time)
S = np.c_[s1, s2, s3]
S += 0.2 * np.random.normal(size=S.shape)
S /= S.std(axis=0)
A = np.array([[1, 1, 1], [0.5, 2, 1.0], [1.5, 1.0, 2.0]])
X = np.dot(S, A.T)
ica = FastICA(n_components=3)
S_ = ica.fit_transform(X)
fig = plt.figure()
models = [X, S, S_]
names = ['mixtures', 'real sources', 'predicted sources']
colors = ['red', 'blue', 'orange']
for i, (name, model) in enumerate(zip(names, models)):
    plt.subplot(4, 1, i+1)
    plt.title(name)
    for sig, color in zip (model.T, colors):
        plt.plot(sig, color=color)
        
fig.tight_layout()        
plt.show()

Jupyter Notebook

Читайте также:

  • 5 задач для Python
  • Значение Data Science в современном мире
  • Шесть рекомендаций для начинающих специалистов по Data Science

Перевод статьи Cory Maklin: Independent Component Analysis (ICA) In Python

Читайте также

матрицы | это.

.. Что такое Лямбда-матрицы?

Основная статья: Функции от матриц

Ля́мбда-ма́трица (λ-матрица, матрица многочленов) — квадратная матрица, элементами которой являются многочлены над некоторым числовым полем. Если имеется некоторый элемент матрицы, который является многочленом степени , и нет элементов матрицы степени большей чем , то  —

степень λ-матрицы.

Используя обычные операции над матрицами любую λ-матрицу можно представить в виде:

В случае если определитель матрицы отличен от нуля, λ-матрица называется регулярной.

Пример:

Отметим, что матрица нерегулярна.

Содержание

  • 1 Алгебра λ-матриц
    • 1.1 Сложение и умножение λ-матриц
    • 1.2 Деление λ-матриц
  • 2 λ-матрицы с матричными аргументами
    • 2.1 Теорема Безу для λ-матриц
  • 3 См. также
  • 4 Литература

Алгебра λ-матриц

Сложение и умножение λ-матриц

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

Пусть и — λ-матрицы порядков и соответственно, и , тогда

;
,

где хотя-бы одна из матриц — ненулевая, имеем

;
;

Деление λ-матриц

Предположим, что — регулярная λ-матрица и что существуют такие λ-матрицы с или со степенью , меньшей степени , что

.

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

и или степень меньше степени .

Если правый (левый) остаток равен 0, то    называется правым (левым) делителем при делении на .

Если — регулярная, то правое (левое) частное и правый (левый) остаток при делении на существуют и единственны.

Доказательство  

λ-матрицы с матричными аргументами

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

,

поэтому мы определяем

правое значение λ-матрицы в матрице как

, если ;

и левое значение как

,

и в общем случае .

Теорема Безу для λ-матриц

Для λ-матриц существует свойство, аналогичное теореме Безу для многочленов:

Теорема Безу для λ-матриц
Правым и левым остатком от деления λ-матрицы на , где — единичная матрица является и соответственно.

Доказательство  

Разложение на множители

может быть непосредственно проверено выполнением раскрытия скобок. Умножим обе части этого равенства на слева и сложим все полученные равенства при . Правая часть полученного равенства будет иметь вид , где — некоторая λ-матрица.

Левая часть равенства

.


Таким образом

.

Результат теперь следует из единственности правого остатка.

Утверждение для левого остатка получается обращением множителей в исходном разложении, умножением полученного на справа и суммированием.

Следствие Для того чтобы λ-матрица делилась без остатка на справа (слева) необходимо и достаточно, чтобы    .

См. также

  • Матрица (математика)
  • Категория:Функции от матриц
  • Минимальный многочлен матрицы
  • Характеристический многочлен матрицы
  • Аннулирующий многочлен
  • Теорема Гамильтона-Кэли

Литература

  • Гантмахер Ф. Р.Теория матриц (2-е изд.). М.: Наука, 1966
  • Ланкастер П. Теория матриц М.: Наука, 1973

линейная алгебра — Ранг «Матрицы характеристик»: $A — \lambda I$

спросил

Изменено 3 года, 3 месяца назад

Просмотрено 4к раз

$\begingroup$

Анализ матриц Хорн, Джонсон 1-е изд. Проблема: 1.2.6 9{n}p_{A_{i}}(t)$$ где $A$ — матрица, полученная удалением $i$-й строки и столбца матрицы $A$. Поскольку $\lambda$ является единственным корнем $p_{A}$, $p_{A}'(\lambda) \neq 0$ (правильно? Есть ли другая причина, по которой это верно?). Отсюда следует, что по крайней мере один из характеристических многочленов главных подматриц размера $n-1$ отличен от нуля в $\lambda$.

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

  • линейная алгебра
  • матрицы
  • собственные значения-векторы

$\endgroup$

3

$\begingroup$

Когда вы заменяете $\lambda$ на $t$, левая часть не равна нулю; таким образом, по крайней мере одно из слагаемых в правой части отлично от нуля.

Следовательно, $\lambda$ не является собственным значением $A_i$ для некоторого $i$, а это означает, что матрица $A_i-\lambda I$ обратима. Такая матрица получается из $A-\lambda I$ удалением $i$-й строки и столбца, поэтому $A-\lambda I$ имеет $n-1$ линейно независимых столбцов. n$. Пусть $p=\dim \ker (A-\lambda I).$ 9pQ(t)$, где $Q$ — некоторый полином. Это подразумевает $$p\leq \operatorname{mult}(\lambda)$$ie $$\dim\ker (A-\lambda I)\leq \operatorname{mult}(\lambda)$$

$\endgroup$

$\begingroup$

Алгебраическая кратность собственного значения $\lambda$ равна $1$, поэтому геометрическая кратность будет равна $\le1$. Пусть $v$ — собственный вектор, соответствующий $\lambda$, тогда $(A-\lambda I)v=0$ дает только один линейно независимый собственный вектор в качестве своего решения, из которого, в свою очередь, следует, что $rank(A-\lambda I) =n-1$.

$\endgroup$

$\begingroup$

пусть $A$ — матрица $n\times n$, и если $c$ — собственное значение характеристического уравнения, то $|A-cI|$ будет $0$ и, следовательно, не будет полной матрица рангов (ранг $

  1. Фактически, , если это простое собственное значение, т. е. его алгебраическая кратность равна 1, такая же, как геометрическая кратность , тогда ранг будет $n-1$.

  2. Если алгебраическая кратность > $1$ и $\operatorname{dim}\big(\operatorname{Ker} (A-cI)\big)=g$ (геометрическая кратность), то ранг будет $n-g$. говорит, что $\text{nullity} + \text{rank} = n$, здесь nullity равен $g$, поэтому мы имеем ранг характеристического уравнения $= n-g$)

$\endgroup$

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

.

линейная алгебра — Определитель симметричной матрицы $(A-\lambda I)$

спросил

Изменено 7 лет, 5 месяцев назад 9n(\lambda-\lambda_1)(\lambda-\lambda_2)(\lambda-\lambda_3)$. Чему в этом случае будут равны $\lambda_1$,$\lambda_2$ и $\lambda_3$? И как определить его значение, учитывая, что матрица симметрична?

  • линейная алгебра
  • матрицы
  • собственные значения-векторы
  • определитель

$\endgroup$

5

$\begingroup$

$\left( \begin{массив}{ccc} 1-\лямбда&-1&2\\ -1 и 1-\лямбда и 2 \\ 2 и 2 и 2-\лямбда\\ \конец{массив} \справа) $ = $\left(\begin{массив}{ccc} 2-\лямбда & -2+\лямбда & 0 \\ -1 и 1-\лямбда и 2 \\ 2 и 2 и 2-\лямбда\\ \конец{массив} \справа) =(-2+\лямбда) \left( \begin{массив}{ccc} -1 и 1 и 0 \\ -1 и 1-\лямбда и 2 \\ 2 и 2 и 2-\лямбда\\ \end{массив} \right) = (-2+\лямбда) \left( \begin{массив}{ccc} -1 & 0 & 0 \\ -1 & -\лямбда & 2 \\ 2 и 4 и 2-\лямбда\\ \end{массив} \right)= (-1)(-2+\лямбда) \left( \begin{массив}{ccc} -\лямбда & 2 \\ 4 и 2-\лямбда\\ \конец{массив} \справа) = (-1)(-2+\лямбда) \left( \begin{массив}{ccc} 4-\лямбда и 4-\лямбда\\ 4 и 2-\лямбда\\ \end{массив} \right)= (-2+\лямбда)(\лямбда-4) \left( \begin{массив}{ccc} 1 и 1\\ 4 и 2-\лямбда\\ \конец{массив} \справа) знак равно (-2+\лямбда)(\лямбда-4) \left( \begin{массив}{ccc} 0 и 1\\ 2+\лямбда и 2-\лямбда\\ \end{массив} \right)=(-2+\lambda)(\lambda-4)(2-\lambda)=(-1)(\lambda-2)(\lambda-4)(\lambda-2 ) $ Следовательно, $\лямбда_1=2,\лямбда_2=2,\лямбда_3=4$.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *