ความแตกต่างระหว่าง statsmodel OLS และ scikit การถดถอยเชิงเส้น


16

ฉันมีคำถามเกี่ยวกับวิธีการที่แตกต่างกันสองวิธีจากห้องสมุดที่แตกต่างกันซึ่งดูเหมือนจะทำงานเดียวกัน ฉันกำลังพยายามสร้างแบบจำลองการถดถอยเชิงเส้น

นี่คือรหัสที่ฉันใช้ห้องสมุด statsmodel กับ OLS:

X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1)

x_train = sm.add_constant(X_train)
model = sm.OLS(y_train, x_train)
results = model.fit()

print "GFT + Wiki / GT  R-squared", results.rsquared

เอกสารนี้พิมพ์GFT + Wiki / GT R-squared 0.981434611923

และอันที่สองคือ scikit Learn library วิธีการโมเดลเชิงเส้น:

model = LinearRegression()
model.fit(X_train, y_train)

predictions = model.predict(X_test)

print 'GFT + Wiki / GT R-squared: %.4f' % model.score(X_test, y_test)

เอกสารนี้พิมพ์GFT + Wiki / GT R-squared: 0.8543

ดังนั้นคำถามของฉันคือทั้งสองวิธีพิมพ์ผลลัพธ์ R ^ 2 ของเรา แต่วิธีหนึ่งพิมพ์ออกมา 0.98 และอีกวิธีหนึ่งคือ 0.85

จากความเข้าใจของฉัน OLS ทำงานกับชุดข้อมูลการฝึกอบรม ดังนั้นคำถามของฉัน

  • มีวิธีการที่ใช้กับชุดข้อมูลทดสอบกับ OLS หรือไม่
  • คะแนนชุดข้อมูลการฝึกอบรมให้ความหมายกับเราหรือไม่ (ใน OLS เราไม่ได้ใช้ชุดข้อมูลทดสอบ) จากความรู้ที่ผ่านมาของเราเราต้องทำงานกับข้อมูลการทดสอบ
  • อะไรคือความแตกต่างระหว่าง OLS และ scikit การถดถอยเชิงเส้น เราใช้อันไหนในการคำนวณคะแนนของโมเดล?

ขอบคุณสำหรับความช่วยเหลือ

คำตอบ:


14

ครั้งแรกในแง่ของการใช้งาน คุณสามารถได้รับการทำนายใน statsmodels ในลักษณะที่คล้ายกันมากกับ Scikit-Learn ยกเว้นว่าเราใช้อินสแตนซ์ผลลัพธ์ที่ส่งกลับโดยfit

predictions = results.predict(X_test)

จากการคาดการณ์เราสามารถคำนวณสถิติที่อิงกับข้อผิดพลาดในการทำนาย

prediction_error = y_test - predictions

มีรายการฟังก์ชั่นแยกต่างหากเพื่อคำนวณความดีของสถิติการทำนายด้วย แต่มันไม่ได้รวมเข้ากับโมเดลและไม่รวม R squared (ฉันไม่เคยได้ยินเกี่ยวกับ R กำลังสองที่ใช้สำหรับข้อมูลตัวอย่าง) การคำนวณสิ่งเหล่านี้ต้องการการทำงานที่เพิ่มขึ้นอีกเล็กน้อยโดยผู้ใช้และ statsmodels ไม่มีสถิติชุดเดียวกันโดยเฉพาะอย่างยิ่งไม่ใช่สำหรับการจำแนกประเภทหรือรุ่นที่มี

ไปยังอีกสองจุดของคุณ:

การถดถอยเชิงเส้นอยู่ในรูปแบบพื้นฐานเหมือนกันใน statsmodels และใน scikit-Learn อย่างไรก็ตามการใช้งานอาจแตกต่างกันซึ่งอาจให้ผลลัพธ์ที่แตกต่างกันในกรณีขอบและ scikit เรียนรู้มีการสนับสนุนโดยทั่วไปสำหรับรุ่นที่ใหญ่กว่า ตัวอย่างเช่น statsmodels ปัจจุบันใช้เมทริกซ์กระจัดกระจายในส่วนที่น้อยมาก

ความแตกต่างที่สำคัญที่สุดคือโครงสร้างพื้นฐานโดยรอบและกรณีใช้งานที่ได้รับการสนับสนุนโดยตรง

Statsmodels ติดตามโมเดลดั้งเดิมส่วนใหญ่ที่เราต้องการทราบว่าแบบจำลองที่กำหนดนั้นเหมาะสมกับข้อมูลได้ดีเพียงใดและตัวแปรใดที่ "อธิบาย" หรือส่งผลกระทบต่อผลลัพธ์หรือขนาดของเอฟเฟกต์นั้นเป็นอย่างไร Scikit-learning เป็นไปตามประเพณีการเรียนรู้ของเครื่องซึ่งงานที่ได้รับการสนับสนุนหลักคือการเลือกตัวแบบ "ดีที่สุด" สำหรับการทำนาย

เป็นผลให้การเน้นในคุณลักษณะการสนับสนุนของสเตตัสรุ่นคือการวิเคราะห์ข้อมูลการฝึกอบรมซึ่งรวมถึงการทดสอบสมมติฐานและมาตรการความดี - ของ - พอดีขณะที่เน้นในโครงสร้างพื้นฐานที่สนับสนุนใน Scikit - เรียนรู้คือการเลือกรูปแบบสำหรับออก การทำนายตัวอย่างและการตรวจสอบความถูกต้องของ "ข้อมูลการทดสอบ"

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


อืมฉันกำลังพยายามใช้แบบจำลอง ARMA จาก statsmodels.tsa แต่อินเทอร์เฟซของการทำนายแตกต่างกันอย่างสิ้นเชิง คุณรู้วิธีป้อนข้อมูลทดสอบหรือไม่
ephes

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

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

ARMA และ SARIMAX อนุญาตให้exogรวมตัวแปรอธิบายไว้ในการประมาณค่าและการพยากรณ์
Josef

คำถามเกี่ยวกับ Stackowerlow อยู่ที่ความแตกต่างในอินเทอร์เฟซ: stackoverflow.com/questions/41045752/ …
David Dale

1

ในแบบจำลอง OLS คุณกำลังใช้ข้อมูลการฝึกอบรมเพื่อให้เหมาะสมและทำนายผล

ด้วยโมเดล LinearRegression คุณกำลังใช้ข้อมูลการฝึกอบรมเพื่อให้เหมาะสมและทดสอบข้อมูลเพื่อคาดการณ์ดังนั้นผลลัพธ์ที่ต่างกันในคะแนน R2

หากคุณต้องการใช้ข้อมูลทดสอบในโมเดล OLS คุณควรมีผลลัพธ์เดียวกันและมีค่าต่ำกว่า


1

ฉันพบปัญหาที่คล้ายกันซึ่ง OLS ให้ค่า Rsquared และ Adjusts Rsquared ที่แตกต่างกันเมื่อเปรียบเทียบกับรุ่น Sklearn LinearRegression

เหตุผล: OLS ไม่พิจารณาเป็นค่าเริ่มต้นค่าสัมประสิทธิ์การดักจับและสร้างแบบจำลองโดยไม่มีมันและ Sklearn จะพิจารณาในการสร้างแบบจำลอง

วิธีแก้ปัญหา: เพิ่มคอลัมน์ 1 ของชุดข้อมูลและใส่โมเดลให้พอดีกับ OLS และคุณจะได้รับ Rsquared และ Adj ที่เหมือนกันเกือบทั้งหมด ค่า rsquared สำหรับทั้งสองรุ่น

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