1. 数据降维案例
案例一
案例1:通过美国1929-1938年各年经济数据,预测国民收入与支出。
数据包括:雇主补贴、消费资料和生产资料、纯公共支出、净增库存、股息、利息、外贸平衡等十七个指标。
显然,建立这17项指标模型,这在当时是非常困难的。因此统计学家斯通利用主成分分析方法降维,解决了该问题。具体如图:
案例二
对50项经济指标进行降维。
得到F1、F2俩个复合指标
复合指标可视化:
最终通过这两项指标代替先前的50项指标,大大降低了难度,同时精确度还很高。
通过以上两个案例,我们发现对于某些多因子数据,降维是必然要求,最终还能可视化。
2. 数据降维的实现
(1)概念介绍
数据降维,是指在某些限定条件下,降低随机变量个数,得到一组“不想关”主变量的过程。
作用:
- 较少模型分析数据量,提升处理效率,降低计算难度
- 实现数据可视化
举个简单例子:
2D数据降维到1D数据(求每个点到直线的最短距离之和最小)
3D数据降维到2D数据(点到平面的距离之和最小)
(2)主成分分析
PCA(principal components analysisi):数据降维技术中,应用最多的方法。
目标:寻找k(k<n)维新数据,使他们反映事物的主要特征。
核心:在信息损失尽可能少的情况下,降低数据维度。
举例:
3D到2D:投影到u1、u2形成的平面。
所以从n维到k维:投影到u1、u2…uk形成的空间
由于PCA的模型较为复杂,这里就不在给出了
具体如何实现目标,保留主要特征k呢?
转化为使投影后的不同特征的数据尽可能分得开(即不相关)。也就是使投影后的数据的方差最大,因为方差越大数据越分散。
计算过程:
- 原始数据预处理(标准化)
- 计算协方差矩阵特征向量,及数据在各特征向量投影后的方差
- 根据需求(任务指定或方差比例)确定降维维度k
- 选取k维特征向量,计算数据在其形成空间的投影
(3)代码实现
标准化处理
#降维之前,首先要进行标准化处理
from sklearn.preprocessing import StandardScaler
X_norm = StandardScaler().fit_transform(X)
print(X_norm)
PCA降维
#模型训练获得PCA降维后数据
from sklearn.decomposition import PCA
pca = PCA(n_components=4)
X_pca = pca.fit_transform(X_norm)
#计算各成分投影数据方差比例
var_ratio = pca.explained_variance_ratio_
print(var_ratio)
可视化方差比例
#可视化方差比例
fig = plt.figure(figsize=(10,5))
plt.bar([1,2,3,4],var_ratio)
plt.xticks([1,2,3,4],["PCA1","PCA2","PCA3","PCA4"])
plt.show()
此时就可以选择PCA1、PCA2两个方差比例较大的维度,丢弃PCA3、PCA4。数据从2D降到了4D。
注意:给出的代码是依据某个实例的,不具有普遍性。
读者可参考下一节针对PCA降维示例的文章。