1. 학습
  2. /
  3. 강의
  4. /
  5. R의 caret로 배우는 Machine Learning

Connected

연습 문제

Near zero variance 예측 변수 제거

영상에서 보신 것처럼, 이번 연습 문제 세트에서는 blood-brain 데이터셋을 사용해 볼 거예요. 이 생화학 데이터셋의 과제는 다음 값을 화합물 집합에 대해 예측하는 것입니다:

log((concentration of compound in brain) /
      (concentration of compound in blood))

이는 화합물이 혈액-뇌 장벽을 통과하는 능력을 정량적으로 나타내며, 해당 장벽의 생물학적 특성을 이해하는 데 유용해요.

이 데이터셋의 흥미로운 점은 변수 수가 매우 많고, 그중 상당수의 분산이 극히 낮다는 것입니다. 이는 이들 변수가 대부분 단일 값(예: 0)으로 이루어져 있어 정보량이 매우 적다는 뜻이에요.

다행히 caret에는 이러한 변수를 제거해 모델링 시간을 절약할 수 있는 nearZeroVar() 유틸리티 함수가 있어요.

nearZeroVar()는 데이터 x를 받아, 최빈값과 차빈값의 비율 freqCut, 그리고 전체 샘플 수 대비 고유값의 비율 uniqueCut을 확인해요. 기본적으로 caret은 비교적 보수적인 freqCut = 19, uniqueCut = 10을 사용합니다. 저는 좀 더 공격적으로 nearZeroVar()를 호출할 때 freqCut = 2, uniqueCut = 20을 사용하는 편이에요.

지침

100 XP

bloodbrain_x와 bloodbrain_y가 작업 공간에 로드되어 있어요.

  • blood-brain 데이터셋에 대해 nearZeroVar()를 실행해 near zero variance 예측 변수를 식별하세요. 결과를 remove_cols라는 객체로 저장하세요. nearZeroVar() 호출 시 freqCut = 2, uniqueCut = 20을 사용하세요.
  • names()를 사용해 bloodbrain_x의 모든 열 이름을 담는 벡터를 만드세요. 이름은 all_cols로 하세요.
  • near zero variance 변수를 제거한 새 데이터 프레임 bloodbrain_x_small을 만드세요. 유지할 열 이름(즉, 제거하지 않을 열)을 분리하기 위해 setdiff()를 사용하세요.