文章目录
- PCA降维简介
- 什么是主成分分析?
- 主成分的选择与维度确定
- 降维的数学过程
- PCA降维求解步骤
- 降维后的效果和应用场景中的优势
- PCA模型
- API参数
- Attributes属性
- PCA对象的方法
- PCA降维实例
- 导入所需库
- 导入数据集
- 对数据进行处理
- 创建PCA模型并训练
- 查看训练结果
- 对降维数据进行划分数据集
- 进行逻辑回归模型训练
- 自测和使用测试集测试并打印分类报告
PCA降维简介
- 主成分分析(Principal Component Analysis,PCA)是一种多变量统计分析方法。
- PCA 降维是基于这样一个理念:在高维数据空间中,存在一些方向(主成分)比其他方向更能代表数据的变化。通过将数据投影到这些主要方向上,我们可以在较低维度空间中表示数据,同时尽可能减少信息损失。例如,假设有一个三维数据集,数据点在某个平面附近分布较密集,而在垂直于该平面的方向上变化较小。PCA 降维就可以找到这个平面的方向作为主要成分,将数据从三维降到二维。
什么是主成分分析?
主成分的选择与维度确定
降维的数学过程
PCA降维求解步骤
降维后的效果和应用场景中的优势
- 去除噪声和冗余信息:在实际数据中,可能存在一些噪声或者变量之间的冗余。PCA 降维通过聚焦于主要成分,可以有效地去除这些干扰因素。例如,在传感器数据中,可能由于传感器的精度问题或者环境因素产生噪声,PCA 可以降低这些噪声对数据分析的影响。
- 提高计算效率:在处理高维数据时,许多机器学习算法的计算复杂度会随着维度的增加而急剧上升。降维后的低维数据可以大大减少计算量。比如在支持向量机(SVM)分类任务中,对高维数据进行 PCA 降维后再进行分类,可以加快训练和预测的速度。
- 数据可视化:当数据维度降低到二维或三维时,可以方便地进行可视化。例如,在市场细分研究中,将消费者的多维度数据(如消费习惯、人口统计学特征等)进行 PCA 降维后,绘制在二维平面上,可以直观地看到不同消费群体的分布,有助于制定针对性的营销策略。
PCA模型
API参数
- n_components:这个参数可以帮我们指定希望PCA降维后的特征维度数目。简单来说:指定整数,表示要降维到的目标,【比如十维的数据,指定n_components=5,表示将十维数据降维到五维】如果为小数,表示累计方差百分比。0.9
- copy : 类型:bool,True或者False,缺省时默认为True。
意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维计算。
【按默认为True】 - whiten:判断是否进行白化。所谓白化,就是对降维后的数据的每个特征进行归一化,让方差都为1.对于PCA降维本身来说,一般不需要白化。如果你PCA降维后有后续的数据处理动作,可以考虑白化。默认值是False,即不进行白化。
- svd_solver:即指定奇异值分解SVD的方法,由于特征分解是奇异值分解SVD的一个特例,一般的PCA库都是基于SVD实现的。有4个可以选择的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。randomized一般适用于数据量大,数据维度多同时主成分数目比例又较低的PCA降维,它使用了一些加快SVD的随机算法。 full则是传统意义上的SVD,使用了scipy库对应的实现。arpack和randomized的适用场景类似,区别是randomized使用的是scikit-learn自己的SVD实现,而arpack直接使用了scipy库的sparse SVD实现。默认是auto,即PCA类会自己去在前面讲到的三种算法里面去权衡,选择一个合适的SVD算法来降维。一般来说,使用默认值就够了。【按默认设置即可】
Attributes属性
- components_:array, shape (n_components, n_features) 指表示主成分系数矩阵
- explained_variance_:降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。
- explained_variance_ratio_:降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。【一般看比例即可 >90%】
PCA对象的方法
PCA降维实例
对鸢尾花数据进行降维处理:
共66条数据。
导入所需库
from sklearn.decomposition import PCA
import pandas as pd
导入数据集
data = pd.read_excel('hua.xlsx') # 数据读取
对数据进行处理
# 取除最后一列外的所有列作为特征变量
x = data.iloc[:,:-1]
# 取最后一列作为目标变量
y = data.iloc[:,-1]
创建PCA模型并训练
# 实例化 PCA 对象,设置主成分解释的方差比例为 0.90
pca = PCA(n_components=0.90)
# 对特征变量 x 进行 PCA 训练,不需要传入目标变量 y
pca.fit(x)
查看训练结果
print("特征所占百分比:{}".format(sum(pca.explained_variance_ratio_)))
print(pca.explained_variance_ratio_)print("PCA 降维后数据:")
# 将数据 x 从原始特征空间转换到主成分空间
new_x = pca.transform(x)
print(new_x)
对降维数据进行划分数据集
from sklearn.model_selection import train_test_split# 将降维后的数据 new_x 和目标变量 y 划分为训练集和测试集,测试集比例为 0.2,随机种子为 0
x_train,x_test,y_train,y_test = train_test_split(new_x,y,test_size=0.2,random_state=0)
进行逻辑回归模型训练
# 导入逻辑回归分类器
from sklearn.linear_model import LogisticRegression# 实例化逻辑回归分类器
classifier = LogisticRegression()
# 使用训练集数据进行逻辑回归分类器的训练,传入特征变量 x_train 和目标变量 y_train
classifier.fit(x_train,y_train)
自测和使用测试集测试并打印分类报告
from sklearn import metrics
# 使用训练好的分类器对训练集进行预测
train_pred = classifier.predict(x_train)# 打印训练集的分类报告,评估分类器在训练集上的性能
print(metrics.classification_report(y_train,train_pred))
print(train_pred)# 使用训练好的分类器对测试集进行预测
test_pred = classifier.predict(x_test)
# 打印测试集的分类报告,评估分类器在测试集上的性能
print(metrics.classification_report(y_test,test_pred))
print(test_pred)