解决人工智能PCA算法输出不稳定的方案

微信公众号:湾区人工智能
作者:Cottbuser 会多国语言的海归
一线人工智能工程师独立兼职运营
关注可了解更多人工智能资讯。问题或建议,请公众号留言
如果你觉得本文对你有帮助,欢迎点赞,转发,赞赏

内容目录

PCA算法不稳定的原因代码举例分析:解决方案:

PCA算法不稳定的原因

神经网络算法利用了随机性,比如初始化随机权重,因此用同样的数据训练同一个网络会得到不同的结果。
神经网络特意用随机性来保证,能通过有效学习得到问题的近似函数。采用随机性的原因是:用它的机器学习算法,要比不用它的效果更好。
在神经网络中,随机初始化很常见,比如:最优化的随机性,比如随机优化;正则化的随机性,比如 dropout;初始化的随机性,比如权值

代码举例分析:

以下代码提取三维矩阵640*640*128中的二维640*640,然后对这个二维数组降维输出640*3

from sklearn.decomposition import PCA
import numpy as np 
import matplotlib.pyplot as plt 
import scipy.io

data = scipy.io.loadmat('docia.mat') # docia.mat其实是128个640*640的矩阵的叠加,也就是640*640*128,当只有一个通道的时候就是黑白图片,3个通道是RGB图片,128个通道就是128个图片的叠加
X = data['embedmap'][:,:,127]  #X里面是640个二维数组,每个数组里面有640个元素。也就是一个640*640的矩阵啦。这里竟然有负值,不可思议
print(X.shape)
print(len(X))
#print(len(X[0]))

pca = PCA(n_components=3) #n_components返回所保留的成分个数n。
#pca.fit(X)  #fit(X),表示用数据X来训练PCA模型;fit()可以说是scikit-learn中通用的方法,每个需要训练的算法都会有fit()方法,它其实就是算法中的“训练”这一步骤。因为PCA是无监督学习算法,此处y自然等于None。
PCA(copy=True, n_components=3, whiten=True) #whiten=True使得每个特征具有相同的方差。copy=True表示在运行算法时,将原始训练数据复制一份
pcaX=pca.fit_transform(X)  #用X来训练PCA模型,同时返回降维后的数据pcaX。
print(pcaX.shape)  #显示降维后数据的维数
print(pcaX)

输出结果如下:

输出1:
(640, 640)
640
640
(640, 3)
[[-12.223219 -7.6193943 -0.5728401 ]
[-12.112162 -7.5206504 -0.6358511 ]
[-11.950802 -7.4316864 -0.7056138 ]

[ 18.074594 5.940609 0.24237843]
[ 18.102503 5.7039223 0.2800763 ]
[ 17.99963 5.5585537 0.05802825]]
[Finished in 1.3s]

输出2:


(640, 640)
640
640
(640, 3)
[[-12.223227 -7.6194415 -0.5728512 ]
[-12.112167 -7.5206385 -0.6358729 ]
[-11.950809 -7.43169 -0.70560586]

[ 18.074602 5.94061 0.24237396]
[ 18.102509 5.703927 0.28006825]
[ 17.999641 5.5585465 0.05802932]]
[Finished in 1.3s]

可以看出pca降维算法每次运算结果不同

解决方案:

代码最顶端添加如下四行代码:

from numpy.random import seed
seed(1) #必须在其他模块的导入或者其他代码之前,文件的顶端部分通过调用 seed() 函数设置种子点。http://wwwbuild.net/okweiwu/922253.html
from tensorflow import set_random_seed
set_random_seed(1)   #目标是固定随机数的种子,让开始的随机数固定住,不再随便赋初值

再次运行两遍看效果:
发现结果稳定了


(640, 640)
640
640
(640, 3)
[[-12.223243 -7.6194053 -0.5728447 ]
[-12.112166 -7.520634 -0.6358656 ]
[-11.950801 -7.431686 -0.70562375]

[ 18.074594 5.940601 0.24238233]
[ 18.1025 5.703924 0.2800711 ]
[ 17.999636 5.558541 0.05803886]]
[Finished in 2.1s]


(640, 640)
640
640
(640, 3)
[[-12.223243 -7.6194053 -0.5728447 ]
[-12.112166 -7.520634 -0.6358656 ]
[-11.950801 -7.431686 -0.70562375]

[ 18.074594 5.940601 0.24238233]
[ 18.1025 5.703924 0.2800711 ]
[ 17.999636 5.558541 0.05803886]]
[Finished in 2.0s]

你可能感兴趣的:(AI)