资深审稿人向我道歉,请求不要再用PCA分析数据了

文摘   2024-09-04 16:00   荷兰  
在数据分析和机器学习的世界中,高维数据往往让人感到困扰。如何在保留数据主要特征的前提下,降低数据的维度?这时候,PCA(主成分分析)就派上了用场。今天,我们将通过一个完整的实战案例,带大家深入理解PCA的理论,并用Python演示如何将其应用于数据降维和可视化。

什么是PCA?

主成分分析(PCA)是一种常见的数据降维方法,主要通过线性变换,把原始数据转换到一个新的坐标系中,使数据的方差尽可能集中在前几个坐标轴(主成分)上。简单来说,PCA帮助我们找到数据中最重要的方向,并将数据投影到这些方向上,从而去除冗余信息,让数据变得更加简洁。

Python实战:鸢尾花数据集上的PCA

为了更直观地理解PCA,我们将使用Python自带的经典鸢尾花数据集(Iris Dataset)来进行演示。
Step 1: 导入必要的库
首先,我们需要导入一些常用的Python库,比如numpy用于数值计算,matplotlib用于可视化,sklearn则提供了PCA算法和鸢尾花数据集。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
import matplotlib.transforms as transforms
Step 2: 加载并查看数据集

接下来,我们加载鸢尾花数据集,并简单查看数据的结构。鸢尾花数据集包含150个样本,每个样本有4个特征,分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。

# 加载鸢尾花数据集
iris = load_iris()
data = iris.data
target = iris.target

# 查看数据集的维度和基本信息
print("Data shape:", data.shape)
## Data shape: (150, 4)
print("Feature names:", iris.feature_names)
## Feature names: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
print("Target names:", iris.target_names)
## Target names: ['setosa' 'versicolor' 'virginica']
Step 3: 数据预处理

在进行PCA之前,我们需要对数据进行标准化处理。标准化的目的是让每个特征的平均值为0,方差为1,以避免特征值范围差异过大对PCA结果的影响。

# 标准化数据(均值为0,方差为1)
scaler = StandardScaler()
data_standardized = scaler.fit_transform(data)

# 查看标准化后的数据
print("Standardized Data:\n", data_standardized[:5])
## Standardized Data:
## [[-0.90068117 1.01900435 -1.34022653 -1.3154443 ]
## [-1.14301691 -0.13197948 -1.34022653 -1.3154443 ]
## [-1.38535265 0.32841405 -1.39706395 -1.3154443 ]
## [-1.50652052 0.09821729 -1.2833891 -1.3154443 ]
## [-1.02184904 1.24920112 -1.34022653 -1.3154443 ]]
Step 4: 使用PCA降维

现在,我们准备好应用PCA了。我们将使用PCA将数据从4维降到2维,这样我们就可以对降维后的数据进行可视化。

# 创建PCA对象,并指定降维后的维度数
pca = PCA(n_components=2)

# 训练PCA模型,并转换数据
data_reduced = pca.fit_transform(data_standardized)

# 查看降维后的数据
print("Reduced Data:\n", data_reduced[:5])
## Reduced Data:
## [[-2.26470281 0.4800266 ]
## [-2.08096115 -0.67413356]
## [-2.36422905 -0.34190802]
## [-2.29938422 -0.59739451]
## [-2.38984217 0.64683538]]
Step 5: 可视化降维后的数据

我们将降维后的数据绘制成二维图,并用不同的颜色区分鸢尾花的三种类别。这样,我们可以直观地看到PCA的效果。

# 绘制降维后的数据
plt.figure(figsize=(8, 6))

# 使用不同的颜色区分不同类别
for i, target_name in enumerate(iris.target_names):
plt.scatter(data_reduced[target == i, 0], data_reduced[target == i, 1],
label=target_name, alpha=0.6)

plt.title('PCA of Iris Dataset')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.legend()
plt.show()

Step 6: 查看解释方差比例

PCA还会告诉我们每个主成分能解释多少原始数据的方差。这个信息非常重要,因为它告诉我们降维后的数据还保留了多少信息。

# 查看每个主成分的解释方差比例
explained_variance = pca.explained_variance_ratio_
print("Explained variance ratio:", explained_variance)
## Explained variance ratio: [0.72962445 0.22850762]
# 绘制解释方差比例图
plt.figure(figsize=(6, 4))
plt.bar(range(1, len(explained_variance) + 1), explained_variance, alpha=0.7)
plt.ylabel('Explained Variance Ratio')
plt.xlabel('Principal Component')
plt.title('Explained Variance Ratio by Principal Components')
plt.show()

总结

通过今天的实战演示,我们不仅深入了解了PCA的工作原理,并且学会了如何用Python实现PCA的整个过程。从数据预处理到降维,再到可视化和置信区间的绘制,我们一步步地见证了PCA如何有效地减少数据维度,同时保留主要信息。PCA不仅是一种强大的数据分析工具,也为我们的机器学习模型打下了坚实的基础。

通过实践,你会发现,PCA不仅可以帮助你更好地理解数据,还能为你的数据科学之旅开启新的大门。赶快动手试一试吧!


科研代码
专注R和Python的数据分析。
 最新文章