首页 > 编程知识 正文

pca的优点包括哪些(pca主成分分析结果解读)

时间:2023-05-04 04:56:40 阅读:81623 作者:1809

PCA是常用的降维技术。 可以用于降低n维数据集的维度,同时保留尽可能多的信息。

为什么要用PCA?

主成分分析是降维技术。 维只是指数据有多少特征(即列或属性)。 在维空间中考虑数据就像我们居住的第三维或任何平面形状的第二维。

拥有的特征越多数据的维度越多

那么,如果您具有大量特征或不断增加数据中特征的数量,会发生什么情况呢? 开始出现被称为维度诅咒的现象。

重点是,你拥有的特征越多,数值计算就越困难。

这意味着数值计算数据的机器学习算法的性能会受到影响。 每个添加的变量的预测能力都呈指数级下降。

样品

一维:为了更好地理解维度的诅咒。 想象一下在草坪上。 假设从场的一侧到另一侧的中间有一条白线。 有人用那根白线丢了硬币。 找到硬币是很简单的任务。 沿着白线走,可能用不了五分钟。 二次元:假设现在有足球场。 这两个字段之间有人丢了硬币。 现在更难找到硬币了。 可能需要几个小时到半天。 三维:现在,让我们建造一座100层的建筑物。 有人在那栋楼里丢了硬币。 搜索所有楼层可能需要一个多月。 正如您所看到的,在问题中添加的维度越多,就越难解决。 这基本上是维度诅咒的概念。

那么,PCA和其中的哪一个有什么关系呢? PCA是为简化数据理解而设计的降维技术。 数字或视觉。

在开始谈论

PCA是什么?

PCA之前,让我们先来谈谈降维技术。

这些技术通常旨在减少数据集中特征列的数量。 要执行此操作,请组合特征条或直接将其删除。

如果处理过具有很多特性列的数据,就会引起很多问题。 你了解各特征之间的关系吗? 根据特征的数量不同,机器学习模式是否过度适合? 这违反我模型的假设吗? 我的模型什么时候能完成训练?

因为这些问题,你从现在开始问自己。 “如何减少特征的数量,以免我遇到这些问题? ”

这有两种方法。

特征去除特征提取(PCA、t-sne、LLE等)特征去除就是这样的。 可以删除/删除不需要的特征。 但是,来自模型的数据会丢失。

特征提取没有上述问题。 假设有100个特征。 在特征提取中,放弃旧特征并创建100个“新”独立特征。 每个“新”特征都是上一个特征的组合。 独立的“新”特性由所使用的算法(如PCA )决定,并根据目标变量(即原因变量的预测级别)进行排序。 最后,根据要维持的方差大小,删除最不重要的“新建”列: 例如,假设上例的前80个特征说明了方差的95%,我们希望保持这个比例。 这意味着放弃以下20个“新”特征。

最后,数据集应该是这样的

PCA是一种特征提取技术,其中主要成分是我们前面讨论的“新”独立的特征。 目标是删除最不重要的特征,同时尽可能保留更多的“新”特征。 这很容易确定,因为新特征是根据预测目标类别的顺序进行排序的。 “那么,虽然减少了特征的数量,但是是否会像消除特征中那样丢失过程中的数据呢? 可能会问“。 确实,我们放弃了一部分,但每个“新特征”都是我们“旧特征”的组合。 这意味着,即使删除了一些“新的”特征,仍然保留着旧特征中最有价值的部分。

另一个值得注意的内容是,这些“新”特征都是线性独立的。 这是因为在应用PCA之前,必须将数据集规范化为正态分布。 这意味着可以保证线性回归、Logistic回归、线性SVM等线性模型的线性数据集。

我们如何获得主成分?

通过识别主成分分析(PCA )训练集中占最慷慨差距的轴来找出最初的主成分。

然后,我们找到了占第二大方差的轴。 这个轴与那个正交。 那就像你工作的维度空间一样,一直持续到主成分足够。

以下是二维空间的例子

我们选择了最初的主成分[ PC1 ],基于具有最大慷慨差和最小误差的向量。 这个可以在右图中直观地看到。 实线表示我们的PC1是最大的

方差和误差率最小,那么虚线,PC2,线正交到PC1,拥有量最大的剩余方差。没有标签的虚线不是主成分,它只表示一个轴,该轴共享来自PC1和PC2的数据。

在当前场景中,我们在二维空间中工作,两个主成分应该解释~100%的数据。记住,我解释过主成分是旧特征的组合。因此,如果我在2-D空间中有2个主成分,它们基本上包含与原始2个特征相同的信息,但重新排序。如果我们在三维空间中工作,只使用两个主成分,那么这些成分的组合可以解释< 100%的数据。

下面是一个动画,向您展示超平面上的不同projections 是什么样的。紫色刻度线表示PC1的位置,线上的点表示该线上的数据的方差。

对于机器学习优化,您需要选择组合方差在85%左右或更高的前n个组件。对于可视化高维数据,这并不重要;你可以建立两个主成分来观察你在二维空间中的数据。

实用编码示例

PCA可视化

我将使用着名的Iris机器学习数据集来可视化不同类型的虹膜。

首先,我导入我要使用的包。

import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import seaborn as sns %matplotlib inline

接下来,我将从URL中读取数据并将其存储为pandas dataframe

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data" column = ['sepal length', 'sepal width', 'petal length', 'petal width', 'target'] iris = pd.read_csv(url, names=column) iris.head()

现在,我将值缩放到正态分布并实现PCA。我们使用standard scaler的原因是因为PCA最适合具有正态分布的数据。事实上,大多数机器学习(ML)算法对于遵循钟形曲线的数据效果最佳。

# the libraries required to implement from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA # We put our feature data in X_feat and the target feature in y_feat X_feat = iris.drop('target', axis=1) y_feat = iris['target'] # Created a scaler obj which then fits and transforms the feature # data scaler = StandardScaler() X_feat = scaler.fit_transform(X_feat) # n_components=2 because we want to view the data in 2 dimensions pca = PCA(n_components = 2) principal_components = pca.fit_transform(X_feat)

让我们将主成分数据放在pandas DataFrame中

principal_Df = pd.DataFrame(data = principal_components, columns = ['principal component 1', 'principal component 2']) principal_Df.head()

是时候在2维中可视化数据了。

final_df = pd.concat([principal_Df, iris['target']], axis=1) fig = plt.figure(figsize=(8,8)) ax = fig.add_subplot(1,1,1) ax.set_xlabel('Principal Component 1', fontsize=15) ax.set_ylabel('Principal Component 2', fontsize=15) ax.set_title('2 Component PCA',fontsize=20) targets = iris['target'].unique() colors = ['r', 'g', 'b'] for (target, color) in zip(targets,colors): ax.scatter(x=final_df.loc[final_df.target == target, 'principal component 1'], y=final_df.loc[final_df.target == target, 'principal component 2'], c=color) ax.legend(targets, loc=4) ax.grid()

最后,让我们看看保留了多少方差,因为当我们从4维移动到2维时,会有一些数据丢失。

# This tells us how much of the variance was can be attributed to # each of the principal components pca.explained_variance_ratio_ # array([0.72770452, 0.23030523])

似乎PC1和PC2的组合方差约为95%

最后

光亮的天空使用PCA

数据压缩:这可能是PCA最常见的用法。当您处理大数据时,您可能会遇到内存不足的问题,或者机器学习算法的计算时间非常大。所以,一个常见的解决方法是将你的特征数据分解到一个低维度,同时保留大部分的方差。可视化:如果您想将数据集可视化为2维或3维,这是一个很好的工具。我个人认为它对无监督任务很有用:原因是PCA是一种在高维数据集中查找不同clusters/classes的非常简单的方法。如果特征变量解释无关紧要:主成分通常会让理解每个初始特征对目标类的影响变得复杂。假设我们有3个特征:年龄,收入和身高。我们使用PCA并获得2个主成分,PC1和PC2。两个主成分现在是以前3个特征的组合。这意味着如果我们通过在PC1和PC2上回归Y来拟合线性回归模型,我们就能够解释PC1或PC2的单位增加。然而,这并没有转化为年龄,收入或身高的单位增长。

光亮的天空不使用PCA

只是为了修复过度拟合:过度拟合通常是由太多特征引起的。由于训练数据的高度差异,大量功能通常意味着您的交叉验证错误会很高。PCA减少了数据的维数,同时试图保留大部分信息。这意味着您可能仍然过度拟合数据。更好的替代方案是消除特征和正则化。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。