保险pcaas是什么意思(pc是什么意思)

数据科学,机器学习

何时,为什么,如何使用它以及功能重要性:Python指南

在这篇文章中,我将解释什么是PCA,何时何地使用它以及如何使用scikit-learn在Python中实现它。另外,我还将解释在PCA分析之后如何获得功能重要性。

> Handmade sketch made by the author.


1.简介与背景

主成分分析(PCA)是一种众所周知的无监督降维技术,它通过原始变量(特征)的线性(线性PCA)或非线性(内核PCA)组合来构造相关特征/变量。在本文中,我们将仅关注著名的且广泛使用的线性PCA方法。

相关特征的构建是通过将相关变量线性转换为较少数量的不相关变量来实现的。这是通过使用协方差/相关矩阵(也称为主分量)的特征向量将原始数据投影(点积)到缩减的PCA空间中来完成的。

最终的投影数据实质上是原始数据的线性组合,这些原始数据捕获了数据中的大部分方差(Jolliffe 2002)。

总而言之,PCA是将数据正交变换为生活在缩减的PCA空间中的一系列不相关数据,从而第一个成分说明了数据中的最大方差,而每个后续成分说明的则较少。

2.何时/为什么使用PCA

· PCA技术在处理特征/变量之间存在多重共线性的数据时特别有用。

· 当输入要素的尺寸较大(例如,很多变量)时,可以使用PCA。

· PCA还可以用于降噪和数据压缩。

3. PCA方法的核心

令X为包含形状为[n_samples,n_features]的原始数据的矩阵。

简要来说,PCA分析包括以下步骤:

· 首先,对X中存储的原始输入变量进行z评分,以使每个原始变量(X列)的均值和单位标准差均为零。

· 下一步涉及协方差矩阵Cx =(1 / n)X'X的构造和本征分解(在z评分数据的情况下,由于所有特征的标准偏差均为1,因此协方差等于相关矩阵)。

· 然后,特征值按降序排序,表示数据中的方差减小(特征值等于方差,我将在下面的第6段中使用Python证明这一点)。

· 最后,通过将原始标准化数据与协方差矩阵(即PC)的前导特征向量相乘(点积),可以得到原始标准化数据在缩减后的PCA空间上的投影(变换)。

· 新的减少的PCA空间最大程度地提高了原始数据的方差。为了可视化投影数据以及原始变量的贡献,在联合图中可以使用双图。

4.有意义的组件的最大数量

可以使用PCA提取的有意义的组件有一个上限。这与协方差/相关矩阵(Cx)的等级有关。具有形状为[n_samples,n_features / n_variables]的数据矩阵X,协方差/相关矩阵为[n_features,n_features],最大秩等于min(n_samples,n_features)。

因此,由于协方差/相关矩阵的最大秩,我们最多可以具有min(n_samples,n_features)个有意义的PC分量/尺寸。

5.使用scikit-learn和Iris数据集的Python示例

import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasetsfrom sklearn.decomposition import PCAimport pandas as pdfrom sklearn.preprocessing import StandardScalerplt.style.use('ggplot')# Load the datairis = datasets.load_iris()X = iris.datay = iris.target# Z-score the featuresscaler = StandardScaler()scaler.fit(X)X = scaler.transform(X)# The PCA modelpca = PCA(n_components=2) # estimate only 2 PCsX_new = pca.fit_transform(X) # project the original data into the PCA space

让我们绘制PCA转换前后的数据,并使用花朵的相应类别(y)对每个点(样本)进行颜色编码。

fig, axes = plt.subplots(1,2)axes[0].scatter(X[:,0], X[:,1], c=y)axes[0].set_xlabel('x1')axes[0].set_ylabel('x2')axes[0].set_title('Before PCA')axes[1].scatter(X_new[:,0], X_new[:,1], c=y)axes[1].set_xlabel('PC1')axes[1].set_ylabel('PC2')axes[1].set_title('After PCA')plt.show()

> PCA output of the above code.


我们可以看到,在PCA空间中,方差沿着PC1(解释了方差的73%)和PC2(解释了方差的22%)最大化。他们一起解释了95%。

print(pca.explained_variance_ratio_)# array([0.72962445, 0.22850762])6.原始协方差矩阵的特征值等于缩小空间的方差的证明数学公式与证明

假设存储在X中的原始输入变量是z值,那么每个原始变量(X的列)均值为零,单位标准偏差为零,我们有:

> Latex code written by the author.

上面的Λ矩阵存储原始空间/数据集的协方差矩阵的特征值。

使用Python验证

通过估计缩小空间的协方差矩阵,也可以看到最大方差证明:

np.cov(X_new.T)array([[2.93808505e+00, 4.83198016e-16], [4.83198016e-16, 9.20164904e-01]])

我们观察到这些值(在对角线上有方差)等于存储在pca.explained_variance_中的协方差的实际特征值:

pca.explained_variance_array([2.93808505, 0.9201649 ])7.特征重要性

每个特征的重要性都由特征向量中相应值的大小反映出来(强度越高,重要性越高)。

让我们找到最重要的功能:

print(abs( pca.components_ ))[[0.52106591 0.26934744 0.5804131 0.56485654] [0.37741762 0.92329566 0.02449161 0.06694199]]

在这里,pca.components_的形状为[n_components,n_features]。因此,通过查看作为第一行的PC1(第一主成分)

[[0.52106591 0.26934744 0.5804131 0.56485654]

我们可以得出结论,功能1、3和4对PC1最重要。同样,我们可以说特征2对PC2最重要。

总而言之,我们看一下与k个最大特征值相对应的特征向量分量的绝对值。在sklearn中,组件按说明的方差分类。这些绝对值越大,特定功能对该主成分的贡献就越大。

8.双图

双曲线图是在PCA分析之后可视化多合一的最佳方法。

R中有一个实现,但是python中没有标准实现,因此我决定为此编写自己的函数:

def biplot(score, coeff , y): ''' Author: Serafeim Loukas, serafeim.loukas@epfl.ch Inputs: score: the projected data coeff: the eigenvectors (PCs) y: the class labels '''xs = score[:,0] # projection on PC1 ys = score[:,1] # projection on PC2 n = coeff.shape[0] # number of variables plt.figure(figsize=(10,8), dpi=100) classes = np.unique(y) colors = ['g','r','y'] markers=['o','^','x'] for s,l in enumerate(classes): plt.scatter(xs[y==l],ys[y==l], c = colors[s], marker=markers[s]) # color based on group for i in range(n): #plot as arrows the variable scores (each variable has a score for PC1 and one for PC2) plt.arrow(0, 0, coeff[i,0], coeff[i,1], color = 'k', alpha = 0.9,linestyle = '-',linewidth = 1.5, overhang=0.2) plt.text(coeff[i,0]* 1.15, coeff[i,1] * 1.15, "Var"+str(i+1), color = 'k', ha = 'center', va = 'center',fontsize=10) plt.xlabel("PC{}".format(1), size=14) plt.ylabel("PC{}".format(2), size=14) limx= int(xs.max()) + 1 limy= int(ys.max()) + 1 plt.xlim([-limx,limx]) plt.ylim([-limy,limy]) plt.grid() plt.tick_params(axis='both', which='both', labelsize=14)

调用函数(确保首先运行初始代码块,在此我们加载Iris数据并执行PCA分析):

import matplotlib as mplmpl.rcParams.update(mpl.rcParamsDefault) # reset ggplot style# Call the biplot function for only the first 2 PCsbiplot(X_new[:,0:2], np.transpose(pca.components_[0:2, :]), y)plt.show()

> The PCA biplot using my custom function.


我们可以再次通过视觉验证a)方差最大,并且b)特征1、3和4对PC1最重要。同样,功能2和功能1对PC2最重要。

此外,指向同一方向的箭头(变量/特征)指示它们表示的变量之间的相关性,而相反方向的箭头指示它们表示的变量之间的对比。

使用代码验证以上内容:

# Var 3 and Var 4 are extremely positively correlatednp.corrcoef(X[:,2], X[:,3])[1,0]0.9628654314027957# Var 2and Var 3 are negatively correlatednp.corrcoef(X[:,1], X[:,2])[1,0]-0.42844010433054014

所有人!希望您喜欢这篇文章!

参考文献

[1] Jolliffe,IT。主成分分析。纽约,纽约:施普林格,2002年。

[2] https://en.wikipedia.org/wiki/Principal_component_analysis

[3] https://stattrek.com/matrix-algebra/matrix-rank.aspx


(本文由闻数起舞翻译自MathWorks Editor的文章《PCA Clearly Explained -When, Why, How To Use It and Feature Importance: A Guide in Python》,转载请注明出处,原文链接:https://medium.com/towards-artificial-intelligence/pca-clearly-explained-when-why-how-to-use-it-and-feature-importance-a-guide-in-python-56b3da72d9d1)