ลบตัวทำนายที่มีความแปรปรวนเกือบเป็นศูนย์ออก
ดังที่เห็นในวิดีโอ ในชุดแบบฝึกหัดถัดไปจะใช้ชุดข้อมูล blood-brain ซึ่งเป็นชุดข้อมูลทางชีวเคมีที่มีเป้าหมายในการทำนายค่าต่อไปนี้สำหรับสารประกอบทางชีวเคมีชุดหนึ่ง:
log((concentration of compound in brain) /
(concentration of compound in blood))
ค่านี้เป็นตัวชี้วัดเชิงปริมาณของความสามารถของสารประกอบในการผ่านเข้าสู่ blood-brain barrier ซึ่งมีประโยชน์สำหรับการทำความเข้าใจคุณสมบัติทางชีววิทยาของเกราะป้องกันนี้
สิ่งที่น่าสนใจในชุดข้อมูลนี้คือมีตัวแปรจำนวนมาก และหลายตัวแปรมีความแปรปรวนต่ำมาก หมายความว่าตัวแปรเหล่านี้แทบไม่มีข้อมูลที่เป็นประโยชน์ เนื่องจากส่วนใหญ่มีค่าเพียงค่าเดียว (เช่น ศูนย์)
โชคดีที่ caret มีฟังก์ชันอรรถประโยชน์ชื่อ nearZeroVar() สำหรับลบตัวแปรเหล่านี้ออก เพื่อประหยัดเวลาในขั้นตอนการสร้างโมเดล
nearZeroVar() รับข้อมูล x เป็นอินพุต แล้วดูที่อัตราส่วนของค่าที่พบบ่อยที่สุดต่อค่าที่พบบ่อยเป็นอันดับสอง (freqCut) และเปอร์เซ็นต์ของค่าที่แตกต่างกันเทียบกับจำนวนตัวอย่างทั้งหมด (uniqueCut) โดยค่าเริ่มต้น caret ใช้ freqCut = 19 และ uniqueCut = 10 ซึ่งค่อนข้างอนุรักษ์นิยม แต่แนะนำให้ใช้เกณฑ์ที่เข้มงวดกว่าเล็กน้อย คือ freqCut = 2 และ uniqueCut = 20 เมื่อเรียกใช้ nearZeroVar()
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Machine Learning ด้วย caret ใน R
คำแนะนำการฝึกหัด
bloodbrain_x และ bloodbrain_y ถูกโหลดไว้ใน workspace แล้ว
- ระบุตัวทำนายที่มีความแปรปรวนเกือบเป็นศูนย์โดยรัน
nearZeroVar()กับชุดข้อมูล blood-brain แล้วเก็บผลลัพธ์ไว้ในออบเจกต์ชื่อremove_colsโดยใช้freqCut = 2และuniqueCut = 20ในการเรียกใช้nearZeroVar() - ใช้
names()เพื่อสร้างเวกเตอร์ที่เก็บชื่อคอลัมน์ทั้งหมดของbloodbrain_xแล้วตั้งชื่อว่าall_cols - สร้าง data frame ใหม่ชื่อ
bloodbrain_x_smallโดยลบตัวแปรที่มีความแปรปรวนเกือบเป็นศูนย์ออก ใช้setdiff()เพื่อคัดกรองชื่อคอลัมน์ที่ต้องการเก็บไว้ (คือคอลัมน์ที่ไม่ต้องการลบออก)
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Identify near zero variance predictors: remove_cols
remove_cols <- nearZeroVar(___, names = TRUE,
freqCut = ___, uniqueCut = ___)
# Get all column names from bloodbrain_x: all_cols
# Remove from data: bloodbrain_x_small
bloodbrain_x_small <- bloodbrain_x[ , setdiff(___, ___)]