เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ลบตัวทำนายที่มีความแปรปรวนเกือบเป็นศูนย์ออก

ดังที่เห็นในวิดีโอ ในชุดแบบฝึกหัดถัดไปจะใช้ชุดข้อมูล 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(___, ___)]
แก้ไขและรันโค้ด