PCA主成分分析法降维及测试
目录
- PCA主成分分析法降维及测试
- PCA主成分分析法
- 概念
- PCA的基本思想
- PCA的步骤
- PCA的优缺点
- 优点
- 缺点
- PCA函数
- 函数导入
- 参数
- 方法
- 返回值
- 实际测试
- 数据理解
- 代码测试
PCA主成分分析法
概念
- PCA
主成分分析(PCA)是一种常用的数据分析方法,其主要目的是通过降维来简化数据集的复杂性,同时尽可能保留原始数据中的重要信息。 - 降维
数据特征又叫数据维度,减少数据的特征即降维。
PCA的基本思想
PCA的基本思想是将多个变量通过线性组合转换成少数几个互不相关的综合变量,这些综合变量称为主成分。每个主成分都是原始变量的线性组合,且它们彼此之间互不相关,这使得我们可以通过保留最重要的几个主成分来减少数据的维度。
PCA的步骤
- 步骤1:数据预处理
- 去中心化:将每个特征的平均值减去,使数据集的均值为0。
- 标准化:如果特征的量纲不同,需要将每个特征缩放到具有零均值和单位方差。
- 步骤2:计算协方差矩阵
- 协方差矩阵可以衡量数据集中不同变量之间的相关性。协方差矩阵的对角线元素是各个变量的方差,非对角线元素是两个变量之间的协方差。
- 步骤3:计算特征值和特征向量
- 对协方差矩阵进行特征分解,得到一组特征值和对应的特征向量。
- 步骤4:选择主成分
- 根据特征值的大小,选择前k个最大的特征值对应的特征向量作为主成分。这些特征向量指向数据变化最大的方向。
- 步骤5:构造投影矩阵
- 将选择的k个特征向量组合成一个投影矩阵。
- 步骤6:将数据投影到新空间
- 使用投影矩阵将原始数据转换到新的k维空间,得到降维后的数据。
PCA的优缺点
优点
1.计算方法简单,容易实现。
2.可以减少指标筛选的工作量。
3.消除变量间的多重共线性。
4.在一定程度上能减少噪声数据。
缺点
1.特征必须是连续型变量。
2.无法解释降维后的数据是什么。
3.贡献率小的成分有可能更重要。
PCA函数
函数导入
python">from sklearn.decomposition import PCA
参数
- n_components:整数或小于0小数,一般设置此参数
默认为None,所有主成分都会保留,即特征数量保持不变 - copy:布尔值,(默认为True)
如果为True,则复制原始数据。如果为False,则原始数据可能会被覆盖。 - whiten:布尔值,可选(默认为False)
- 如果为True,则白化数据,即除以主成分的标准差使得每个特征具有单位方差。这通常在执行某些降维后的学习算法时是有用的。
- svd_solver:字符串,可选(默认为’automatic’)
- ‘auto’:基于数据和n_components自动选择最佳方法。
- ‘full’:使用完整的SVD。
- ‘arpack’:用于计算稀疏数据的奇异值分解的迭代方法。
- ‘randomized’:使用随机化方法进行SVD。
- tol:浮点数,可选(默认为0.0)
用于SVD的奇异值计算的收敛阈值。只适用于’svd_solver’为’arpack’或’randomized’。 - iterated_power:整数,可选(默认为’auto’)
仅当’svd_solver’为’randomized’时使用。指定了幂迭代次数。 - random_state:控制随机数生成器的种子
- weight:数组,形状为(n_samples,),可选(默认为None)
给每个样本分配一个权重。在降维时,每个样本的贡献与其权重成正比。
方法
- fit(X) ,仅计算特征数据x,无返回值
fit_transform(X) ,返回训练后降维的数据特征 - fit_transform(X):训练模型并返回降维后的数据。相当于调用 fit(X) 然后调用 transform(X)。
返回值
- components_ 属性:
- 返回组成主成分的数组。如果PCA被拟合在一个有n个特征的数据集上,并且指定了保留k个主成分,那么
components_
将是一个形状为(n, k)的数组。
- 返回组成主成分的数组。如果PCA被拟合在一个有n个特征的数据集上,并且指定了保留k个主成分,那么
- explained_variance_ 属性:
- 返回每个选定主成分的解释方差,即每个主成分的方差大小。
- explained_variance_ratio_ 属性:
- 返回每个选定主成分的解释方差比例,即每个主成分解释的原始数据方差的比例。
- singular_values_ 属性:
- 返回奇异值,即主成分的奇异值。
- mean_ 属性:
- 返回每个特征的均值,PCA在拟合数据时会减去这个均值。
- noise_variance_ 属性:
- 返回噪声方差,即不是由主成分解释的方差。
实际测试
数据理解
除最后一列皆为特征数据,PCA降维后,特征数据减少,但准确率变化不大。
代码测试
代码展示:
python">from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
data = pd.read_excel('hua.xlsx')
x = data.iloc[:,:-1]
y = data.iloc[:,-1]x_tr,x_te,y_tr,y_te = \train_test_split(x, y, test_size=0.2,random_state=1000)lg = LogisticRegression()
lg.fit(x_tr,y_tr)tr_pre = lg.predict(x_tr)
print(metrics.classification_report(y_tr,tr_pre,digits=4))
te_pre = lg.predict(x_te)
print(metrics.classification_report(y_te,te_pre,digits=4))pca = PCA(n_components=0.9)
pca.fit(x)
x_pca = pca.transform(x)
print(x_pca)x_tr,x_te,y_tr,y_te = \train_test_split(x, y, test_size=0.2,random_state=1000)
lg = LogisticRegression()
lg.fit(x_tr,y_tr)tr_pre = lg.predict(x_tr)
print(f'PCA:{metrics.classification_report(y_tr,tr_pre,digits=4)}')
te_pre = lg.predict(x_te)
print(f'PCA:{metrics.classification_report(y_te,te_pre,digits=4)}')
运行结果:
未PCA处理:
PCA处理:
PCA转换后部分特征数据:
调试:
返回组成主成分的数组
主成分解释的原始数据方差的比例