머신 러닝 및 신경망 - 페이지 75

 

13.4.4 순차적 특징 선택(L13: 특징 선택)


13.4.4 순차적 특징 선택(L13: 특징 선택)

이전 비디오에서 내가 가장 좋아하는 기술로 순열 중요도를 사용하는 기능 중요도 개념을 소개했습니다. 이 비디오에서는 이전에 언급한 래퍼 방법의 일부이기도 한 순차 기능 선택이라는 또 다른 중요한 기술에 대해 논의하고 싶습니다.

순차 기능 선택에 들어가기 전에 지금까지 논의한 다양한 유형의 기능 선택 방법을 간략하게 요약해 보겠습니다. 우리는 필터 방법으로 시작한 다음 재귀적 기능 제거와 같은 내장된 방법으로 이동했으며 지금은 래퍼 방법에 집중하고 있습니다.

래퍼 방법은 가능한 모든 기능 조합을 시도하여 최적의 기능 하위 집합을 찾는 것을 목표로 합니다. 이 접근 방식을 철저한 기능 선택이라고 합니다. 작동 방식을 이해하기 위해 꽃받침 길이, 꽃받침 너비, 꽃잎 길이 및 꽃잎 너비의 네 가지 기능이 있는 Iris 데이터 세트의 예를 살펴보겠습니다. 모델에 대한 최상의 기능 조합을 찾으려면 단일 기능에서 전체 기능 세트에 이르기까지 가능한 모든 하위 집합을 시도해야 합니다.

Iris 데이터 세트의 경우 1, 2, 3 및 4개의 기능 하위 집합을 포함하여 15개의 가능한 조합이 생성됩니다. 그러나 철저한 기능 선택은 계산 비용이 많이 들고 과적합되기 쉽습니다. 이러한 문제를 완화하기 위해 검증 세트 또는 K-겹 교차 검증을 사용하여 다양한 기능 하위 집합의 성능을 평가할 수 있습니다.

단순함에도 불구하고 철저한 기능 선택은 기능이 많은 데이터 세트에 적용될 때 한계가 있습니다. 가능한 기능 하위 집합의 수는 기능의 수에 따라 기하급수적으로 증가하므로 대규모 데이터 세트에는 비실용적입니다. 이 제한은 가능한 모든 조합을 평가하는 대신 기능 조합의 하위 집합을 탐색하는 근사 기법인 순차적 기능 선택을 사용하도록 동기를 부여합니다.

순차 기능 선택은 원래 기능 세트로 시작하여 성능에 따라 점진적으로 기능을 선택하거나 제거하는 반복 프로세스입니다. 널리 사용되는 접근 방식 중 하나는 전체 기능 세트로 시작하여 한 번에 하나의 기능을 반복적으로 제거하는 순차 역방향 선택입니다. 각 반복에서 나머지 기능의 성능을 평가하고 성능이 가장 높은 하위 집합을 선택합니다. 이 프로세스는 단일 기능이 남아 있는 하위 집합을 얻을 때까지 계속됩니다.

순차 역방향 선택 알고리즘은 다음과 같이 요약할 수 있습니다.

  1. 원래 기능 세트로 시작하십시오.
  2. 한 번에 하나의 기능을 제거하여 n-1 크기의 모든 가능한 기능 하위 집합을 생성합니다.
  3. 각 후보 하위 집합의 성능을 평가합니다.
  4. 성능이 가장 높은 하위 집합을 선택하고 이 하위 집합에 없는 기능을 영구적으로 제거합니다.
  5. 원하는 형상 크기에 도달할 때까지 2-4단계를 반복합니다(예: 하나의 형상만 남음).

2~4단계를 반복하여 최적의 하위 집합에 도달할 때까지 기능 집합을 점진적으로 줄입니다. 가장 높은 평가점수를 기준으로 최종 부분집합을 선택하고, 동점일 경우 연산효율을 위해 작은 부분집합을 선호한다. 순차 역선택의 반복 횟수는 특징 수에서 1을 뺀 것과 같습니다.

순차 순방향 선택은 순차 기능 선택의 또 다른 변형입니다. 기능을 제거하는 대신 순차 정방향 선택은 빈 기능 세트로 시작하여 한 번에 하나의 기능을 점진적으로 추가합니다. 이 프로세스에는 각 개별 기능에 대한 분류기를 교육하고 성능을 평가하는 작업이 포함됩니다. 성능이 가장 높은 기능이 선택되어 하위 집합에 추가됩니다. 이 프로세스는 최대 기능 수에 도달할 때까지 계속됩니다.

요약하면 순차적 특징 선택은 최적의 특징 부분 집합을 찾는 데 유용한 기술입니다. 계산 효율성과 좋은 기능 조합 찾기 사이의 절충안을 제공합니다. 순차 역방향 선택 및 순차 순방향 선택은 순차 기능 선택의 두 가지 일반적인 변형이며 각각 고유한 장점과 사용 사례가 있습니다. 다음 비디오에서는 프로그래밍 방식으로 순차적 기능 선택을 구현하고 철저한 기능 선택의 한계를 해결하는 방법을 살펴봅니다.

13.4.4 Sequential Feature Selection (L13: Feature Selection)
13.4.4 Sequential Feature Selection (L13: Feature Selection)
  • 2022.01.05
  • www.youtube.com
This video explains how sequential feature selection works. Sequential feature selection is a wrapper method for feature selection that uses the performance ...
 

13.4.5 순차적 특징 선택 -- 코드 예(L13: 특징 선택)


13.4.5 순차적 특징 선택 -- 코드 예(L13: 특징 선택)

이제 기능 선택에 대한 논의를 마무리할 시간입니다. 이 비디오에서는 Python에서 순차적 기능 선택을 사용하는 방법을 시연합니다. 몇 년 전에 개발한 원래 구현인 MLxtend 라이브러리를 사용한 예제를 보여주면서 시작하겠습니다. 나중에 더 간소화된 구현을 제공하는 scikit-learn을 사용하여 동일한 결과를 달성하는 방법도 시연할 것입니다.

코드를 살펴보기 전에 문서를 확인하는 것이 좋습니다. 여기에는 너무 길고 압도적인 내용을 피하기 위해 이 비디오에서 다루지 않을 추가 예제가 포함되어 있습니다. 더 자세한 정보는 설명서를 참조하는 것이 항상 도움이 됩니다.

먼저 수년간 내 노트북과 소프트웨어 라이브러리의 버전을 추적하기 위해 개발한 "워터마크" 플러그인을 로드하는 것으로 시작하겠습니다. 특히 버전 불일치로 인해 일부 옵션이 더 이상 작동하지 않을 수 있는 경우 버전 번호가 예상과 일치하는지 확인하는 것이 좋습니다. 우리는 또한 나중에 matplotlib 라이브러리를 사용할 것이므로 플롯이 노트북에 올바르게 표시되도록 라이브러리를 가져오겠습니다.

이제 기능 선택을 위한 데이터 세트 준비로 이동하겠습니다. 이전 비디오에서와 같이 우리는 와인 데이터 세트를 사용할 것입니다. Pandas를 사용하여 UCI 기계 학습 데이터 세트 리포지토리에서 데이터 세트를 로드합니다. 데이터 세트를 로드한 후 모든 것이 올바르게 로드되었는지 확인하기 위해 몇 가지 기본 정보를 인쇄합니다. 클래스 레이블이 정수로 표시되는지 확인하는 것도 중요합니다.

다음으로 이전 비디오에서 했던 것처럼 데이터 세트를 교육 및 테스트 세트로 나눕니다. 또한 기능 스케일링에 민감한 K-최근접 이웃 분류기를 사용할 것이기 때문에 데이터 세트를 표준화합니다. 데이터 세트를 80% 훈련 세트와 20% 테스트 세트로 나누고 두 세트를 표준화합니다.

기능 선택 전에 기준선을 설정하기 위해 표준화된 데이터 세트에 K-최근접 이웃 분류기를 맞추고 교육 및 테스트 정확도를 계산합니다. 이 예에서는 분류기에 대해 임의로 5개의 이웃을 선택하지만 이 매개변수는 최적의 성능을 위해 그리드 검색의 대상이 될 수 있습니다. 코드와 비디오를 더 단순하게 유지하기 위해 여기에서 그리드 검색을 수행하지는 않지만 그리드 검색과 순차적 기능 선택을 결합하는 것이 일반적인 접근 방식입니다. 문서에서 이에 대한 예를 찾을 수 있습니다.

기준선 결과는 학습 세트에서 98.6%의 정확도를 달성하고 테스트 세트에서 94%의 정확도를 달성했음을 보여줍니다. 성능은 와인 데이터 세트의 13개 기능을 모두 사용하여 꽤 좋습니다. 그러나 K-최근접 이웃 분류기와 관련된 차원의 저주로 인해 약간의 과적합이 있을 수 있습니다. 이를 완화하기 위해 기능의 더 작은 하위 집합을 선택하여 잠재적으로 성능을 향상시킬 수 있습니다.

이제 순차 기능 선택을 사용하여 5개 기능의 하위 집합을 선택하는 방법을 보여드리겠습니다. MLxtend 라이브러리에서 SequentialFeatureSelector 클래스를 가져오고 편의를 위해 가져오기 이름을 sfs로 줄였습니다. 이 클래스는 모델, 원하는 기능 하위 집합 크기 및 선택 방향(앞으로, 뒤로, 부동)을 입력으로 사용합니다. 순차 정방향 선택을 위해 방향을 정방향으로 설정합니다. verbose 매개변수를 사용하면 훈련 중에 표시되는 출력의 양을 제어할 수 있으며 이는 진행 상황을 모니터링하는 데 유용할 수 있습니다. 스코어링 메트릭을 정확도로 지정하고 5겹 교차 검증을 사용하여 기능 하위 집합을 평가합니다. 사용 가능한 모든 CPU 코어를 활용하려면 n_jobs 매개변수를 양의 정수 또는 -1로 설정하여 병렬 처리를 활성화할 수 있습니다. 이 경우 더 빠른 실행을 위해 8로 설정했습니다.

출력은 하나의 기능으로 시작하여 원하는 하위 세트 크기인 5에 도달할 때까지 점차적으로 기능 수를 늘리는 기능 선택 프로세스의 진행 상황을 보여줍니다. 각 기능 하위 집합의 성능도 표시되어 더 많은 기능이 추가됨에 따라 개선되었음을 나타냅니다.

완료 후 sfs 객체의 k_feature_idx_ 및 k_feature_names_ 속성을 각각 사용하여 선택한 기능 인덱스 및 해당 기능 이름에 액세스할 수 있습니다. 또한 k_score_ 속성을 사용하여 기능 하위 집합의 성능 기록에 액세스할 수 있습니다. 선택한 기능 인덱스, 이름 및 해당 점수를 인쇄해 보겠습니다.

print( 'Selected feature indices:' , sfs.k_feature_idx_)
print( 'Selected feature names:' , sfs.k_feature_names_)
print( 'Selected feature scores:' , sfs.k_score_)

출력에는 선택한 5개 기능의 인덱스, 이름 및 점수가 표시됩니다.

다음으로 선택한 기능 하위 집합에서 K-최근접 이웃 분류기를 재훈련할 수 있습니다. 이렇게 하려면 선택한 기능만 포함하는 새로운 교육 및 테스트 세트를 만들어야 합니다. sfs 객체의 변환 방법을 사용하여 원본 데이터 세트를 새로운 기능 공간으로 변환할 수 있습니다.

X_train_selected = sfs.transform(X_train)
X_test_selected = sfs.transform(X_test)
데이터 세트를 변환한 후 선택한 기능 하위 집합에 새로운 K-최근접 이웃 분류기를 맞추고 교육 및 테스트 정확도를 계산할 수 있습니다. 결과를 출력해 봅시다:

knn_selected = KNeighborsClassifier(n_neighbors= 5 )
knn_selected.fit(X_train_selected, y_train)

train_acc_selected = knn_selected.score(X_train_selected, y_train)
test_acc_selected = knn_selected.score(X_test_selected, y_test)

print( 'Training accuracy on selected features:' , train_acc_selected)
print( 'Test accuracy on selected features:' , test_acc_selected)
출력에는 선택한 5가지 기능만 사용하여 달성한 교육 및 테스트 정확도가 표시됩니다.

결과를 기준 정확도와 비교하여 기능 선택이 분류기 성능에 미치는 영향을 평가할 수 있습니다. 경우에 따라 기능 선택은 과적합을 줄이고 관련이 없거나 중복되는 기능을 제거하여 더 나은 일반화 및 향상된 모델 성능으로 이어질 수 있습니다.

MLxtend 라이브러리를 사용한 데모는 여기까지입니다. 이제 순차 기능 선택을 위해 scikit-learn을 사용하는 방법으로 넘어가겠습니다.

scikit-learn에서 SequentialFeatureSelector 클래스는 feature_selection 모듈에서 사용할 수 있습니다. 다음과 같이 가져옵니다.

from sklearn.feature_selection import SequentialFeatureSelector
scikit-learn 버전의 사용법은 MLxtend 버전과 유사하지만 매개변수 이름과 속성 액세스에 약간의 차이가 있습니다. 또한 scikit-learn 버전은 다양한 기능 선택 알고리즘 및 스코어링 메트릭을 사용하는 측면에서 더 많은 유연성을 제공합니다.

이 데모가 Python에서 순차적 기능 선택을 사용하는 방법을 이해하는 데 도움이 되기를 바랍니다. 추가 예제 및 정보는 설명서를 참조하십시오.

13.4.5 Sequential Feature Selection -- Code Examples (L13: Feature Selection)
13.4.5 Sequential Feature Selection -- Code Examples (L13: Feature Selection)
  • 2022.01.06
  • www.youtube.com
This final video in the "Feature Selection" series shows you how to use Sequential Feature Selection in Python using both mlxtend and scikit-learn.Jupyter no...