Ridge regression ใน python (ทีละขั้นตอน)


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

โดยสรุป การถดถอยกำลังสองน้อยที่สุดพยายามค้นหาการประมาณค่าสัมประสิทธิ์ที่ลดผลรวมที่เหลือของกำลังสอง (RSS):

RSS = Σ(ฉัน ฉัน – ŷ ฉัน )2

ทอง:

  • Σ : สัญลักษณ์กรีกหมายถึง ผลรวม
  • y i : ค่าตอบสนองจริงสำหรับการสังเกต ครั้งที่ 3
  • ŷ i : ค่าตอบสนองที่คาดการณ์ไว้ตามแบบจำลองการถดถอยเชิงเส้นพหุคูณ

ในทางกลับกัน การถดถอยของสันจะพยายามลดสิ่งต่อไปนี้ให้เหลือน้อยที่สุด:

RSS + ΣΣβ เจ 2

โดยที่ j ไปจาก 1 ถึง p ตัวแปรทำนายและ แล ≥ 0

เทอมที่สองในสมการนี้เรียกว่า การลงโทษการถอน ในการถดถอยสันเขา เราเลือกค่าสำหรับ γ ที่สร้างการทดสอบ MSE ต่ำที่สุดที่เป็นไปได้ (ค่าคลาดเคลื่อนกำลังสองเฉลี่ย)

บทช่วยสอนนี้ให้ตัวอย่างทีละขั้นตอนของวิธีดำเนินการ ridge regression ใน Python

ขั้นตอนที่ 1: นำเข้าแพ็คเกจที่จำเป็น

ขั้นแรก เราจะนำเข้าแพ็คเกจที่จำเป็นเพื่อทำการถดถอยแบบสันใน Python:

 import pandas as pd
from numpy import arange
from sklearn. linear_model import Ridge
from sklearn. linear_model import RidgeCV
from sklearn. model_selection import RepeatedKFold

ขั้นตอนที่ 2: โหลดข้อมูล

สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูลชื่อ mtcars ซึ่งมีข้อมูลเกี่ยวกับรถยนต์ 33 คันที่แตกต่างกัน เราจะใช้ hp เป็นตัวแปรตอบสนอง และตัวแปรต่อไปนี้เป็นตัวทำนาย:

  • mpg
  • น้ำหนัก
  • อึ
  • คิววินาที

รหัสต่อไปนี้แสดงวิธีการโหลดและแสดงชุดข้อมูลนี้:

 #define URL where data is located
url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/mtcars.csv"

#read in data
data_full = pd. read_csv (url)

#select subset of data
data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]

#view first six rows of data
data[0:6]

	mpg wt drat qsec hp
0 21.0 2.620 3.90 16.46 110
1 21.0 2.875 3.90 17.02 110
2 22.8 2.320 3.85 18.61 93
3 21.4 3.215 3.08 19.44 110
4 18.7 3,440 3.15 17.02 175
5 18.1 3.460 2.76 20.22 105

ขั้นตอนที่ 3: ติดตั้งโมเดลการถดถอยของสันเขา

ต่อไป เราจะใช้ฟังก์ชัน RidgeCV() ของ sklearn เพื่อให้พอดีกับโมเดลการถดถอยของสันเขา และใช้ฟังก์ชัน RepeatedKFold() เพื่อทำการตรวจสอบความถูกต้องข้ามแบบ k-fold เพื่อค้นหาค่าอัลฟ่าที่เหมาะสมที่สุดเพื่อใช้เป็นเงื่อนไขการลงโทษ

หมายเหตุ: คำว่า “alpha” ถูกใช้แทน “lambda” ใน Python

สำหรับตัวอย่างนี้ เราจะเลือก k = 10 เท่า และทำซ้ำขั้นตอนการตรวจสอบข้าม 3 ครั้ง

โปรดทราบว่า RidgeCV() จะทดสอบเฉพาะค่าอัลฟ่า 0,1, 1 และ 10 ตามค่าเริ่มต้นเท่านั้น อย่างไรก็ตาม เราสามารถตั้งค่าช่วงอัลฟ่าของเราเองได้ตั้งแต่ 0 ถึง 1 โดยเพิ่มขั้นละ 0.01:

 #define predictor and response variables
X = data[["mpg", "wt", "drat", "qsec"]]
y = data["hp"]

#define cross-validation method to evaluate model
cv = RepeatedKFold(n_splits= 10 , n_repeats= 3 , random_state= 1 )

#define model
model = RidgeCV(alphas= arange (0, 1, 0.01), cv=cv, scoring=' neg_mean_absolute_error ')

#fit model
model. fit (x,y)

#display lambda that produced the lowest test MSE
print( model.alpha_ )

0.99

ค่าแลมบ์ดาที่ลด MSE ของการทดสอบให้เหลือน้อยที่สุดกลายเป็น 0.99

ขั้นตอนที่ 4: ใช้แบบจำลองเพื่อคาดการณ์

สุดท้ายนี้ เราสามารถใช้แบบจำลองการถดถอยสันเขาขั้นสุดท้ายเพื่อคาดการณ์เกี่ยวกับการสังเกตใหม่ๆ ตัวอย่างเช่น รหัสต่อไปนี้แสดงวิธีการกำหนดรถยนต์ใหม่ด้วยคุณลักษณะต่อไปนี้:

  • ไมล์ต่อแกลลอน: 24
  • น้ำหนัก: 2.5
  • ราคา: 3.5
  • วินาที: 18.5

รหัสต่อไปนี้แสดงวิธีใช้แบบจำลองการถดถอยแบบสันที่ติดตั้งเพื่อทำนายค่า hp ของการสังเกตใหม่นี้:

 #define new observation
new = [24, 2.5, 3.5, 18.5]

#predict hp value using ridge regression model
model. predict ([new])

array([104.16398018])

จากค่าที่ป้อน โมเดลคาดการณ์ว่ารถคันนี้จะมีค่า แรงม้า อยู่ที่ 104.16398018

คุณสามารถค้นหาโค้ด Python แบบเต็มที่ใช้ในตัวอย่างนี้ ได้ ที่นี่

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *