机器学习-PCA降维

本文介绍了主成分分析(PCA)的基本原理及其在不同场景下的应用,包括如何利用SparsePCA和MiniBatchSparsePCA去除非主要成分,IncrementalPCA解决内存限制问题,以及在Python的sklearn库中实现PCA的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值