Не понимаю вывод анализа основных компонентов (PCA) в Python

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

import sys
import glob

from scipy.io.wavfile import read
from scipy import signal
from scipy.fftpack import fft
import numpy as np
import matplotlib.pyplot as plt
import pylab

# Read file to get samplerate and numpy array containing the signal 

files = glob.glob('../some/*.wav')

song_list = []

for wav in files:

    (fs, x) = read(wav)

    channels = [
        np.array(x[:, 0]),
        np.array(x[:, 1])
    ]

    # Combine channels to make a mono signal out of stereo
    channel =  np.mean(channels, axis=0)
    channel = channel[0:1024,]
    # Generate spectrogram 
    ## Freqs is the same with different songs, t differs slightly
    Pxx, freqs, t, plot = pylab.specgram(
        channel,
        NFFT=128, 
        Fs=44100, 
        detrend=pylab.detrend_none,
        window=pylab.window_hanning,
        noverlap=int(128 * 0.5))
    # Magnitude Spectrum to use
    Pxx = Pxx[0:2]
    X_flat = Pxx.flatten()
    song_list.append(X_flat)

song_matrix = np.vstack(song_list)

Если я теперь применю PCA к song_matrix...

import matplotlib
from matplotlib.mlab import PCA
from sklearn import decomposition


#test = matplotlib.mlab.PCA(song_matrix.T)

pca = decomposition.PCA(n_components=2)
song_matrix_pca = pca.fit_transform(song_matrix.T)


pca.components_ #These components should be most helpful to discriminate between the songs due to their high variance
pca.components_

... последние 2 компонента следующие: конечные компоненты - два измерения из 15 wav-файлов. Проблема в том, что я не могу найти эти два вектора в исходном наборе данных со всеми измерениями. Что я делаю не так или неправильно понимаю Все это?

2 ответа

Скажем, у вас есть вектор-столбец V, содержащий ОДНУ сплюснутую спектрограмму. PCA найдет матрицу M, столбцы которой являются ортогональными векторами (представьте, что они находятся под прямым углом к ​​любому другому столбцу в M).

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

Умножая матрицу M' (первые 2 столбца M) на V, мы получим вектор T' 2x1, представляющий "спектрограмму с уменьшенной размерностью". Вы можете восстановить аппроксимацию V, умножив T 'на обратную величину M'. Это сработало бы, если бы у вас тоже была матрица спектрограмм. Хранение только двух основных компонентов приведет к сжатию ваших данных с чрезвычайно большими потерями.

Но что, если вы хотите добавить новую песню в свой набор данных? Если это не очень похоже на оригинальную песню (то есть она вносит небольшие различия в исходный набор данных), нет никаких оснований полагать, что векторы M хорошо описывают новую песню. В этом отношении, даже умножение всех элементов V на константу сделало бы M бесполезным. PCA довольно специфичен для данных. Именно поэтому он не используется в сжатии изображений / аудио.

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

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

Другие вопросы по тегам