स्किकिट-सीख का उपयोग कर बहुपद प्रतिगमन


29

मैं बहुपद प्रतिगमन के लिए scikit-learn का उपयोग करने की कोशिश कर रहा हूं। मैं बहुपद प्रतिगमन को जो भी पढ़ता हूं वह रैखिक प्रतिगमन का एक विशेष मामला है। मैं सोच रहा था कि हो सकता है कि scitit के सामान्यीकृत रैखिक मॉडल में से एक को उच्च क्रम के बहुपदों में फिट करने के लिए परिमाणित किया जा सकता है, लेकिन मुझे ऐसा करने के लिए कोई विकल्प नहीं दिखता है।

मैंने एक पॉली कर्नेल के साथ सपोर्ट वेक्टर रेजिस्टर का उपयोग करने का प्रबंधन किया। यह मेरे डेटा के सबसेट के साथ अच्छी तरह से काम करता है, लेकिन बड़े डेटा सेटों को फिट करने में बहुत समय लगता है इसलिए मुझे अभी भी कुछ तेज़ी से खोजने की ज़रूरत है (भले ही कुछ सटीक व्यापार करें)।

क्या में यहां कुछ भूल रहा हूँ?

जवाबों:


25

दिए गए लक्ष्य वेक्टर, डेटा एक्स , एक कॉलम वेक्टर, और \ mathbf {y} को देखते हुए y, आप polynomial regression of \ mathbf {x} को जोड़कर प्रदर्शन कर सकते हैं एक्स। उदाहरण के लिए, विचार करें कि क्या

एक्स=[2-113]

रेखीय प्रतिगमन में सिर्फ इस वेक्टर का उपयोग करने से मॉडल का अर्थ है:

y=α1एक्स

हम उन स्तंभों को जोड़ सकते हैं जो ऊपर वेक्टर की शक्तियां हैं, जो प्रतिगमन में बहुपदों को जोड़ने का प्रतिनिधित्व करती हैं। नीचे हम इसे शक्ति 3:

एक्स=[248-11-113132133]

यह हमारा नया डेटा मैट्रिक्स है जिसका उपयोग हम स्केलेर के रैखिक प्रतिगमन में करते हैं, और यह मॉडल का प्रतिनिधित्व करता है:

y=α1एक्स+α2एक्स2+α3एक्स3

ध्यान दें कि मैंने 1 के निरंतर वेक्टर को नहीं जोड़ा है 1, क्योंकि स्केलेर में स्वचालित रूप से यह शामिल होगा।


26

सिद्धांत

बहुपद प्रतिगमन रैखिक प्रतिगमन का एक विशेष मामला है। मुख्य विचार के साथ कि आप अपनी सुविधाओं का चयन कैसे करते हैं। 2 चर के साथ बहुभिन्नरूपी प्रतिगमन को देखते हुए: x1और x2। रैखिक प्रतिगमन इस तरह दिखेगा:y = a1 * x1 + a2 * x2.

अब आप एक बहुपद प्रतिगमन करना चाहते हैं (चलो 2 डिग्री बहुपद बनाते हैं)। हम कुछ अतिरिक्त सुविधाओं का निर्माण करेगा: x1*x2, x1^2और x2^2। तो हमें आपका 'रैखिक प्रतिगमन' मिलेगा:

y = a1 * x1 + a2 * x2 + a3 * x1*x2 + a4 * x1^2 + a5 * x2^2

यह अच्छी तरह से आयामीता के एक महत्वपूर्ण अवधारणा अभिशाप को दर्शाता है , क्योंकि बहुपद की डिग्री के विकास के साथ नई सुविधाओं की संख्या रैखिक रूप से बहुत तेजी से बढ़ती है। आप इस अवधारणा के बारे में यहाँ देख सकते हैं ।

शिकयत के साथ अभ्यास करें-सीखें

यह सब आपको scikit में करने की आवश्यकता नहीं है। बहुपद प्रतिगमन पहले से ही वहां उपलब्ध है ( 0.15 संस्करण में। यहां देखें कि इसे कैसे अपडेट किया जाए )।

from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model

X = [[0.44, 0.68], [0.99, 0.23]]
vector = [109.85, 155.72]
predict= [[0.49, 0.18]]
#Edit: added second square bracket above to fix the ValueError problem

poly = PolynomialFeatures(degree=2)
X_ = poly.fit_transform(X)
predict_ = poly.fit_transform(predict)

clf = linear_model.LinearRegression()
clf.fit(X_, vector)
print clf.predict(predict_)

1
क्या होगा यदि मुझे X1 * x2 के रूप में एक इंटरैक्शन शब्द नहीं चाहिए, तो क्या मुझे X_ मैन्युअल रूप से बनाना होगा? PolynomialFeatures () कंस्ट्रक्टर में "इंटरैक्शन_ऑनली" एक पैरामीटर है, और डिफ़ॉल्ट रूप से यह गलत है। लेकिन इसे ट्रू में सेट करने से मैं जो चाहता हूं उसके विपरीत हो जाता है: यह केवल इंटरेक्शन की शर्तें रखता है, और X1 ^ 2, x2 ^ 2, आदि को नहीं रखता है
— डेनिसफ्लेश

यूट्यूब के लिंक का दावा है कि वीडियो अब मौजूद नहीं है। क्या आपके पास कोई अन्य लिंक है?
— मार्कॉन

@Markon इस सूची का कोई भी वीडियो काफी अच्छा है: youtube.com/results?search_query=curse+of+dimunningity
— सल्वाडोर डाली

@ साल्वाडोरडाली जो कि आयाम में कमी है, वह है
— user3916597

मुझे आश्चर्य है कि क्या हमें आवेदन करने से पहले या बाद में डेटा को केंद्र में रखना चाहिए PolynomialFeatures?
— 17'17

2

यदि आप एक बहुभिन्नरूपी प्रतिगमन का उपयोग कर रहे हैं और केवल एक अविभाज्य प्रतिगमन का उपयोग नहीं कर रहे हैं, तो क्रॉस शब्दों को न भूलें। उदाहरण के लिए यदि आपके पास दो चर और , और आप को पावर 2 तक चाहते हैं, तो आपको उपयोग करना चाहिए जहां अंतिम शब्द ( ) वह है जिसमें मैं एक हूं के बारे में बातें कर रहे हैं।एक्स1एक्स2y=ए1एक्स1+ए2एक्स2+ए3एक्स12+ए4एक्स22+ए5एक्स1एक्स2ए5एक्स1एक्स2

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