主成分分析初步
主成分分析初步(以鸢尾花数据为例)¶
In [1]:
Copied!
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
本段代码的意义和作用是什么?
In [4]:
Copied!
#加载数据库并进行预处理
# 加载Iris数据集(含4个特征,3类鸢尾花)
iris = load_iris()
X = iris.data # 原始特征矩阵(150个样本×4个特征)
y = iris.target # 类别标签
# 标准化数据(PCA对尺度敏感,需消除量纲差异)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
#加载数据库并进行预处理
# 加载Iris数据集(含4个特征,3类鸢尾花)
iris = load_iris()
X = iris.data # 原始特征矩阵(150个样本×4个特征)
y = iris.target # 类别标签
# 标准化数据(PCA对尺度敏感,需消除量纲差异)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
上述的数据处理是一种常规操作
In [7]:
Copied!
#应用PCA降维
# 初始化PCA模型,保留前2个主成分(便于可视化)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled) # 将数据投影到主成分空间
# 查看主成分的方差贡献率
print("主成分方差贡献率:", pca.explained_variance_ratio_)
print("累计方差贡献率:", np.cumsum(pca.explained_variance_ratio_))
#应用PCA降维
# 初始化PCA模型,保留前2个主成分(便于可视化)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled) # 将数据投影到主成分空间
# 查看主成分的方差贡献率
print("主成分方差贡献率:", pca.explained_variance_ratio_)
print("累计方差贡献率:", np.cumsum(pca.explained_variance_ratio_))
主成分方差贡献率: [0.72962445 0.22850762] 累计方差贡献率: [0.72962445 0.95813207]
要学会PCA中的基本参数、属性与变量输出
可视化降维结果¶
In [11]:
Copied!
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', edgecolor='k', alpha=0.7)
plt.xlabel('Principal Component 1 (PC1)', fontsize=12)
plt.ylabel('Principal Component 2 (PC2)', fontsize=12)
plt.title('PCA Projection of Iris Dataset', fontsize=14)
plt.colorbar(scatter, label='Iris Species')
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', edgecolor='k', alpha=0.7)
plt.xlabel('Principal Component 1 (PC1)', fontsize=12)
plt.ylabel('Principal Component 2 (PC2)', fontsize=12)
plt.title('PCA Projection of Iris Dataset', fontsize=14)
plt.colorbar(scatter, label='Iris Species')
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()
结合聚类方法进行分析¶
In [16]:
Copied!
#import os
#os.environ["OMP_NUM_THREADS"] = '1'
from sklearn.cluster import KMeans
# 使用K-Means对降维后的数据进行聚类
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_pca)
# 对比真实标签与聚类结果
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.title('True Labels')
plt.subplot(1, 2, 2)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=clusters, cmap='plasma')
plt.title('K-Means Clustering')
plt.show()
#import os
#os.environ["OMP_NUM_THREADS"] = '1'
from sklearn.cluster import KMeans
# 使用K-Means对降维后的数据进行聚类
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_pca)
# 对比真实标签与聚类结果
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.title('True Labels')
plt.subplot(1, 2, 2)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=clusters, cmap='plasma')
plt.title('K-Means Clustering')
plt.show()
d:\anaconda3\Lib\site-packages\sklearn\cluster\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1. warnings.warn(
In [ ]:
Copied!