वर्गीकरण प्रयोजनों के लिए डेटा का परीक्षण करने के लिए पीसीए लागू करना


10

मैंने हाल ही में अद्भुत PCA के बारे में सीखा है और मैंने scikit-learn प्रलेखन में उल्लिखित उदाहरण किया है ।

मुझे यह जानने में दिलचस्पी है कि मैं वर्गीकरण उद्देश्यों के लिए पीसीए को नए डेटा बिंदुओं पर कैसे लागू कर सकता हूं।

एक 2 आयामी विमान (एक्स, वाई अक्ष) में पीसीए की कल्पना करने के बाद, मैं देखता हूं कि मैं शायद डेटा बिंदुओं को अलग करने के लिए एक रेखा खींच सकता हूं ताकि एक पक्ष एक वर्गीकरण और दूसरा वर्गीकरण का हो। मैं इस "सीमा" को कैसे खींचूं और इसे नए डेटा बिंदुओं पर लागू करूं?


3
पीसीए एक क्लासिफायरियर नहीं है, लेकिन पीसीए को नए बिंदुओं पर "फिट" करने के लिए उपयोग किए जाने वाले समान चर मानकर नई टिप्पणियों को रखना संभव है। फिर आप केवल नए अंकों को भार के कुल अंकों (लोडिंग), डेटा द्वारा दिए गए वज़न के आधार पर रखते हैं। कहा कि, मनमाने ढंग से अपने पीसीए के माध्यम से एक रेखा खींचना मेरे लिए क्लासिफायर के एक अच्छे विकल्प की तरह नहीं लगता है ...
गेविन सिम्पसन

जवाबों:


16

पीसीए एक आयाम में कमी उपकरण है, न कि एक क्लासिफायरियर। स्किकिट-लर्न में, सभी क्लासिफायर और अनुमानकों के पास एक 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.        ]

वैसे, आपको अच्छे वर्गीकरण परिणाम प्राप्त करने के लिए पीसीए का उपयोग करने की आवश्यकता भी नहीं हो सकती है। आईरिस डेटासेट के कई आयाम नहीं हैं और निर्णय पेड़ पहले से ही अनियंत्रित डेटा पर अच्छा प्रदर्शन करेंगे।


6

@xeon मुझे नहीं पता था कि।
ऑस्टिन रिचर्डसन

शायद यह देखना बेहतर है कि क्या आप एक रोटेशन के रूप में पीसीए की कल्पना करते हैं। यदि ऐसा होता है कि आपके डेटासेट में यह गुण है कि वर्गों को विचरण द्वारा भेदभाव किया जा सकता है, तो यह रोटेशन आपको सभी की आवश्यकता होगी।
व्लादिस्लाव डोभालगस

2
@xeon: जब सभी आयामों को रखा जाता है, तो केवल एक चीज जो पीसीए द्वारा प्राप्त होती है, वह डेटासेट को सुशोभित करती है। यह वास्तव में कुछ सहपाठियों के लिए फायदेमंद हो सकता है, लेकिन विशाल बहुमत परवाह नहीं करता है।
अमीबा

1
@amoeba मैं पूरी तरह से सहमत हूं, यह केवल एक छोटा विवरण है। मुझे इस तरह के विशेष डेटासेट से निपटना था और हमेशा उस पाठ को याद रखना चाहिए।
व्लादिस्लाव्स डोवलगेस

0

यदि आप नए डेटा के लिए पीसीए लागू करना चाहते हैं, तो आपको पहले कुछ प्रशिक्षण डेटासेट पर एक मॉडल फिट करना होगा। आप क्या मॉडल पूछेंगे? यह वह वेक्टर है जो आपने डेटासेट से घटाया है, जो वेरिएंट आप प्रत्येक डेटा वेक्टर और सीखे हुए टैपिंग मैट्रिक्स को "व्हाइट" करते हैं। तो नए डेटासेट को प्रशिक्षण डेटा के समान स्थान पर मैप करने के लिए, आप पहले माध्य को घटाते हैं, इसे सफेद करते हैं और मैपिंग मैट्रिक्स के साथ इसे मैप करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.