पीसीए एक आयाम में कमी उपकरण है, न कि एक क्लासिफायरियर। स्किकिट-लर्न में, सभी क्लासिफायर और अनुमानकों के पास एक predict
तरीका है जो पीसीए नहीं करता है । आपको पीसीए-ट्रांसफ़ॉर्म किए गए डेटा पर एक क्लासिफायरफ़ायर फिट करने की आवश्यकता है। स्किकिट-लर्न में कई क्लासिफायर हैं। पीसीए-रूपांतरित डेटा पर निर्णय ट्री का उपयोग करने का एक उदाहरण यहां दिया गया है । मैंने निर्णय ट्री क्लासिफायर को चुना क्योंकि यह दो से अधिक वर्गों के डेटा के लिए अच्छी तरह से काम करता है जो कि आईरिस डेटासेट के साथ होता है।
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 के पास पाइपलाइन नामक एक सुविधाजनक उपकरण है जो आपको ट्रांसफॉर्मर और अंतिम क्लासिफ़ायर श्रृंखला को एक साथ जोड़ने देता है:
# 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. ]
वैसे, आपको अच्छे वर्गीकरण परिणाम प्राप्त करने के लिए पीसीए का उपयोग करने की आवश्यकता भी नहीं हो सकती है। आईरिस डेटासेट के कई आयाम नहीं हैं और निर्णय पेड़ पहले से ही अनियंत्रित डेटा पर अच्छा प्रदर्शन करेंगे।