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()

你可能感兴趣的:(python,机器学习,人工智能)