目录
一、引言
PCA (Principal Component Analysis) 是一种常用的降维技术和数据分析方法。它主要用于从高维数据中提取最相关的特征。PCA 的目标是通过线性变换将原始数据投影到一个新的低维空间,使得投影数据的方差最大化。通过降维,可以减少数据的复杂性,简化模型的计算,同时尽可能保留原始数据的信息。详情可见我的另一篇博客:PCA降维的推导(超详细)
二、PCA的主要参数、属性、方法
PCA由以下代码从sklearn库中导入
from sklearn.decomposition import PCA
创建PCA对象的可选参数
pca = PCA(n_components=None,copy=True,whiten=False,svd_solver="auto",
tol=0.0,iterated_power="auto",random_state=None)
-
n_components: 这个参数决定了PCA算法应该保留的主成分数量。如果设置为None(默认值),则保留所有主成分。如果设置为一个整数k,则只保留前k个主成分;k为小数表示保留的主成分的方差百分比。通过选择适当的主成分数量,可以实现数据的降维。
-
copy: 这个参数决定是否在运行PCA算法之前复制输入数据。如果设置为True(默认值),则会复制数据,以免修改原始数据。如果设置为False,则会直接在原始数据上进行计算。通常建议将其保留为默认值。
-
whiten: 这个参数决定是否对数据进行白化处理。白化是一种线性变换,可以使投影后的数据具有相同的方差。默认情况下,不进行白化(False),但是在某些应用中,白化可以提高数据的可解释性。
-
svd_solver: 这个参数决定使用的SVD(奇异值分解)求解器的类型。可以选择的选项包括"auto"(默认值)、"full"、"arpack"和"randomized"。具体选择哪种求解器取决于数据集的大小和矩阵的结构。一般情况下,"auto"会根据输入数据的大小和特征数量选择最合适的求解器。
-
tol: 这个参数决定奇异值分解的收敛容差。默认值为0.0,表示使用默认的收敛容差。较小的值会产生更精确的结果,但也会增加计算时间。
-
iterated_power: 这个参数决定幂迭代方法的迭代次数。默认值为"auto",表示使用一种启发式方法选择迭代次数。通常情况下,不需要手动调整这个参数。
-
random_state: 这个参数决定随机数生成器的种子,用于在使用"randomized"求解器时控制随机性。如果设置为None(默认值),则随机数生成器使用当前系统时间作为种子。
PCA的属性
-
components_: 选定的主成分。是一个形状为 (n_components, n_features) 的数组,表示每个主成分的特征向量。
-
explained_variance_: 每个主成分的解释方差。它是一个包含了按降序排列的每个主成分的解释方差值的一维数组。
-
explained_variance_ratio_: 每个主成分的解释方差比例。它是一个包含了按降序排列的每个主成分的解释方差比例的一维数组。
-
singular_values_: 每个主成分的奇异值。它是一个包含了按降序排列的每个主成分的奇异值的一维数组。
-
mean_: 每个特征的均值。是一个形状为 (n_features,) 的一维数组。
-
noise_variance_: 噪声方差的估计值。只有当 whiten=True 时才计算。
-
n_samples_:训练数据中的样本数量。
-
n_features_:训练数据中的特征数。
PCA的方法
-
fit(X): 这个方法用于拟合PCA模型,其中X是形状为(n_samples, n_features)的输入数据。在拟合过程中,PCA计算数据的主成分和其他相关信息。
-
transform(X): 这个方法用于将输入数据X转换为降维后的表示。它接受形状为(n_samples, n_features)的输入数据,并返回降维后的数据表示,形状为(n_samples, n_components)。
-
fit_transform(X): 这个方法是fit()和transform()的结合,即先拟合模型,然后将输入数据转换为降维后的表示。它接受形状为(n_samples, n_features)的输入数据,并返回降维后的数据表示,形状为(n_samples, n_components)。
-
inverse_transform(X): 这个方法用于将降维后的数据表示X转换为原始的高维表示。它接受形状为(n_samples, n_components)的输入数据,并返回转换后的数据表示,形状为(n_samples, n_features)。
-
score(X):用于计算数据在主成分空间中的重构误差。
-
get_precision():用于返回数据的精度矩阵(仅在whiten=True时可用)。
三、代码示例
所用表格: hua.xlsx
import numpy as np #用于数值计算
from sklearn.decomposition import PCA #提供了PCA算法用于降维
import pandas as pd #用于数据处理
from sklearn.linear_model import LogisticRegression #提供了逻辑回归算法的实现
# 从Excel文件'hua.xlsx'中读取数据存储在pandas DataFrame 'hua'中
hua=pd.read_excel('hua.xlsx')
# 从DataFrame中提取输入特征(前四列)存储在变量 'x' 中
x=hua.iloc[:,:4]
# 从DataFrame中提取目标变量(最后一列)存储在变量 'y' 中
y=hua.iloc[:,-1]
# 创建一个PCA实例,设置n_components参数为0.9
# 表示希望在降维后保留90%的数据方差
pca=PCA(n_components=0.9)
# 对输入数据 'x' 进行PCA模型的拟合
pca.fit(x)
# 计算主成分,并确定需要保留多少个主成分来解释指定比例的方差
print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))
# 输出总方差和每个主成分的方差所占的百分比
print("每个特征所占百分比",pca.explained_variance_ratio_)
# 打印降维后的数据
# 调用fit_transform方法,将输入数据进行降维转换
print('PCA降维后数据:')
new = pca.fit_transform(x)
print(new)
# 创建逻辑回归模型实例
# 使用降维后的数据 'new' 和目标变量 'y' 进行模型拟合
# 计算并输出模型在降维后数据上的得分(准确率)
lr=LogisticRegression()
lr.fit(new,y)
print("进行pca降维的得分:",lr.score(new,y))
# 再次进行逻辑回归模型拟合,使用原始数据 'x' 和目标变量 'y'
# 计算并输出模型在原始数据上的得分
lr.fit(x,y)
print("未进行pca降维的得分:",lr.score(x,y))
运行结果: