将PCA应用于测试数据以进行分类


10

我最近了解了出色的PCA,并完成了scikit-learn文档中概述的示例。

我想知道如何将PCA应用于新数据点以进行分类。

在二维平面(x,y轴)上可视化PCA之后,我看到我可能可以画一条线来分隔数据点,以便一侧将属于一种分类,而另一侧则属于另一种分类。如何绘制此“边界”并将其应用于新数据点?


3
PCA不是分类器,但可以假设在新点上测量了用于“拟合” PCA的相同变量,因此可以将新观察值放入PCA。然后,您只需将新点放置在变量分数(负荷)的加权总和,数据给定的权重下即可。也就是说,在您的PCA中随意划一条线对我来说似乎不是分类器的好选择……
Gavin Simpson

Answers:


16

PCA是降维工具,而不是分类器。在Scikit-Learn中,所有分类器和估计器都有PCA没有predict方法。您需要在PCA转换后的数据上安装分类器。Scikit-Learn有许多分类器。这是在PCA转换的数据上使用决策树的示例。我选择了决策树分类器,因为它适用于两个以上类别的数据,虹膜数据集就是这种情况。

from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

# load data
iris = load_iris()

# initiate PCA and classifier
pca = PCA()
classifier = DecisionTreeClassifier()

# transform / fit

X_transformed = pca.fit_transform(iris.data)
classifier.fit(X_transformed, iris.target)

# predict "new" data
# (I'm faking it here by using the original data)

newdata = iris.data

# transform new data using already fitted pca
# (don't re-fit the pca)
newdata_transformed = pca.transform(newdata)

# predict labels using the trained classifier

pred_labels = classifier.predict(newdata_transformed)

SciKit learning有一个名为Pipeline的便捷工具,可让您将变压器和最终分类器链接在一起:

# you can make this a lot easier using Pipeline

from sklearn.pipeline import Pipeline

# fits PCA, transforms data and fits the decision tree classifier
# on the transformed data
pipe = Pipeline([('pca', PCA()),
                 ('tree', DecisionTreeClassifier())])

pipe.fit(iris.data, iris.target)

pipe.predict(newdata)

这在进行交叉验证时特别有用,因为它可以防止您意外地在测试数据集上重新拟合管道的任何步骤:

from sklearn.cross_validation import cross_val_score
print cross_val_score(pipe, iris.data, iris.target)
# [ 0.96078431  0.90196078  1.        ]

顺便说一句,您甚至不需要使用PCA即可获得良好的分类结果。虹膜数据集没有很多维,并且决策树在未转换的数据上已经表现良好。


6
也许重要的是要注意,即使不降低维数,PCA 可能有用。您可以有一个维数为的数据集,判别方向是对应于最大方差的方向。您保留维,但基础不同。在这些新基础上映射数据将比在原始基础上更好地区分类别。dd
Vladislavs Dovgalecs

@xeon我不知道。
奥斯丁·理查森

也许最好看看您是否将PCA想象成轮换。如果碰巧您的数据集具有此属性,从而可以通过方差来区分类,则只需进行这种轮换即可。
Vladislavs Dovgalecs

2
@xeon:保留所有尺寸后,PCA唯一实现的功能就是对数据集进行解相关。对于某些分类器来说确实是有益的,但是绝大多数都不在乎。
变形虫2015年

1
@amoeba我完全同意,这只是一个小细节。我必须处理这样的特定数据集,并始终记住这一课。
Vladislavs Dovgalecs'Aug

0

如果要将PCA应用于新数据,则必须首先在某些训练数据集上拟合模型。您会问什么型号?这是从数据集中减去的平均向量,用于“白化”每个数据向量的方差和学习的映射矩阵。因此,为了在与训练数据相同的空间中映射新数据集,您首先要减去均值,将其变白并使用映射矩阵进行映射。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.