PCA adalah alat reduksi dimensi, bukan penggolong. Di Scikit-Learn, semua pengklasifikasi dan estimator memiliki predict
metode yang tidak dimiliki PCA . Anda harus menyesuaikan classifier pada data yang diubah PCA. Scikit-Learn memiliki banyak pengklasifikasi. Berikut adalah contoh penggunaan pohon keputusan pada data yang diubah PCA. Saya memilih classifier pohon keputusan karena berfungsi dengan baik untuk data dengan lebih dari dua kelas yang merupakan kasus dengan dataset 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 belajar memiliki alat yang mudah disebut Pipeline yang memungkinkan Anda untuk menyatukan transformator dan penggolong akhir:
# 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)
Ini sangat berguna ketika melakukan validasi silang karena mencegah Anda secara tidak sengaja memasang kembali langkah APAPUN dari pipeline pada set data pengujian Anda:
from sklearn.cross_validation import cross_val_score
print cross_val_score(pipe, iris.data, iris.target)
# [ 0.96078431 0.90196078 1. ]
Omong-omong, Anda bahkan mungkin tidak perlu menggunakan PCA untuk mendapatkan hasil klasifikasi yang baik. Dataset iris tidak memiliki banyak dimensi dan pohon keputusan sudah akan bekerja dengan baik pada data yang tidak diubah.