【未完成】【机器学习】(十六)主成分分析PCA:高维数据可视化、特征提取
程序员文章站
2022-05-20 19:34:17
...
主成分分析(PCA)是一种旋转数据集的方法,旋转后的特征在统计上不相关。
用PCA做数据变换
- 首先,算法在原始数据点集中,找到方差最大的方向(包含最多信息),标记为‘成分1’。->找到与“成分1”正交(成直角)且包含最多信息的方向,标记为“成分2”。利用这一过程找到的方向被称为主成分,一般主成分个数和原始特征数相同。
- 从数据中减去平均值,是的变换后的数据以0为中心->旋转数据:使第一主成分与x轴平行,第二主成分与y轴平行。两坐标轴是不相关的,除了对角线,相关矩阵全为0。
- 仅保留一部分主成分(第一主成分)进行PCA降维。二维数据集->一维数据集。(这个方向不是原始特征之一)
- 反向旋转并将平均值重新加到数据中。
这种变换可以用于去除数据中的噪声影响,或者将主成分中保留的那部分信息可视化。
将PCA应用于高维数据可视化(cancer数据集)
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_breast_cancer
import matplotlib.pyplot as plt
# 预处理:缩放数据是每个特征方差均为1
cancer = load_breast_cancer()
scaler = StandardScaler()
scaler.fit(cancer.data)
x_scaled = scaler.transform(cancer.data)
# 保留数据的前两个主成分,对数据集拟合PCA模型
pca = PCA(n_components=2) # 实例化对象并指定想要保留的主成分个数,默认情况下所有主成分都保留
pca.fit(x_scaled) # 找到主成分
# 变换数据集方向
x_pca = pca.transform(x_scaled) # 旋转并降维
print(x_scaled.shape) # 原始数据形状:(569, 30)
print(x_pca.shape) # 变换后的数据形状:(569, 2)
# 对第一主成分和第二主成分作图,按类别着色
plt.figure(figsize=(8, 8))
mglearn.discrete_scatter(x_pca[:, 0], x_pca[:, 1], cancer.target)
plt.legend(cancer.target_names, loc="best")
plt.gca().set_aspect("equal") # 获取当前子图,并设置x,y轴坐标刻度相等
plt.xlabel("First principal component")
plt.ylabel("Second principal component")
使用plt.gcf()和plt.gca()获得当前的图表和子图。
ax.set_aspect(“equal”)方法设定坐标轴间距、长度相等。
python matplotlib.pyplot画矩形图 以及plt.gca()
3.plt.gca().set_aspect(“equal”)
PCA是一种无监督方法,缺点是,通常不容易对两个轴做出解释。主成分对应原始数据中的方向,所以它们是原始特征的组合。在拟合过程中,主成分被保存在PCA对象的components_属性中,每一行对应一个主成分,列对应PCA的原始属性。
PCA对象系数可视化(热图)
# cancer数据集有30个属性
print(pca.components_.shape)
print(pca.components_)
# 用热图将系数可视化
plt.matshow(pca.components_, cmap='viridis')
plt.yticks([0, 1], ['First component', 'Second component'])
plt.colorbar()
plt.xticks(range(len(cancer.feature_names)), cancer.feature_names, rotation=60, ha='left')
plt.xlabel("Feature")
plt.ylabel("Principal components")
将PCA应用于特征提取(Wild数据集)
上一篇: Redis详解
下一篇: 感知器算法(MNISTs数据集)