1.PCA 降维简介
主成分分析(Principal Component Analysis, PCA)是一种统计方法,用于在数据集中寻找一组线性组合的特征,这些特征被称为主成分。PCA 的目标是通过变换原始特征空间到新的特征空间,从而减少数据的维度,同时尽量保留数据中的重要信息。
PCA 的主要步骤包括:
- 计算协方差矩阵:反映各特征之间的相关性。
- 求解协方差矩阵的特征值和特征向量:特征值反映了主成分的重要性,特征向量指示了主成分的方向。
- 选择主成分:选择那些具有较大特征值的主成分,这些主成分能够解释数据的大部分变异。
- 数据投影:将原始数据投影到选定的主成分上,从而实现降维。
2.实例:
接下来我们进行实例讲解:
实验数据
本次实验使用的数据集来自 Excel 文件 hua.xlsx
。数据集包含多个特征和一个标签列。特征数据 X
包括所有除最后一列之外的列,而标签数据 y
则是最后一列。
代码讲解
-
读取数据并划分特征和标签
import pandas as pd from sklearn.decomposition import PCA # 读取Excel文件中的数据 data = pd.read_excel('hua.xlsx') # 数据划分:X表示特征数据,y表示标签数据 X = data.iloc[:, :-1] y = data.iloc[:, -1]
解释:
- 使用
pd.read_excel
读取 Excel 文件。 - 使用
iloc
选取特征数据和标签数据。
- 使用
-
使用 PCA 进行主成分分析
# 使用PCA进行主成分分析,保留累计贡献率达到90%的主成分 pca = PCA(n_components=0.9) pca.fit(X) # 输出所有主成分的方差比率之和 print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_))) # 输出每个主成分的方差比率 print(pca.explained_variance_ratio_) # 将原始特征数据转换到新的特征空间 new_x = pca.transform(X) print('PCA降维后数据:\n', new_x)
解释:
- 使用
PCA
类进行主成分分析,n_components=0.9
表示保留累计贡献率达到 90% 的主成分。 fit
方法拟合 PCA 模型。explained_variance_ratio_
属性返回每个主成分的方差比率。transform
方法将原始特征数据转换到新的特征空间。- 输出结果:
- 使用
-
数据划分与模型训练
from sklearn.model_selection import train_test_split # 使用降维后的数据划分训练集和测试集 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() classifier.fit(x_train, y_train) # 对训练集进行预测 ytrain_pred = classifier.predict(x_train) print(ytrain_pred) # 对测试集进行预测 ytest_pred = classifier.predict(x_test) print(ytest_pred) # 导入评价指标模块 from sklearn import metrics # 输出训练集上的分类报告 print(metrics.classification_report(y_train, ytrain_pred)) # 输出测试集上的分类报告 print(metrics.classification_report(y_test, ytest_pred))
解释:
- 使用
train_test_split
方法将降维后的数据划分为训练集和测试集。 - 使用
LogisticRegression
分类器进行训练和预测。 - 使用
classification_report
打印分类报告。 - 训练集和测试集的输出结果:
- 使用
对比分析
为了更好地理解 PCA 降维的效果,我们可以在使用 PCA 降维之前和之后分别训练逻辑回归模型,并比较它们的性能。
-
使用原始数据划分训练集和测试集
# 使用原始数据划分训练集和测试集 x_train_orig, x_test_orig, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 创建逻辑回归分类器 classifier = LogisticRegression() classifier.fit(x_train_orig, y_train) # 对训练集进行预测 ytrain_pred_orig = classifier.predict(x_train_orig) print(ytrain_pred_orig) # 对测试集进行预测 ytest_pred_orig = classifier.predict(x_test_orig) print(ytest_pred_orig) # 导入评价指标模块 from sklearn import metrics # 输出训练集上的分类报告 print(metrics.classification_report(y_train, ytrain_pred_orig)) # 输出测试集上的分类报告 print(metrics.classification_report(y_test, ytest_pred_orig))
解释:
- 使用原始数据划分训练集和测试集。
- 训练和预测逻辑回归模型。
- 输出分类报告。
输出对比:
原始特征数据的分类报告:
降维特征数据的分类报告:
3.总结
通过以上步骤,我们完成了 PCA 降维的过程,并使用逻辑回归模型进行了分类任务。PCA 降维不仅可以减少数据的维度,还可以提高模型的训练效率。通过对比降维前后的分类报告,我们可以评估 PCA 降维对模型性能的影响。PCA 特别适用于高维数据集,在保证数据信息不丢失的前提下,能够简化数据处理流程,提高模型的泛化能力。