tgoop.com/dsproglib/6940
Create: 
 
Last Update:
Last Update:
🎧 Как шпион на вечеринке: Independent Component Analysis (ICA)
Представьте: шумная вечеринка  — десятки голосов, музыка, звон бокалов. Каждый микрофон записывает неразборчивую смесь всех звуков.
Но шпион, вооружённый Independent Component Analysis (ICA), извлекает из хаоса отдельные разговоры — как будто разделяет сигналы по смыслу.
Именно это делает ICA в данных: разделяет сложные многомерные сигналы на независимые компоненты.
Если PCA (Principal Component Analysis) ищет некоррелированные оси, то ICA идёт дальше — ищет статистически независимые источники.
Математически это выглядит так:
X = A * S
где,
X — наблюдаемые данные (смесь сигналов),A — матрица смешивания,S — исходные независимые компоненты.ICA пытается найти матрицу
W, такую что:S = W * X
Главная идея — найти компоненты с максимальной негауссовостью, ведь по центральной предельной теореме сумма независимых переменных тяготеет к нормальному распределению.
Пример на Python:
STEP_SIZE = 1e-3
N_ITERATIONS = 50
X_centered = X - np.mean(X, axis=0)
pca = PCA(whiten=True)
X_whitened = pca.fit_transform(X_centered)
n, m = X_whitened.shape
w1 = rng.rand(m)
w1 /= np.linalg.norm(w1) + 1e-10
for i in range(N_ITERATIONS):
s = np.dot(X_whitened, w1)
gradient = 4 / n * np.dot(np.pow(s, 3), X_whitened)
w1 += STEP_SIZE * gradient
w1 /= np.linalg.norm(w1) + 1e-10
После нахождения первой компоненты выполняется deflation, чтобы следующая была независима:
X_deflated = X_whitened - np.outer(np.dot(X_whitened, w1), w1)
#буст

