데이터가 많을 때 사용하는 특성 선택을 배우다.
1. 특성 선택의 정의
특성 선택이란 데이터가 많은 상황에서 사용한다. 데이터가 많은 상황에선 특성이 다양하기 때문에 어떤 특성이 의미있는 데이터인지 구별해서 시간을 단축시켜야할 필요가 있다. 특성 선택을 하지않고 모델을 학습시키면 학습량이 늘어나면서 시간 소요가 늘어나 성능이 저하된다. 모델이 규칙을 찾는데에 도움이 안되는 데이터가 들어가기 때문에 불필요한 데이터가 발생한다. 특성 선택의 목표는 불필요한 데이터를 제거하고 필요한 데이터만 남기는 것이다.
2. 특성 중요도 feature_importances_
특성 선택 과정에선 사용되는 특성들의 중요도를 확인해서 중요도가 1에 가까울수록 중요한 특성으로 생각하면 된다. 특성 중요도를 반환하는 함수를 사용하면 numpy형태의 배열을 반환하기 때문에 0 ~ 1값을 가진다. 각 특성(컬럼)들의 중요도를 확인하는 방법은 'feature_importances_'를 사용해서 특성 중요도를 구할 수 있다. 사용 방법은 다음과 같다.
# 사용한 특성의 중요도를 확인하는 함수
fi = tree_model.feature_importances_
# 각 컬럼의 중요도 표시
# 0 ~ 1 사이의 값으로 표시
# 각 중요도 합은 1
# 1에 가까울수록 중요한 특성
사용한 모델에 특성 중요도를 확인하는 함수를 사용하면 된다. 현재 이 상태로는 확인하기 어렵기 때문에 특성의 중요도를 확인하기 위해서 데이터 프레임 형태로 변환한다. 그리고 중요도가 0인 데이터는 필요없고 중요도가 높은 특성만 필요하기 때문에 내림차순과 중요도가 0이 아닌 특성으로 불리언 인덱싱을 해주면 된다.
# 사용된 특성만 보기위해 0을 제외한 데이터만 불리언 인덱싱
# 특성의 중요도를 확인하기 위해서 데이터 프레임 형태로 변환
df = pd.DataFrame(fi, index=X_onehot.columns)
# 가장 많이 사용된 특성들만 확인해보기
# 0이라는 이름의 컬럼을 내림차순 정렬
df.sort_values(by=0, ascending=False)
# 중요도가 0이 아닌 특성만 -> 불리언 인덱싱
df[df[0] != 0]
# 실제 버섯의 독성 / 식용 분류에 사용된 특성
# 만약 시간이 부족해서 데이터를 줄여야한다면 특성 값이 작은 것부터 없애고 학습
그림 2를 보면 odor_n의 중요도가 가장 1과 가깝기 때문에 가장 중요한 특성이라고 말할 수 있다.
'머신러닝' 카테고리의 다른 글
[머신러닝] 선형회귀 - 경사하강법(Gradient Descent) (0) | 2023.09.05 |
---|---|
[머신러닝] 선형회귀 (2) | 2023.09.04 |
[머신러닝] 교차검증 (cross_val_score) (0) | 2023.08.28 |
[머신러닝] 알고리즘 시각화 (graphviz) (0) | 2023.08.25 |
[머신러닝] 결정 트리 버섯데이터 실습 (One-hot 인코딩) (0) | 2023.08.25 |