PCA降维_鸢尾花案例python代码实现

PCA降维

使用鸢尾花数据对鸢尾花的特征进行降维,由原来的4个特征降到2个特征。使用的数据比较简单,主要是为了实现PCA降维的过程。

  • PCA是矩阵分解算法的核心算法。
  • PCA它使用的信息量的衡量指标是样本的方差,又称可解释性方差。 方差越大,特征所带的信息量就越多。降维后特征的信息量是从多到少进行分布的。
  • 代码中的查看信息量的大小即为降维后的每个特征值的方差的大小。
  • 可解释性方差贡献率是该特征所占原来特征的贡献率,可解释性方差贡献率的和即为此次降维后保留的特征的概率。
  • 代码中的n_components=2,代表降维到2个特征值,也可取‘mle’让程序使用最大似然估计自己找寻最合适的降维超参数。但是如果特征数超过样本数此参数不可用。
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np

iris = load_iris()
X = iris.data
y = iris.target
print(pd.DataFrame(X))

# 调用PCA
pca = PCA(n_components=2)  # 实例化 此处使用2代表降维到2个特征值,也可取mle让程序使用最大似然估计自己找寻最合适的降维超参数
pca = pca.fit(X)  # 拟合模型
X_dr = pca.transform(X)  # 获取新矩阵
# X_dr = PCA(2).fit_transform(X)  # 同上两步
print(X_dr.shape)

plt.figure()
colors = ['red', 'black', 'orange']
for i in range(0, 3):
    # 画点图
    plt.scatter(X_dr[y==i, 0], X_dr[y==i, 1]
                , alpha=.7 # 透明度设置
                , c=colors[i], label=iris.target_names[i])
plt.legend()
plt.title('PCA of IRIS dataset')
plt.show()

# 查看降维后每个新特征向量上所带的信息量大小,即方差大小
print(pca.explained_variance_)

# 查看降维后每个新特征向量所占的信息量占原始数据总信息量的百分比
# 又叫可解释性方差贡献率
print(pca.explained_variance_ratio_)

print(pca.explained_variance_ratio_.sum())

# 累计可解释方差贡献率曲线来选择最好的n_components
pca_line = PCA().fit(X)
plt.plot([1, 2, 3, 4], np.cumsum(pca_line.explained_variance_ratio_))
plt.xticks([1, 2, 3, 4])  # 限制坐标轴显示为整数
plt.xlabel("number of components after dimension reduction")
plt.ylabel("cumulative explained variance")
plt.show()
  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PCA(Principal Component Analysis)是一种常用的降维算法,它通过线性变换将高维数据映射到低维空间中,且尽可能多地保留原始数据的信息。PCA的核心思想是将原始数据投影到新的坐标系上,新坐标系的选择是使得投影后数据方差最大的方向,也就是数据的主成分方向。以下是PCA降维的步骤: 1. 数据预处理:对数据进行标准化处理,使得每个特征的均值为0,方差为1。 2. 计算协方差矩阵:协方差矩阵反映了特征之间的相关性,计算公式为:$\Sigma=\frac{1}{n-1}(X-\bar{X})^{T}(X-\bar{X})$,其中 $X$ 为 $n$ 行 $m$ 列的数据矩阵,$\bar{X}$ 为 $m$ 维向量,表示每一列的均值。 3. 计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和特征向量。 4. 选取主成分:将特征值按照从大到小的顺序排列,选择前 $k$ 个特征值对应的特征向量,组成新的 $k$ 维特征空间。 5. 投影到新的特征空间:将原始数据投影到新的 $k$ 维特征空间中,得到降维后的数据。 下面是Python实现PCA降维代码: ```python import numpy as np class PCA: def __init__(self, n_components): self.n_components = n_components def fit_transform(self, X): # 数据预处理 X_std = (X - np.mean(X, axis=0)) / np.std(X, axis=0) # 计算协方差矩阵 cov_mat = np.cov(X_std.T) # 计算特征值和特征向量 eigenvals, eigenvecs = np.linalg.eig(cov_mat) # 选取前n个特征向量 idx = eigenvals.argsort()[::-1] eigenvecs = eigenvecs[:, idx][:, :self.n_components] # 投影到新的特征空间 X_new = np.dot(X_std, eigenvecs) return X_new ``` 使用示例: ```python import numpy as np from sklearn.datasets import load_iris # 加载数据 iris = load_iris() X = iris.data # PCA降维 pca = PCA(n_components=2) X_new = pca.fit_transform(X) # 可视化 import matplotlib.pyplot as plt plt.scatter(X_new[:,0], X_new[:,1], c=iris.target) plt.show() ``` 这里使用了鸢尾花数据集进行演示,将原始数据从4维降到了2维,并将结果可视化出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值