PCA est un outil de réduction de dimension, pas un classificateur. Dans Scikit-Learn, tous les classificateurs et estimateurs ont une predict
méthode que PCA n'a pas . Vous devez adapter un classificateur sur les données transformées par PCA. Scikit-Learn possède de nombreux classificateurs. Voici un exemple d'utilisation d'un arbre de décision sur des données transformées par l'ACP. J'ai choisi le classificateur d'arbre de décision car il fonctionne bien pour les données avec plus de deux classes, ce qui est le cas avec l'ensemble de données 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 possède un outil pratique appelé Pipeline qui vous permet de chaîner des transformateurs et un classificateur 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)
Cela est particulièrement utile lorsque vous effectuez une validation croisée car cela vous empêche de réadapter accidentellement N'IMPORTE QUELLE étape du pipeline sur votre jeu de données de test:
from sklearn.cross_validation import cross_val_score
print cross_val_score(pipe, iris.data, iris.target)
# [ 0.96078431 0.90196078 1. ]
Soit dit en passant, vous n'aurez peut-être même pas besoin d'utiliser PCA pour obtenir de bons résultats de classification. L'ensemble de données iris n'a pas beaucoup de dimensions et les arbres de décision fonctionnent déjà bien sur les données non transformées.