携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
PCA白化其实跟PCA算法的后续处理。那么他到底起到什么作用呢。我们举个例子来说明,假设训练数据是图像,我们知道相邻的像素点有更多相似性,这一点是不容置疑的。比如训练集是人脸图像,那么两个相邻的像素点一定会有很强的相关性,比如如果像素足够大,肤色,皮肤厚度仅有细微变化。这么多相似数据会造成训练时输入是冗余的。白化的目的就是降低输入的冗余性;更正式的说,我们希望通过PCA白化过程使得学习算法的输入具有如下性质:
1.特征之间相关性较低
2.所有特征具有相同的方差。
在PCA算法中已经消除了输入特征 x(i) 之间的相关性。我们这里只需对PCA处理后的数据进行等方差处理。
为了使每个输入特征具有单位方差,我们可以直接使用
作为缩放因子来缩放每个特征。具体地,我们定义PCA白化如下
Kitlearn实现: data = pd.read_excel(r'Desktop\principal_component.xls', header = None)
from sklearn.decomposition import PCA
pca=PCA(3,whiten=True)
pca.fit(data)
Out[14]:
PCA(copy=True, iterated_power='auto', n_components=3, random_state=None,
svd_solver='auto', tol=0.0, whiten=True)
dimension_reduce=pca.transform(data)
whitening=dimension_reduce
pca=PCA(3)
pca.fit(data)
PCA(copy=True, iterated_power='auto', n_components=3, random_state=None,
svd_solver='auto', tol=0.0, whiten=False)
dimension_reduce=pca.transform(data)
Ohne_Whitening=dimension_reduce
Ohne_Whitening
lambda_1=np.array([ 4.00716350e+02, 8.12549005e+01, 2.21371447e+01])
Ohne_Whitening/np.sqrt(lambda_1)
方差验证:****
np.var(whitening[:,1])
Out[22]: 0.92857142857142816
np.var(whitening[:,2])
Out[23]: 0.92857142857142894
np.var(whitening[:,0])
Out[25]: 0.92857142857142905
类型:bool,缺省时默认为False 意义:白化,使得每个特征具有相同的方差。
svd_solver : string {‘auto’, ‘full’, ‘arpack’, ‘randomized’}
‘Auto’
solver是通过基于X形状和n_components的默认策略选择的:如果输入数据大于500x500并且选取的主成分数量低于数据最小维度的80%,则启用更有效的随机化randomized方法。否则,使用精确完整的‘full’SVD,然后按情况任意选取。
‘Full’
通过调用标准的LAPACK解算器借助于scipy.linalg.svd 精确运行完整SVD并且通过后处理选择主成分。(运行后选择)
‘arpack’
通过调用ARPACK解算器借助于scipy.sparse.linalg.svds运行的SVD降维成n_components。这种算法严格要求0 < n_components < min(X.shape)。
“randomized ”
借助于Halko et al.方法运行随机化SVD
tol : float >= 0, optional (default .0)
通过svd_solver == ‘arpack’计算的奇异值的容差
iterated_power : int >= 0, or ‘auto’, (default ‘auto’)
借助于svd_solver == ‘randomized’计算的幂方法的迭代次数
random_state:int, RandomState instance or None, optional (default None)
如果int, random_state是随机数生成器使用的种子;
如果RandomState instance,random_state是随机数发生器;
如果None,随机数生成器就是np.random使用的RandomState instance。当svd_solver == ' arpack '或'randomized'时使用。
属性:
components_ : array, shape (n_components, n_features)
特征空间的主坐标轴,代表数据的最大方差方向。这些主成分通过explained_variance_来排序。
explained_variance_ : array, shape (n_components,)
被每个被选主成分解释的方差的数量
等于n_component个最大的X协方差特征值。
explained_variance_ratio_ : array, shape (n_components,)
被每个被选主成分解释的方差的百分比。
如果n_components 没有被设置,那么所有主成分被存储起来并且百分比的总和等于1。
singular_values_ : array, shape (n_components,)
对应于每个所选主成分的奇异值。****
mean_ : array, shape (n_features,)
Equal to X.mean(axis=0).
n_components_ : int
被估计的主成分数量,如果 n_components 被设置成‘mle’或者一个0到1之间的数,这个数字是根据输入数据估计的。否则,如果n_components为None,它等于参数n_components,或者n_features和n_samples的较小值。