前言
主成分分析(Principal Components Analysis),简称PCA,是一种数据降维技术,用于数据预处理。
PCA的一般步骤是:先对原始数据零均值化,然后求协方差矩阵,接着对协方差矩阵求特征向量和特征值,这些特征向量组成了新的特征空间。矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。
总而言之,PCA的作用是:减少数据集的维数,同时保留尽可能多的信息。
一、PCA的利弊
1.优点:
- 减少数据维度,简化数据,降低计算复杂度;
- 提取数据的关键信息;
- 能够发现数据的隐藏;
- 操作简单,可用spss进行PCA降维;
2.缺点:
- 可能会丢失一些重要信息;
- 对噪音数据敏感;
- 可能存在多重共线性,导致结果不准确;
要确定是否存在多重共线性,可用VIF检验。
二、PCA步骤
1.标准化
这一步已经在下面链接的文章所展示了:
https://blog.youkuaiyun.com/m0_65157892/article/details/129523883?spm=1001.2014.3001.5502
2.VIF多重共线性检验
(1)缺失值处理,VIF检验
由于进行多重共线性检验的数据不能存在空缺值,故要先对数据进行空缺值填充,这里由于空缺数据量不多,故采用fillna(0)的方法。
代码如下:
x1 = df['x1'].fillna(0)
#x12 = x1.fillna(0)
#print(x1.isnull().sum())
#VIF检验
X = sm.add_constant(df.loc[:,[ 'x2','x3','x4','x5','x6','x7','x8','x9']])
X1 = pd.concat([x1,X],axis= 1)
#print(X1)
vif = pd.DataFrame()
vif["Ficture"] = X1.columns
vif["Fctor"] = [variance_inflation_factor(X1.values,i) for i in range(X1.shape[1])]
print('经过VIF检验的多重共线性检验')
print(vif)
当VIF值大于10时就说明存在多重共线性,需要剔除。
3.模型训练
# 训练,
# pca = PCA(n_components=5) n_components表示要保留的特征个数
pca = PCA(random_state=5,n_components=9)
pca.fit(x) # PCA是无监督学习算法,此处y自然等于None。
result = pca.transform(x) # 将数据转换为降维后的数据
通过无监督学习之后,将原来的数据转化为将为后的数据。
4.方差百分比与累计方差贡献
res = pca.explained_variance_ratio_ #explained_variance_ratio_:返回 所保留的n个成分各自的方差百分比。
res2 = [0]*len(res)
for i in range(len(res)):
if i==0:
res2[i]=res[i]
else:
res2[i] = res2[i-1]+res[i]
print("方差百分比:\n",res)
print("累计方差贡献:\n",res2) #这里得到的就是累计方差贡献
# print (pca.explained_variance_ratio_)
print (pca.explained_variance_)
res3 = pca.explained_variance_
可以将所得百分比导入到excel中以供查看。
总结
PCA降维主要就是将原有的数据降维,减少变量,方便我们后续的分析。