PCA(Principal Component Analysis 主成分分析)
PCA主要用于非线性数据的降维,需要用到核技巧。因此在使用的时候需要选择合适的核函数并对核函数的参数进行调参.
IncrementalPCA,它主要是为了解决单机内存限制的,有时候我们的样本量可能是上百万+,
维度可能也是上千,直接去拟合数据可能会让内存爆掉,此时我们可以用IncrementalPCA类来解决这个问题。
IncrementalPCA先将数据分成多个batch,然后对每个batch依次递增调用partial_fit函数,
这样一步步的得到最终的样本最优降维.
SparsePCA和MiniBatchSparsePCA们和上面讲到的PCA类的区别主要是使用了L1的正则化,这样可以将很多非主要成分的影响度降为0,
这样在PCA降维的时候我们仅仅需要对那些相对比较主要的成分进行PCA降维
所以总结上面问题,在使用PCA时,可以先使用SparsePCA和MiniBatchSparsePCA把非主要成分去掉,然后再进行PCA,
如果内存不足,则使用IncrementalPCA代替PCA。
在sklearn中的使用
#coding=utf-8
'''
Created on 2018-3-1
'''
import numpy as np
data = np.array([[ 1. , 1. ],
[ 0.9 , 0.95],
[ 1.01, 1.03],
[ 2. , 2. ],
[ 2.03, 2.06],
[ 1.98, 1.89],
[ 3. , 3. ],
[ 3.03, 3.05],
[ 2.89, 3.1 ],
[ 4. , 4. ],
[ 4.06, 4.02],
[ 3.97, 4.01]])
data1 = np.array([[ 1.7 , 1.8 ],[3.04,3.06],[3.03,3.05]])
from sklearn.decomposition import PCA
# n_components=1表示降成一维
# pca=PCA(n_components=2)
# copy为false表示会影响原数据,默认为true
# pca=PCA(n_components=1,copy=False)
# n_components='mle'表示自动降为
# pca=PCA(n_components=0.98)
# n_components='0.98'表示降为后的特征含有原特征百分98%的信息
pca=PCA(n_components='mle')
pca.fit(data)
# newData=pca.fit_transform(data)
newData=pca.transform(data)
newData1=pca.transform(data1)
# 将降维的数据转换为原始数据
oldData = pca.inverse_transform(newData)
print newData
# [[ 2.12015916]
# [ 2.22617682]
# [ 2.09185561]
# [ 0.70594692]
# [ 0.64227841]
# [ 0.79795758]
# [-0.70826533]
# [-0.76485312]
# [-0.70139695]
# [-2.12247757]
# [-2.17900746]
# [-2.10837406]]
print newData1
# [[ 1.05940346]
# [-0.77899524]
# [-0.76485312]]
# print oldData
# 获取pca对象属性
# 获取经过pca以后剩下的特征数
print pca.n_components
# 各个特征占所有特征的方差百分比,分值越高说明保留的信息就越多,越重要
print pca.explained_variance_ratio_
# [ 0.99910873]
# 该特征的方差,方差越大,说明主成分越重要
print pca.explained_variance_
# [ 2.55427003]
print pca.get_params