O PCA é uma ferramenta de redução de dimensão, não um classificador. No Scikit-Learn, todos os classificadores e estimadores têm um predict
método que o PCA não possui . Você precisa ajustar um classificador nos dados transformados pelo PCA. O Scikit-Learn possui muitos classificadores. Aqui está um exemplo de uso de uma árvore de decisão em dados transformados por PCA. Eu escolhi o classificador da árvore de decisão, pois ele funciona bem para dados com mais de duas classes, como é o caso do conjunto de dados da íris.
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)
O SciKit learn tem uma ferramenta conveniente chamada Pipeline, que permite conectar transformadores e um classificador 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)
Isso é especialmente útil ao realizar a validação cruzada, pois evita que você reajuste acidentalmente QUALQUER etapa do pipeline no conjunto de dados de teste:
from sklearn.cross_validation import cross_val_score
print cross_val_score(pipe, iris.data, iris.target)
# [ 0.96078431 0.90196078 1. ]
A propósito, talvez você nem precise usar o PCA para obter bons resultados de classificação. O conjunto de dados da íris não possui muitas dimensões e as árvores de decisão já terão um bom desempenho nos dados não transformados.