กำลังสองน้อยที่สุดบางส่วนใน r (ทีละขั้นตอน)
ปัญหาที่พบบ่อยที่สุดประการหนึ่งที่คุณจะพบในการเรียนรู้ของเครื่องคือ ความเป็นหลายส่วน สิ่งนี้เกิดขึ้นเมื่อตัวแปรทำนายตั้งแต่สองตัวขึ้นไปในชุดข้อมูลมีความสัมพันธ์กันสูง
เมื่อสิ่งนี้เกิดขึ้น แบบจำลองอาจพอดีกับชุดข้อมูลการฝึกได้ดี แต่อาจทำงานได้ไม่ดีกับชุดข้อมูลใหม่ที่ไม่เคยเห็นมาก่อน เนื่องจาก เกิน ชุดข้อมูลการฝึก ชุดฝึกซ้อม
วิธีหนึ่งในการแก้ไขปัญหานี้คือการใช้วิธีที่เรียกว่า กำลังสองน้อยที่สุดบางส่วน ซึ่งได้ผลดังนี้:
- สร้างมาตรฐานให้กับตัวแปรทำนายและการตอบสนอง
- คำนวณชุดค่าผสมเชิงเส้น M (เรียกว่า “ส่วนประกอบ PLS”) ของ ตัวแปรทำนายดั้งเดิม p ที่อธิบายการเปลี่ยนแปลงจำนวนมากในตัวแปรตอบสนองและตัวแปรทำนาย
- ใช้วิธีกำลังสองน้อยที่สุดเพื่อให้พอดีกับแบบจำลองการถดถอยเชิงเส้นโดยใช้ส่วนประกอบ PLS เป็นตัวทำนาย
- ใช้ การตรวจสอบข้าม k-fold เพื่อค้นหาจำนวนส่วนประกอบ PLS ที่เหมาะสมที่สุดเพื่อเก็บไว้ในโมเดล
บทช่วยสอนนี้ให้ตัวอย่างทีละขั้นตอนของวิธีดำเนินการกำลังสองน้อยที่สุดบางส่วนใน R
ขั้นตอนที่ 1: โหลดแพ็คเกจที่จำเป็น
วิธีที่ง่ายที่สุดในการหากำลังสองน้อยที่สุดบางส่วนใน R คือการใช้ฟังก์ชันในแพ็คเกจ pls
#install pls package (if not already installed) install.packages(" pls ") load pls package library(pls)
ขั้นตอนที่ 2: ปรับโมเดลกำลังสองน้อยที่สุดบางส่วนให้พอดี
สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูล R ในตัวที่เรียกว่า mtcars ซึ่งมีข้อมูลเกี่ยวกับรถยนต์ประเภทต่างๆ:
#view first six rows of mtcars dataset
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3,460 20.22 1 0 3 1
สำหรับตัวอย่างนี้ เราจะปรับโมเดลกำลังสองน้อยที่สุดบางส่วน (PLS) โดยใช้ hp เป็น ตัวแปรตอบสนอง และตัวแปรต่อไปนี้เป็นตัวแปรทำนาย:
- mpg
- แสดง
- อึ
- น้ำหนัก
- คิววินาที
รหัสต่อไปนี้แสดงวิธีปรับโมเดล PLS ให้พอดีกับข้อมูลนี้ สังเกตข้อโต้แย้งต่อไปนี้:
- scale=TRUE : สิ่งนี้จะบอก R ว่าตัวแปรแต่ละตัวในชุดข้อมูลควรได้รับการปรับขนาดให้มีค่าเฉลี่ย 0 และค่าเบี่ยงเบนมาตรฐานเป็น 1 สิ่งนี้ทำให้แน่ใจได้ว่าไม่มีตัวแปรตัวทำนายใดที่มีอิทธิพลมากเกินไปในแบบจำลองหากวัดในหน่วยที่แตกต่างกัน
- validation=”CV” : สิ่งนี้จะบอก R ให้ใช้ การตรวจสอบข้าม k-fold เพื่อประเมินประสิทธิภาพของโมเดล โปรดทราบว่าสิ่งนี้ใช้ k=10 เท่าเป็นค่าเริ่มต้น โปรดทราบว่าคุณสามารถระบุ “LOOCV” แทนเพื่อทำการ ตรวจสอบข้ามแบบ Leave-One-Out
#make this example reproducible set.seed(1) #fit PCR model model <- plsr(hp~mpg+disp+drat+wt+qsec, data=mtcars, scale= TRUE , validation=" CV ")
ขั้นตอนที่ 3: เลือกจำนวนส่วนประกอบ PLS
เมื่อเราติดตั้งโมเดลแล้ว เราจำเป็นต้องกำหนดจำนวนส่วนประกอบ PLS ที่จะเก็บ
ในการดำเนินการนี้ เพียงดูที่ค่าความคลาดเคลื่อนกำลังสองเฉลี่ยของรูทการทดสอบ (ทดสอบ RMSE) ที่คำนวณโดยการตรวจสอบความถูกต้องของ k-cross:
#view summary of model fitting
summary(model)
Data:
Y dimension: 32 1
Fit method: kernelpls
Number of components considered: 5
VALIDATION: RMSEP
Cross-validated using 10 random segments.
(Intercept) 1 comp 2 comps 3 comps 4 comps 5 comps
CV 69.66 40.57 35.48 36.22 36.74 36.67
adjCV 69.66 40.41 35.12 35.80 36.27 36.20
TRAINING: % variance explained
1 comp 2 comps 3 comps 4 comps 5 comps
X 68.66 89.27 95.82 97.94 100.00
hp 71.84 81.74 82.00 82.02 82.03
ผลลัพธ์มีตารางที่น่าสนใจสองตาราง:
1. การตรวจสอบความถูกต้อง: RMSEP
ตารางนี้บอกเราถึงการทดสอบ RMSE ที่คำนวณโดยการตรวจสอบข้าม k-fold เราสามารถเห็นสิ่งต่อไปนี้:
- หากเราใช้เฉพาะคำดั้งเดิมในโมเดล RMSE ของการทดสอบคือ 69.66
- หากเราเพิ่มองค์ประกอบ PLS แรก การทดสอบ RMSE จะลดลงเหลือ 40.57
- หากเราเพิ่มองค์ประกอบ PLS ตัวที่สอง การทดสอบ RMSE จะลดลงเหลือ 35.48
เราจะเห็นว่าการเพิ่มส่วนประกอบ PLS เพิ่มเติมส่งผลให้ RMSE ของการทดสอบเพิ่มขึ้น ดังนั้นจึงดูเหมือนว่าการใช้ส่วนประกอบ PLS เพียงสองชิ้นในแบบจำลองสุดท้ายจะเป็นการเหมาะสมที่สุด
2. การฝึกอบรม: อธิบาย % ของความแปรปรวน
ตารางนี้บอกเราถึงเปอร์เซ็นต์ของความแปรปรวนในตัวแปรตอบสนองที่อธิบายโดยส่วนประกอบ PLS เราสามารถเห็นสิ่งต่อไปนี้:
- การใช้เพียงองค์ประกอบ PLS แรกเท่านั้น เราสามารถอธิบายความแปรผันของตัวแปรตอบสนองได้ 68.66%
- ด้วยการเพิ่มองค์ประกอบ PLS ที่สอง เราสามารถอธิบายความแปรผันของตัวแปรตอบสนองได้ 89.27%
โปรดทราบว่าเรายังคงสามารถอธิบายความแปรปรวนได้มากขึ้นโดยใช้องค์ประกอบ PLS มากขึ้น แต่เราเห็นว่าการเพิ่มองค์ประกอบ PLS มากกว่าสององค์ประกอบไม่ได้เพิ่มเปอร์เซ็นต์ของความแปรปรวนที่อธิบายไว้มากนัก
นอกจากนี้เรายังสามารถเห็นภาพการทดสอบ RMSE (พร้อมกับการทดสอบ MSE และ R-squared) เป็นฟังก์ชันของจำนวนส่วนประกอบ PLS โดยใช้ฟังก์ชัน validationplot()
#visualize cross-validation plots validationplot(model) validationplot(model, val.type=" MSEP ") validationplot(model, val.type=" R2 ")
ในแต่ละกราฟ เราจะเห็นว่าโมเดลพอดีได้รับการปรับปรุงโดยการเพิ่มองค์ประกอบ PLS สองตัว แต่มีแนวโน้มที่จะลดลงเมื่อเราเพิ่มส่วนประกอบ PLS เพิ่มเติม
ดังนั้น โมเดลที่เหมาะสมที่สุดจึงมีเพียงส่วนประกอบ PLS สองตัวแรกเท่านั้น
ขั้นตอนที่ 4: ใช้แบบจำลองสุดท้ายเพื่อคาดการณ์
เราสามารถใช้แบบจำลองสุดท้ายกับองค์ประกอบ PLS สองส่วนเพื่อคาดการณ์เกี่ยวกับการสังเกตใหม่ๆ
รหัสต่อไปนี้แสดงวิธีแยกชุดข้อมูลดั้งเดิมออกเป็นชุดการฝึกและชุดทดสอบ และใช้โมเดลสุดท้ายที่มีส่วนประกอบ PLS สองรายการเพื่อคาดการณ์ชุดทดสอบ
#define training and testing sets train <- mtcars[1:25, c("hp", "mpg", "disp", "drat", "wt", "qsec")] y_test <- mtcars[26: nrow (mtcars), c("hp")] test <- mtcars[26: nrow (mtcars), c("mpg", "disp", "drat", "wt", "qsec")] #use model to make predictions on a test set model <- plsr(hp~mpg+disp+drat+wt+qsec, data=train, scale= TRUE , validation=" CV ") pcr_pred <- predict(model, test, ncomp= 2 ) #calculate RMSE sqrt ( mean ((pcr_pred - y_test)^2)) [1] 54.89609
เราจะเห็นว่า RMSE ของการทดสอบกลายเป็น 54.89609 นี่คือค่าเบี่ยงเบนเฉลี่ยระหว่างค่า HP ที่คาดการณ์ไว้กับค่า HP ที่สังเกตได้สำหรับการสังเกตชุดทดสอบ
โปรดทราบว่า แบบจำลองการถดถอยขององค์ประกอบหลักที่เทียบเท่า กับองค์ประกอบหลัก 2 องค์ประกอบทำให้เกิดการทดสอบ RMSE ที่ 56.86549 ดังนั้น โมเดล PLS จึงมีประสิทธิภาพเหนือกว่าโมเดล PCR สำหรับชุดข้อมูลนี้เล็กน้อย
การใช้งานโค้ด R อย่างเต็มรูปแบบในตัวอย่างนี้สามารถพบได้ ที่นี่