入门版python实现独立成分分析法ICA

只讲用法,不讲原理。

前提条件:安装好python,并安装好numpy、matplotlib、sklearn库。

win10安装方法:打开cmd, cd python , pip install numpy,显示collecting numpy后会进行下载并安装;如果下载安装失败,就去显示collecting numpy后给出的链接那儿手动下载,手动下载好了后,cd到保存的路径,然后pip install ***(***指文件名)。
安装成功后,打开IDLE输入import numpy,不报错的话就是安装成功了。如果安装不成功,检查下环境变量里是否已添加python路径,若无,则添加。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import FastICA#导入函数

经过FastICA处理后,此时的数据源在图形形状上跟初始数据源具有相似性,但幅度是不一样的,且可能会发生翻转,这是因为ICA是一个不定问题,有多个解符合假设,不是唯一解。

将三个信号进行随机线性混合,得到三个混合信号;然后用FastICA算法进行解混,得到三个源信号。
完整可实现代码部分如下:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import FastICA
C = 200
x = np.arange©
a = np.linspace(-2, 2, 25)
s1 = np.array([a, a, a, a, a, a, a, a]).reshape(200, )
s2 = 2 * np.sin(0.02 * np.pi * x)
s3 = np.array(20 * (5 * [2] + 5 * [-2]))
ax1 = plt.subplot(311)
ax2 = plt.subplot(312)
ax3 = plt.subplot(313)
ax1.plot(x,s1)
ax2.plot(x,s2)
ax3.plot(x,s3)
plt.show()
s=np.array([s1,s2,s3])
ran=2*np.random.random([3,3])
mix=ran.dot(s)
ax1 = plt.subplot(311)
ax2 = plt.subplot(312)
ax3 = plt.subplot(313)
ax1.plot(x,mix[0,:])
ax2.plot(x,mix[1,:])
ax3.plot(x,mix[2,:])
plt.show()
ica = FastICA(n_components=2)
mix = mix.T
u = ica.fit_transform(mix)
u = u.T
ax1 = plt.subplot(311)
ax2 = plt.subplot(312)
ax3 = plt.subplot(313)
ax1.plot(x,u[0,:])
ax2.plot(x,u[1,:])
ax3.plot(x,u[2,:])
plt.show()

运行结果如下:入门版python实现独立成分分析法ICA_第1张图片
入门版python实现独立成分分析法ICA_第2张图片
入门版python实现独立成分分析法ICA_第3张图片
将代码稍加改变,可实现:
直接给出混合信号,用FastICA算法进行解混;
将n个混合信号进行解混得到m个源信号(n≥m)……

你可能感兴趣的:(python,人工智能,机器学习)