iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
AI/ ML & Data

機器學習與深度學習背後框架與過程論文與實作系列 第 22

DAY22 獨立成分分析ICA 22/30

  • 分享至 

  • xImage
  •  

獨立成分分析 (Independent Component Analysis, ICA) 是一種統計和計算技術,旨在從多變量的數據中提取出互相獨立的信號。與主成分分析 (PCA) 不同,PCA 尋找的是不相關(uncorrelated)的成分,而 ICA 尋找的是統計上獨立(statistically independent)的成分。

ICA 概念

ICA 的目標是將觀測到的多變量信號分解為統計獨立的組成部分。這些組成部分常常被稱為「獨立成分」(Independent Components)。ICA 的應用廣泛,包括信號處理、特徵提取、盜版檢測、腦電波分析等。典型的應用之一是「雞尾酒會問題」,即從多個混合的音頻信號中提取出各個獨立的音源。

ICA 步驟

  1. 中心化資料:對資料進行中心化處理,使每個變量的均值為 0。

  2. 白化資料:對資料進行白化處理,消除不同變量之間的相關性。這一步通常通過對資料進行 PCA 或 ZCA 白化實現。

  3. 計算獨立成分:通過最大化非高斯性來尋找獨立成分。非高斯性越高,成分越獨立。常用的算法包括 FastICA。

  4. 重構信號:使用計算出的獨立成分重構原始資料。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import FastICA

np.random.seed(0)
n_samples = 2000
time = np.linspace(0, 8, n_samples)

# 兩個獨立的正弦波信號
S1 = np.sin(2 * time)  # 信號 1: 正弦波
S2 = np.sign(np.sin(3 * time))  # 信號 2: 方波

# 組合成矩陣形式
S = np.c_[S1, S2]

# 將信號進行混合 (線性混合)
A = np.array([[1, 1], [0.5, 2]])  # 混合矩陣
X = np.dot(S, A.T)  # 混合信號

# 使用 ICA 分離信號
ica = FastICA(n_components=2)
S_ica = ica.fit_transform(X)  # 分離出的信號
A_ica = ica.mixing_  # ICA 混合矩陣

# 正規化以便於比較
S_ica /= S_ica.std(axis=0)


plt.figure(figsize=(10, 8))

plt.subplot(3, 1, 1)
plt.title("原始信號")
plt.plot(S)
plt.subplot(3, 1, 2)
plt.title("混合信號")
plt.plot(X)
plt.subplot(3, 1, 3)
plt.title("分離出的信號 (ICA)")
plt.plot(S_ica)

plt.tight_layout()
plt.show()
  • PCA 尋找的是不相關的成分,主要應用於資料降維,並保留最多的資料變異性。
  • ICA 尋找的是獨立成分,主要應用於信號分離,尤其適合用來處理混合信號。

ICA 是一種更高階的技術,尤其適用於當我們關心資料中潛在獨立結構或信號時。然而,與 PCA 相比,ICA 的計算複雜度較高,並且對初始條件較敏感。


上一篇
DAY21 主成分分析PCA21/30
下一篇
DAY23 Logistic Regression 23/30
系列文
機器學習與深度學習背後框架與過程論文與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言