การถดถอยพหุนามใช้ scikit เรียนรู้


29

ฉันพยายามใช้ scikit เรียนรู้สำหรับการถดถอยพหุนาม จากสิ่งที่ฉันอ่านการถดถอยพหุนามเป็นกรณีพิเศษของการถดถอยเชิงเส้น ฉันกำลังกระโดดนั่นอาจเป็นหนึ่งในโมเดลเชิงเส้นทั่วไปของ scikit สามารถกำหนดพารามิเตอร์เพื่อให้พอดีกับชื่อพหุนามคำสั่งที่สูงขึ้น แต่ฉันไม่เห็นตัวเลือกสำหรับการทำเช่นนั้น

ฉันจัดการเพื่อใช้ Support Vector Regressor กับ poly kernel ซึ่งทำงานได้ดีกับชุดย่อยของข้อมูลของฉัน แต่ใช้เวลานานมากในการพอดีกับชุดข้อมูลที่มีขนาดใหญ่กว่าดังนั้นฉันยังต้องการค้นหาบางสิ่งได้เร็วขึ้น (แม้ว่าการซื้อขายจะมีความแม่นยำ)

ฉันขาดอะไรบางอย่างชัดเจนที่นี่?

คำตอบ:


25

ข้อมูลที่กำหนด , เวกเตอร์คอลัมน์และเวกเตอร์เป้าหมายที่คุณสามารถดำเนินการถดถอยพหุนามโดยท้ายของพหุนาม{x} ตัวอย่างเช่นพิจารณาว่าxYx

x=[2-113]

การใช้เวกเตอร์นี้ในการถดถอยเชิงเส้นบอกถึงโมเดล:

Y=α1x

เราสามารถเพิ่มคอลัมน์ที่เป็นพลังของเวกเตอร์ด้านบนซึ่งเป็นตัวแทนของการเพิ่มชื่อพหุนามในการถดถอย ด้านล่างนี้เราแสดงสิ่งนี้สำหรับพหุนามถึงกำลัง 3:

X=[248-11-113132133]

นี่คือเมทริกซ์ข้อมูลใหม่ของเราที่เราใช้ในการถดถอยเชิงเส้นของ sklearn และแสดงถึงตัวแบบ:

Y=α1x+α2x2+α3x3

โปรดทราบว่าฉันไม่ได้เพิ่มเวกเตอร์คงที่เป็นจำนวนเนื่องจาก sklearn จะรวมสิ่งนี้โดยอัตโนมัติ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 เรียนรู้

คุณไม่จำเป็นต้องทำทั้งหมดใน 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_ ด้วยตนเองหรือไม่? มีพารามิเตอร์ "interaction_only" ในตัวสร้าง PolynomialFeatures () และโดยค่าเริ่มต้นมันเป็นเท็จ แต่การตั้งค่าเป็น True ทำให้ตรงข้ามกับสิ่งที่ฉันต้องการ: มันเก็บเฉพาะเงื่อนไขการโต้ตอบและไม่เก็บ x1 ^ 2, x2 ^ 2, ฯลฯ
DenisFLASH

ลิงก์ไปยัง youtube อ้างว่าวิดีโอไม่มีอยู่อีกต่อไป คุณมีลิงค์อื่น ๆ
Markon

@Markon วิดีโอใด ๆ จากรายการนี้ดีพอ: youtube.com/results?search_query=curse+of+dimensionality
Salvador Dali

@SalvadorDali นั่นคือสิ่งที่การลดขนาดสำหรับ
3916597

ฉันสงสัยว่าเราควรจัดศูนย์ข้อมูลไว้ก่อนหรือหลังนำไปใช้PolynomialFeaturesหรือไม่
renakre

2

x1x2Y=a1x1+a2x2+a3x12+a4x22+a5x1x2a5x1x2) เป็นสิ่งที่ฉันกำลังพูดถึง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.