机器学习之主成分分析
数据降维
数据降维(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])
好文可以于大家分享,请注明转载