PCA es una herramienta de reducción de dimensiones, no un clasificador. En Scikit-Learn, todos los clasificadores y estimadores tienen un predict
método que PCA no tiene . Debe ajustar un clasificador en los datos transformados por PCA. Scikit-Learn tiene muchos clasificadores. Aquí hay un ejemplo del uso de un árbol de decisión en datos transformados por PCA. Elegí el clasificador de árbol de decisión ya que funciona bien para datos con más de dos clases, como es el caso del conjunto de datos de iris.
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 learn tiene una herramienta conveniente llamada Pipeline que le permite encadenar transformadores y un clasificador final:
# 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)
Esto es especialmente útil cuando se realiza la validación cruzada, ya que le impide volver a ajustar accidentalmente CUALQUIER paso de la tubería en su conjunto de datos de prueba:
from sklearn.cross_validation import cross_val_score
print cross_val_score(pipe, iris.data, iris.target)
# [ 0.96078431 0.90196078 1. ]
Por cierto, es posible que ni siquiera necesite usar PCA para obtener buenos resultados de clasificación. El conjunto de datos de iris no tiene muchas dimensiones y los árboles de decisión ya funcionarán bien en los datos no transformados.