Loại bỏ các biến dự báo có phương sai gần như bằng 0
Như bạn đã thấy trong video, ở loạt bài tập tiếp theo, bạn sẽ dùng bộ dữ liệu blood-brain. Đây là một bộ dữ liệu sinh hóa, trong đó nhiệm vụ là dự đoán giá trị sau cho một tập hợp các hợp chất sinh hóa:
log((nồng độ hợp chất trong não) /
(nồng độ hợp chất trong máu))
Giá trị này cung cấp một thước đo định lượng về khả năng của hợp chất đi qua hàng rào máu não, hữu ích để hiểu các đặc tính sinh học của hàng rào đó.
Một điểm thú vị của bộ dữ liệu này là nó chứa rất nhiều biến, và nhiều biến trong số đó có phương sai cực kỳ thấp. Điều này có nghĩa là các biến đó chứa rất ít thông tin vì chúng chủ yếu chỉ có một giá trị (ví dụ: 0).
May mắn là caret có một hàm tiện ích gọi là nearZeroVar() để loại bỏ các biến như vậy nhằm tiết kiệm thời gian khi mô hình hóa.
nearZeroVar() nhận dữ liệu x, sau đó xem xét tỷ lệ giữa giá trị xuất hiện nhiều nhất và giá trị xuất hiện nhiều thứ hai, freqCut, và phần trăm số giá trị phân biệt so với tổng số mẫu, uniqueCut. Mặc định, caret dùng freqCut = 19 và uniqueCut = 10, khá thận trọng. Tôi thích đặt tham số quyết liệt hơn một chút và dùng freqCut = 2 và uniqueCut = 20 khi gọi nearZeroVar().
Bài tập này là một phần của khóa học
Machine Learning với caret trong R
Hướng dẫn bài tập
bloodbrain_x và bloodbrain_y đã được nạp trong không gian làm việc của bạn.
- Xác định các biến dự báo có phương sai gần như bằng 0 bằng cách chạy
nearZeroVar()trên bộ dữ liệu blood-brain. Lưu kết quả vào một đối tượng tên làremove_cols. DùngfreqCut = 2vàuniqueCut = 20trong lời gọinearZeroVar(). - Dùng
names()để tạo một vector chứa tất cả tên cột củabloodbrain_x. Gọi vector này làall_cols. - Tạo một data frame mới tên
bloodbrain_x_smallvới các biến có phương sai gần như bằng 0 đã được loại bỏ. Dùngsetdiff()để lấy các tên cột bạn muốn giữ lại (tức là không muốn loại bỏ).
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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(___, ___)]