龙岩,颈椎操,上虞

频道:国内时事 日期: 浏览:337

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

为什么要用PCA?

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

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

现在,当您拥有大量特征或者您不断增加数据中的特征数量时会发生什么呢?一种被称为维度诅咒的现象开始出现。

重点是,你拥有的特征越动漫小萝莉多,你的数值计狗尾花下死算就越困难。

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

示例

  • 一维:为了更好地了解维度的诅咒。想象一下,你在草地上。假设从场的一边到另一边中间有一条白线。有人在那条白线上丢了一枚硬币。找到硬币是一项非常简单的任务。你需要做的只是沿着白线走; 它可能需要不到5分钟。
  • 二维:现在,假设有一个足球场。有人在这两个字段之间丢了一枚硬币。现在找到硬币变得更加困难。可能需要数小时甚至半天。
  • 三维:现在,让我们构建一个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 transf3p文orms the feature
# data
scaler = StandardScaler()
X_feat = scaler.fit_transform(X_feat)
# n_components=2 because we w芦名ant 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 = princip隐婚七年夏小沐全文al_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.a露西皮德尔dd_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减少了数据的维数,同时试图保留大部分信息。这意味着您可能仍然过度拟合数据。更好的替代方案是消除特征和正则化。
热门
最新
推荐
标签