机器学习之主成分分析

数据降维

数据降维(Dimensionality Reduction):是指在某些限定条件下,降低随机变量个数,得到一组不相关主变量的工程.

其目的:

  • 减少模型分析数据量,提升处理效率,降低计算难度;
  • 实现数据可视化

数据降维的实现:主成分分析(PCA)

PCA(principal components analysis):数据降维技术中。应用最最多的方法

目标:寻找k (k < n) 维新数据,使它们反映事物的主要特征

核心:信息损失尽可能少的情况下,降低数据维度。信息损失衡量标准为,原有点到投影维度的距离和。

提取主要信息:投影后的不同特征数据尽可能分得开(即不相关)。也就是投影后数据的方差最大,因为方差越大数据也越分散

计算过程

  • 原始数据预处理(标准化:µ = 0,σ = 1)
  • 计算协方差矩阵特征向量、及数据在各特征向量投影后的方差
  • 根据需求(任务制定或方差比例)确定降维维度k
  • 选取k维特征向量,计算数据在其形成空间的投影

pca求解与线性回归求解区分

线性回归损失函数是通过计算预测的y与实际y的距离之和得到,可以理解为最小化预测y与实际y的距离

pca求解是寻找一个新的平面,让原来的数据点到平面的距离之和最小化

代码实现

# 数据标准化预处理(即化为标准正态分布的值)
from sklearn.preprocessing import StandardScaler
X_norm = StandardScaler().fit_transform(X)
# 模型训练获得pca降维后数据:
from sklearn.decomposition import PCA
pca = PCA(n_components = 4)
X_reduced = pca.fit_transform(X_norm)
# 计算各成分投影数据方差比例
var_ratio = pca.explained_variance_ratio_
可视化方差比例:
plt.bar([1,2,3,4], var_ratio)
plt.title('variance ratio of each component')
plt.xticks([1,2,3,4],['PC1','PC2','PC3','PC4'])
plt.ylabel('var_ratio')
plt.show()
# 可视化pca数据
setosa = plt.scatter(X_reduced[:,0][y == 0],X_reduced[:,1][y == 0])
versicolor = plt.scatter(X_reduced[:,0][y == 1],X_reduced[:,1][y == 1])
virginica = plt.scatter(X_reduced[:,0][y == 2],X_reduced[:,1][y == 1])
posted @ 2020-10-25 15:40  samuelzhou  阅读(71)  评论(0)    收藏  举报