什么是PCA?
Python实战:鸢尾花数据集上的PCA
Step 1: 导入必要的库
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不仅可以帮助你更好地理解数据,还能为你的数据科学之旅开启新的大门。赶快动手试一试吧!