【Python机器学习】NMF——将NMF应用于模拟信号数据

假设我们对一个信号感兴趣,它是由三个不同信号源合成的:


import matplotlib.pyplot as plt
import mglearn


S=mglearn.datasets.make_signals()
plt.figure(figsize=(6,1))
plt.plot(S,'-')
plt.xlabel('Time')
plt.ylabel('Signal')
plt.show()

不幸的是,我们无法观测到原始数据,只能观测到三个信号的叠加混合。我们想要将混合信号分解为原始分量。

假设我们有许多不同的方法来观测混合信号,每种方法都为我们提供了一系列的测量结果:


A=np.random.RandomState(0).uniform(size=(100,3))
X=np.dot(S,A.T)
print('shape of measurements:{}'.format(X.shape))

我们可以用NMF来还原这三个信号:


nmf=NMF(n_components=3,random_state=42)
S_=nmf.fit_transform(X)
print('Recoveres signal shape:{}'.format(S_.shape))

为了对比,应用PCA,并对比NMF和PCA的信号活动:


pca=PCA(n_components=3)
H=pca.fit_transform(X)

models=[X,S,S_,H]
names=['Observations (first three measurements)',
       'True sourse',
       'NMF ','PCA ']
fig,axes=plt.subplots(4,figsize=(8,4),gridspec_kw={'hspace':.5},subplot_kw={'xticks':(),'yticks':()})

for model,name,ax in zip(models,names,axes):
    ax.set_title(name)
    ax.plot(model[:,:3],'-')
plt.show()

途中包含来自X 的100次测量里的3次用于参考。可以看到,NMF在发现原始信号源时得到了不错的结果,而PCA则失败了。要记住,NMF生成的分量是没有顺序的。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值