sklearn -- PCA

PCA

PCA(principal components analysis)即主成分分析技术,又称主分量分析。主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。
在统计学中,主成分分析PCA是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。(注意:来自百度百科)

用途

一、对高维数据降维
通过指定方差保留百分比自动保留主成分的个数达到降维目的,eg: pca = PCA(0.95)
通过保留主成分的个数达到降维目的,eg: pca = PCA(n_components=12)

二、对噪音过大的数据降噪
先将高维数据降到低维度,再把转化后的数据升到原始维度,在这个过程中会消掉部分噪音和部分数据。eg: pca.inverse_transform(newX)

坐标系变换

在 n 维的坐标系中每个点都是一个 n 维的向量,每个向量都可以被这个空间的 m(m < n) 个向量近似于表示或全表示。这 m 个向量就是新的坐标系。这样的 m 个向量有多种可能,只要最优化的一个。

最优化坐标系

第一主成分:n 维的坐标系中每个点都投影到第一个向量上时,此时的目标函数:
在这里插入图片描述
使用梯度上升法求得这个 f 目标函数方差最大所对应的向量就是第一维度所在的方向,每个点在这个维度投影的值就是这个维度的值。

第二主成分:n 维的坐标系中每个点减去第一主成分上的值后都投影到第二个向量上时,求最大目标函数 f 所对应在第二维度上的值。

梯度上升法

梯度上升法的基本思想可以类比为一个上山的过程。假设这样一个场景:一个人在山脚或山腰,需要到达最高点。但此时山上的浓雾很大,导致可视度很低。因此,上山的路径就无法确定,他必须利用自己周围的信息去找到上山的路径。这个时候,他就可以利用梯度上升算法来帮助自己上山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山顶。
在这里插入图片描述

sklearn 中PCA API 介绍

常用参数

n_components : int, float, None or string
PCA算法中所要保留的主成分个数,也即保留下来的特征个数,如果 n_components = 1,将把原始数据降到一维;如果赋值为string,如n_components=‘mle’,将自动选取特征个数,使得满足所要求的方差百分比;如果没有赋值,默认为None,特征个数不会改变(特征数据本身会改变)。

copy : bool (default True)
PCA算法是否复制训练数据。

whiten : bool, optional (default False)
是否对训练数据中每一个特征做归一化。

svd_solver : string {‘auto’, ‘full’, ‘arpack’, ‘randomized’}
指定奇异值分解SVD的方法,一般使用默认值。

常用属性

components_ : array, shape (n_components, n_features)
返回所保留各个主成分的特征值。

explained_variance_ : array, shape (n_components,)
返回所保留各个主成分的方差。

explained_variance_ratio_ : array, shape (n_components,)
返回所保留各个主成分的方差百分比,如果n_components没有赋值,则所有特征都会返回一个数值且解释方差之和等于1。

mean_ : array, shape (n_features,)
返回每个主成分的平均值。

n_components_ : int
返回所保留的主成分个数。

常用方法

fit(self, X[, y])
用数据X来训练PCA模型。

inverse_transform(self, X)
将降维后的数据转换成原始数据,如果维度不一致,会丢失部分数据。

transform(self, X)
将数据X转换成降维后的数据

官网地址 https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA

eg:降维 (手写数字降维显示)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn import datasets
from sklearn.model_selection import train_test_split

digits = datasets.load_digits() #手写数字
X= digits.data
y= digits.target

pca = PCA(n_components=3)
pca.fit(X)
x_reduction = pca.transform(X)

# 在3维空间中打印出结果
fig = plt.figure(1, figsize=(8, 6))
ax = Axes3D(fig, elev=-150, azim=110)

X.shape 			#(1797, 64)
x_reduction.shape 	#(1797, 3)

for i in range(10):
    ax.scatter(x_reduction[y==i, 0], x_reduction[y==i, 1], x_reduction[y==i, 2], alpha=0.8)
ax.w_xaxis.set_ticklabels([])
ax.w_yaxis.set_ticklabels([])
ax.w_zaxis.set_ticklabels([])
plt.show()

数据从 64 维度降到 3 维
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值