Scikit-learn_成分分解与降维_独立成分分析

一.描述

  • 从录音数据中分离出两位演讲者个字独立的讲话声音s1和s2,这就是独立成分分析。
  • 独立成分分析又被称为盲源分析
  • 独立成分分析通常不用于降低维度,而用于分离叠加信号。由于ICA模型不包括噪声项,因此要使模型正确,必须使用白化。FastICA类的whiten参数可以设置是否使用白化

二.实例

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['FangSong']
plt.rcParams['axes.unicode_minus'] = False
_x = np.linspace(0, 8*np.pi, 1000)
k1 = np.where(np.int_(0.5*_x/np.pi)%2==0, 1, -1)/np.pi
k2 = np.where(np.int_(_x/np.pi)%2==0, 1, 0)
k3 = np.where(np.int_(_x/np.pi)%2==0, 0, 1)
# 第一位演讲者的声音
s1 = np.sin(_x)
# 第二位演讲者的声音
s2 = _x%(np.pi)*k1*k2 + (np.pi-_x%(np.pi)) * k1 * k3
# 录音1
x1 = 0.4*s1 + 0.5*s2
# 录音2
x2 = 1.2*s2 - 0.3*s2
plt.figure(figsize=(20, 10))
plt.subplot(121)
plt.plot(_x, s1, label='s1')
plt.plot(_x, s2, label='s2')
plt.legend()
plt.subplot(122)
plt.plot(_x, x1, label='x1')
plt.plot(_x, x2, label='x2')
plt.legend()
plt.show()
from sklearn.decomposition import FastICA
# 将两个信号合并成矩阵
X = np.stack((x1, x2), axis=1)
X.shape
# 快速独立完成成分分析类实例化
fica = FastICA(n_components=2)
fica.fit(X)
# 独立成分分析结果
X_ica = fica.transform(X)
X_ica.shape
plt.plot(_x, X_ica[:, 0], label='独立成分1')
plt.plot(_x, X_ica[:, 1], label='独立成分2')
plt.legend()
plt.show()

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值