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

 

12.4 수신기 작동 특성(L12 모델 평가 5: 성능 지표)



12.4 수신기 작동 특성(L12 모델 평가 5: 성능 지표)

토론 주제는 수신자 작동 특성(ROC) 곡선을 중심으로 이루어집니다. ROC(Receiver Operating Characteristic) 곡선이라고도 하는 이 곡선은 복잡한 이름으로 인해 텅 트위스터처럼 들릴 수 있습니다. "수신기 작동 특성"이라는 용어는 무선 방향 측정과 같은 기술로 작업한 레이더 수신기 작동 분야에서 유래되었습니다. 처음에는 이러한 맥락에서 사용되었습니다. 그러나 두 가지 필수 지표인 참양성률과 거짓양성률을 결합하는 능력으로 인해 기계 학습 분야에서 인기를 얻었습니다.

ROC 곡선은 예측 임계값을 변경하여 구성됩니다. 이를 설명하기 위해 예를 들어 보겠습니다. 이진 분류 문제에는 클래스 0과 클래스 1의 두 가지 클래스가 있습니다. 단순한 이진 분류 결정을 내리는 대신 각 예에 클래스 구성원 확률을 할당할 수 있습니다. 이 확률은 로지스틱 회귀, k-최근접 이웃 또는 결정 트리와 같은 다양한 분류기를 사용하여 결정할 수 있습니다. 예를 들어, k-최근접 이웃의 경우 클래스 멤버십 확률은 이웃에서 한 클래스가 다른 클래스에 비해 발생하는 비율로 계산할 수 있습니다.

k-최근접 이웃 알고리즘을 사용하는 예를 살펴보겠습니다. 일련의 이웃이 있고 특정 예에 대한 클래스 구성원 확률을 결정하려고 한다고 가정합니다. 5개의 가장 가까운 이웃 중 3개는 클래스 0에 속하고 2개는 클래스 1에 속하는 것을 관찰하면 클래스 0에 대한 클래스 소속 확률은 3/5, 즉 0.6으로 계산되고 클래스 1에 대해서는 2/5로 계산됩니다. 0.4입니다. 이러한 확률은 임계값에 따라 조정될 수 있습니다.

임계값은 Class Zero와 Class One 사이에서 결정을 내리는 지점을 나타냅니다. 예를 들어 임계값을 0.5로 설정하면 0.5 이상의 확률은 1등급으로 분류되고 0.5 미만의 확률은 0등급으로 분류됩니다. 로지스틱 회귀에서는 0.5가 일반적으로 임계값으로 사용됩니다. 그러나 임계값은 임의적일 수 있으며 정양성률, 오탐률 또는 기타 기준에 맞게 최적화할지 여부에 따라 우리의 목표에 따라 달라집니다. 임계값 선택에는 동점인 경우 하위 등급을 선택하는 것과 같은 동률 결정 규칙도 포함됩니다.

ROC(수신자 작동 특성) 곡선은 y축에 TPR(진 양성률)을 표시하고 x축에 FPR(가양성률)을 표시하여 분류기의 성능을 보여줍니다. 곡선의 각 점은 서로 다른 임계값에 해당합니다. 임계값을 변경하면 분류기의 성능이 참양성률과 거짓양성률 측면에서 어떤 영향을 받는지 관찰할 수 있습니다. 곡선은 서로 다른 임계값에 대한 분류기의 민감도를 나타내므로 동작을 포괄적으로 분석할 수 있습니다.

정확도 측면에서 우리는 일반적으로 클래스 할당을 결정하기 위해 0.5와 같은 고정 임계값을 사용합니다. 그러나 수신기 작동 특성 곡선의 경우 임계값을 변경하여 분류기의 감도를 탐색합니다. 그렇게 함으로써 다양한 임계값이 거짓 긍정률과 참 긍정률에 미치는 영향을 평가할 수 있습니다. 곡선은 0.3, 0.4, 0.5, 0.6 등과 같이 서로 다른 임계값에 해당하는 서로 다른 점을 표시합니다. 곡선의 각 점은 특정 임계값에 대한 분류기의 성능을 나타냅니다.

이제 임계값의 개념과 클래스 소속 확률과의 관계를 살펴보겠습니다. 이전에는 x축의 기능과 이동 중인 결정 경계를 묘사한 그림을 보았습니다. 그러나 이는 이해를 돕기 위한 추상화에 불과했습니다. 실제로 x축은 클래스 소속 확률을 나타냅니다.

따라서 우리가 중단한 부분부터 계속해서 코드 스니펫에 대해 자세히 설명하겠습니다. 클래스 1의 확률을 계산한 후 scikit-learn의 roc_curve 함수를 사용하여 서로 다른 임계값에 대한 위양성률(fpr)과 참양성률(tpr)을 계산합니다. roc_curve 함수는 실제 레이블(y_true)과 예측 확률(y_scores)을 입력으로 사용하고 fpr, tpr 및 임계값을 반환합니다.

다음으로 roc_auc_score 함수를 사용하여 수신기 작동 특성 곡선(AUC-ROC) 아래 영역을 계산합니다. 이 메트릭은 가능한 모든 임계값에서 분류기의 성능을 요약하는 단일 값을 제공합니다. AUC-ROC가 높을수록 분류 성능이 우수함을 나타냅니다. 트레이닝 세트와 테스트 세트 모두에 대해 AUC-ROC를 별도로 계산합니다.

마지막으로 Matplotlib를 사용하여 ROC 곡선을 플로팅합니다. 플롯은 트레이닝 세트의 ROC 곡선을 파란색으로, 테스트 세트를 주황색으로 표시합니다. 또한 더 나은 해석을 위해 플롯에 레이블과 범례를 추가합니다.

ROC 곡선을 시각화하고 AUC-ROC를 계산하여 분류기의 성능을 평가하고 훈련 세트와 테스트 세트 간에 이를 비교할 수 있습니다. AUC-ROC가 1에 가까우면 진양성률이 높고 위양성률이 낮은 좋은 분류기를 나타냅니다. 반면에 0.5에 가까운 AUC-ROC는 임의적이거나 비효율적인 분류기를 제안합니다.

요약하면 이 코드 스니펫은 이진 분류 문제에 대한 평가 메트릭으로 수신자 작동 특성(ROC) 곡선과 곡선 아래 영역(AUC)을 사용하는 방법을 보여줍니다. ROC 곡선은 서로 다른 예측 임계값에서 참양성률과 거짓양성률 사이의 균형을 시각화하는 반면 AUC-ROC는 분류기의 성능을 정량화하는 단일 값을 제공합니다.

 

12.5 이진 메트릭을 다중 클래스 문제로 확장(L12 모델 평가 5: 성능 메트릭)


12.5 이진 메트릭을 다중 클래스 문제로 확장(L12 모델 평가 5: 성능 메트릭)

이 수업에서는 다중 클래스 설정과 함께 작동하도록 확장할 수 있는 다양한 분류자를 논의했습니다. 결정 트리, k-최근접 이웃, 그래디언트 부스팅, 랜덤 포레스트 및 기타 분류기는 다중 클래스 문제를 자연스럽게 처리합니다. 그러나 이진 분류에 더 적합한 로지스틱 회귀 또는 지원 벡터 머신과 같은 분류자를 발견할 수 있습니다. 이러한 경우 여러 클래스를 처리하기 위해 이러한 이진 분류자를 확장하는 방법을 찾아야 합니다.

한 가지 접근 방식은 OvR 또는 OvA라고도 하는 "일대일" 또는 "일대일" 전략입니다. 이 접근 방식에는 다중 클래스 문제를 별도의 이진 분류 문제로 나누는 작업이 포함됩니다. 하나의 이진 분류기에서 각 클래스는 양성 클래스로 처리되고 나머지 클래스는 음성 클래스로 처리됩니다. 예를 들어 세 개의 클래스(노란색 원, 빨간색 사각형 및 파란색 삼각형)가 있는 경우 세 개의 이진 분류기를 만듭니다. 나머지. 학습하는 동안 세 가지 분류기를 모두 적합하고 예측하는 동안 세 가지 분류기를 모두 실행하고 신뢰도 점수가 가장 높은 것을 선택합니다.

또 다른 접근 방식은 각 클래스 쌍에 대해 이진 분류기를 맞추는 "일대일" 전략입니다. 세 개의 클래스가 있는 경우 세 개의 이진 분류기가 있습니다. 하나는 빨간색 사각형에 대해 노란색 원을 분류하고, 하나는 파란색 삼각형에 대해 노란색 원을 분류하고, 다른 하나는 파란색 삼각형에 대해 빨간색 사각형을 분류합니다. 예측하는 동안 모든 분류기를 실행하고 다수결을 사용하여 최종 클래스 레이블을 결정합니다.

OvR 및 OvO 전략 모두 이진 분류기를 확장하여 다중 클래스 문제를 처리할 수 있습니다. 그러나 OvO는 특히 클래스 수가 많을 때 여러 분류기를 맞춰야 하므로 계산 비용이 많이 들 수 있습니다.

다중 클래스 분류기의 성능을 평가할 때 다중 클래스를 처리하기 위해 이진 분류 메트릭을 확장해야 합니다. 이를 수행하기 위한 두 가지 일반적인 접근 방식은 마이크로 및 매크로 평균화입니다. 마이크로 평균화에는 모든 클래스에 대해 참 양성 및 거짓 양성을 집계하여 정밀도, 재현율 및 F1 점수를 계산하는 작업이 포함됩니다. 매크로 평균화에는 각 클래스에 대한 정밀도, 재현율 및 F1 점수를 개별적으로 계산한 다음 평균화하는 작업이 포함됩니다. 마이크로 평균화는 각 인스턴스 또는 예측을 동등하게 처리하는 반면 매크로 평균화는 모든 클래스에 동등하게 가중치를 부여합니다. 또한 각 레이블의 실제 인스턴스 수를 고려하여 클래스 불균형을 고려하는 가중 접근 방식이 있습니다.

scikit-learn에서 정밀도, 재현율 및 F1 점수와 같은 분류 메트릭을 사용할 때 평균 방법(마이크로, 매크로 또는 가중)을 지정할 수 있습니다. 예를 들어 average='micro' 또는 average='macro'를 사용하여 마이크로 또는 매크로 평균 메트릭을 각각 계산할 수 있습니다. roc_auc_score 함수를 사용하여 계산할 수 있는 ROC(수신기 작동 특성) 및 AUC(곡선 아래 영역) 점수도 있습니다. ROC AUC의 기본 평균화 방법은 매크로입니다.

클래스 불균형을 처리하는 것은 다중 클래스 분류의 또 다른 과제입니다. 오버 샘플링 및 언더 샘플링과 같은 기술을 사용하여 이 문제를 해결할 수 있습니다. imbalanced-learn 라이브러리는 클래스 불균형을 처리하기 위한 추가 방법을 제공하며 scikit-learn과 호환됩니다.

전반적으로 다중 클래스 분류의 모델 평가에는 이진 분류기 확장, 평가 메트릭에 대한 적절한 평균화 방법 선택 및 클래스 불균형 고려가 포함됩니다. 이 수업에서 모든 세부 사항을 다룰 수는 없지만 이러한 주제에 대한 자세한 정보를 제공하는 imbalanced-learn 라이브러리 문서와 같은 리소스가 있습니다.

 

13.0 기능 선택 소개(L13: 기능 선택)


13.0 기능 선택 소개(L13: 기능 선택)

여러분, 안녕하세요! 여러분 모두 생산적인 한 학기를 보내셨고 이 수업을 통해 귀중한 지식을 얻으셨기를 바랍니다. 이번 학기가 우리 대부분에게 매우 강렬했다는 것을 이해하므로 추가 콘텐츠로 여러분을 압도하여 스트레스를 더하고 싶지 않았습니다. 그러나 강의 계획서에서 약속한 특정 주제를 다루지 못한 점에 대해 사과드립니다. 이를 보완하기 위해 오늘부터 겨울방학 특강을 준비했습니다.

이 비디오 시리즈에서는 차원 축소, 특히 특징 선택과 특징 추출의 두 가지 방법에 중점을 둘 것입니다. 이러한 기술은 매우 유용하고 이해하는 것이 중요합니다. 오늘 강의에서는 기능 선택에 대해 자세히 알아보고 기능 선택이 어떻게 작동하는지, 왜 필수적인지, 실용적인 응용 프로그램을 살펴보겠습니다. 다음 비디오 세트에서는 대체 접근 방식으로 기능 추출을 다룰 것입니다.

기능 선택 및 기능 추출의 세부 사항을 살펴보기 전에 차원 축소의 개념과 이것이 중요한 이유에 대해 간략하게 설명하겠습니다. 차원 감소는 데이터 세트의 기능 수를 줄이는 것을 목표로 합니다. 예를 들어 꽃받침 길이, 꽃받침 너비, 꽃잎 길이 및 꽃잎 너비의 네 가지 기능으로 구성된 잘 알려진 Iris 데이터 세트를 고려하십시오. 기능 선택에서 기계 학습 알고리즘에 사용할 꽃받침 너비 및 꽃잎 길이와 같은 이러한 기능의 하위 집합을 선택합니다. 반면에 기능 추출에는 선형 변환과 같은 기술을 통해 새로운 기능을 만드는 작업이 포함됩니다. 주성분 분석(PCA)은 여러 기능을 더 작은 기능 공간으로 결합하는 방법 중 하나입니다.

이 강의 시리즈에서 우리의 주요 초점은 데이터 세트에서 원래 기능을 선택하는 기능 선택입니다. 일반적으로 차원 축소에는 더 작은 기능 공간을 만드는 작업이 포함됩니다. 이제 왜 우리는 이러한 더 작은 차원의 특징 공간에 관심을 가집니까? 몇 가지 이유를 살펴보겠습니다.

  1. 차원의 저주: 기계 학습 분류자는 기능 수가 증가함에 따라 종종 어려움을 겪습니다. 과적합, 특히 K-최근접 이웃 및 결정 트리와 같은 알고리즘으로 인해 어려움을 겪을 수 있습니다. 기능 세트를 줄이면 이러한 알고리즘의 성능을 향상시킬 수 있습니다.

  2. 계산 효율성: 다양한 기능이 있는 대규모 데이터 세트는 계산 비용이 많이 들 수 있습니다. 기능 세트를 줄임으로써 예측 성능을 희생하지 않고 계산 성능을 향상시킬 수 있습니다.

  3. 더 쉬운 데이터 수집: 경우에 따라 더 간단한 기능 하위 집합이 더 큰 기능 하위 집합과 비교하여 비슷한 성능을 낼 수 있습니다. 이렇게 하면 특정 기능을 수집하는 것이 더 저렴하거나 액세스하기 쉬울 수 있으므로 데이터 수집을 더 쉽고 비용 효율적으로 만들 수 있습니다.

  4. 저장 공간: 방대한 양의 데이터를 저장하는 것은 어렵고 비용이 많이 들 수 있습니다. 기능 추출 및 선택 기술은 데이터의 차원을 줄이는 데 도움이 되어 스토리지를 보다 실현 가능하고 효율적으로 만듭니다.

  5. 해석 가능성: 기능을 이해하면 복잡한 기계 학습 알고리즘을 해석하는 데 도움이 될 수 있습니다. 고객 신용 카드 애플리케이션과 같이 설명이 필요한 영역에서 특히 중요합니다. 고객은 자동화 시스템이 내린 결정의 근거를 알 권리가 있습니다.

요약하면 차원 축소는 기능 선택과 기능 추출의 두 가지 하위 문제로 나눌 수 있습니다. 오늘 강의에서는 기능 선택에 대해 집중적으로 다루겠습니다. 다음 강의에서는 특징 추출에 대해 좀 더 자세히 다루도록 하겠습니다.

기능 선택의 중요성을 설명하기 위해 바다 칠성장어를 연구하는 생화학자들과의 공동 프로젝트의 예를 공유하겠습니다. 목표는 오대호에서 바다 칠성장어 개체수를 통제하기 위한 연방 몬 수용체 억제제를 찾는 것이었습니다. 기능 선택을 사용하여 어떤 분자 기능이 중요한지 이해했습니다. 기계 학습 분류기를 사용하여 다양한 기능 하위 집합의 성능을 평가함으로써 우리는 황 산소의 수와 같은 특정 간단한 기능이 매우 유익하다는 것을 발견했습니다. 더 많은 기능을 추가해도 성능이 크게 향상되지 않았으며, 이는 이러한 간단한 기능이 분류 작업에 가장 중요함을 나타냅니다. 이 지식은 수백만 개의 분자를 스크리닝하고 결국 유망한 억제를 보이는 화합물을 찾는 데 도움이 되었습니다.

선택한 기능만 사용하여 상당한 비율로 페로몬 신호에서. 이 예는 원하는 결과에 기여하는 주요 구성 요소 또는 특성을 식별하는 기능 선택의 힘을 보여줍니다.

이제 기능 선택 및 해당 관련성에 대해 자세히 살펴보겠습니다. 기능 선택은 관련성 있고 의미 있는 정보를 유지하면서 데이터 세트의 기능 또는 변수 수를 줄이는 것을 목표로 하는 차원 감소의 하위 범주입니다. 궁극적인 목표는 데이터 세트를 단순화하고 계산 효율성, 해석 가능성 및 예측 성능을 향상시키는 것입니다.

기능 선택이 중요하고 유익한 몇 가지 이유가 있습니다. 첫째, 차원의 저주는 기계 학습에서 도전 과제입니다. 기능 수가 증가함에 따라 특정 알고리즘의 성능이 저하되거나 과적합되기 쉽습니다. 기능 세트를 줄임으로써 이러한 문제를 완화하고 특히 K-최근접 이웃 및 결정 트리와 같은 알고리즘의 모델의 정확도와 신뢰성을 향상시킬 수 있습니다.

둘째, 계산 효율성은 대규모 데이터 세트를 처리할 때 중요한 고려 사항입니다. 기계 학습 모델을 훈련하고 테스트하는 계산 비용은 기능의 수에 따라 증가합니다. 관련 기능의 하위 집합을 선택하여 계산 부담을 줄이고 성능을 희생하지 않고 프로세스를 가속화할 수 있습니다.

또한 기능 선택을 통해 더 쉽게 데이터를 수집할 수 있습니다. 경우에 따라 기능의 단순화된 하위 집합이 더 큰 기능 집합과 비교하여 유사한 예측 성능을 제공할 수 있습니다. 이는 데이터 수집이 어렵거나 비용이 많이 드는 경우에 특히 유용합니다. 예를 들어, 의료 진단의 맥락에서 여전히 정확한 결과를 산출하는 쉽게 얻을 수 있는 기능을 식별하면 리소스를 절약하고 환자가 프로세스에 더 쉽게 접근할 수 있습니다.

또한 기능 선택은 저장 공간 최적화에 도움이 됩니다. 데이터 생성이 기하급수적으로 증가함에 따라 대규모 데이터 세트를 저장하고 관리하는 것이 중요한 문제가 되었습니다. 관련 기능을 선택하면 전체 성능이나 데이터에서 얻은 통찰력을 손상시키지 않으면서 스토리지 요구 사항을 줄일 수 있습니다.

또한 해석 가능성은 특히 자동화 시스템이나 규제된 도메인을 다룰 때 중요한 역할을 합니다. 기능 선택은 가장 영향력 있고 해석 가능한 기능을 식별하는 데 도움이 되므로 의사 결정 프로세스를 더 잘 이해하고 설명할 수 있습니다. 법적 또는 윤리적 요구 사항이 의사 결정에 대한 설명을 요구하는 상황에서 기능 선택은 규정 준수 및 책임을 용이하게 할 수 있습니다.

요약하면 차원 축소, 특히 기능 선택은 다양한 도메인에서 많은 이점을 제공합니다. 가장 유용한 기능을 선택함으로써 차원의 저주를 완화하고, 계산 효율성을 개선하고, 데이터 수집을 단순화하고, 저장 공간을 최적화하고, 해석성을 향상할 수 있습니다. 이러한 이점은 보다 정확하고 효율적인 기계 학습 모델에 기여하고 복잡한 문제를 더 깊이 이해할 수 있도록 합니다.

다음 강의에서는 또 다른 차원 축소 기법으로 특징 추출을 탐구할 것입니다. 특징 추출에는 주성분 분석(PCA)과 같은 방법을 통해 원래 특징을 새로운 특징 세트로 변환하는 작업이 포함됩니다. 이 프로세스를 통해 차원을 줄이면서 관련 정보를 캡처할 수 있습니다. 기능 선택과 기능 추출을 모두 이해하면 데이터 세트와 당면한 문제의 특정 특성과 요구 사항을 기반으로 적절한 기술을 활용할 수 있습니다.

따라서 다음 강의에서는 특징 추출에 대해 자세히 알아보고 그 기술, 장점 및 응용 프로그램에 대해 살펴보겠습니다. 매혹적인 차원 축소의 세계와 그것이 기계 학습에 미치는 영향을 통해 여정을 계속하는 동안 계속 지켜봐 주시기 바랍니다.

 

13.1 기능 선택의 다양한 범주(L13: 기능 선택)


13.1 기능 선택의 다양한 범주(L13: 기능 선택)

이전 비디오에서는 차원 감소의 하위 범주로 기능 선택의 개념을 살펴보았습니다. 기능 선택에는 기계 학습 모델의 성능을 향상시키기 위해 데이터 세트에서 기능의 하위 집합을 선택하는 작업이 포함됩니다. 예측 성능 및 계산 효율성 향상, 저장 공간 최적화, 데이터에 대한 통찰력 확보와 같은 기능 선택에 대한 다양한 동기에 대해 논의했습니다.

이제 기능 선택 알고리즘의 다양한 범주인 필터 방법, 내장 방법 및 래퍼 방법에 대해 자세히 살펴보겠습니다. 필터 방법은 기능 자체의 고유 속성에 초점을 맞추고 모델이나 분류자를 포함하지 않습니다. 분산 또는 쌍 상관 관계와 같은 개별 특성을 기반으로 기능을 분석합니다. 예를 들어 기능의 분산을 계산하면 서로 다른 교육 예제를 구별하는 데 유용성을 결정하는 데 도움이 됩니다. 특성 값이 축 전체에 퍼져 있으면 중요도를 나타냅니다. 반면에 상관관계가 높은 특징은 중복성을 시사하며 그 중 하나는 많은 정보 손실 없이 제거할 수 있습니다. 필터 방법은 단일 변수 또는 변수 쌍을 분석하기 때문에 일변량 또는 이변량 통계라고도 합니다.

임베디드 방법은 이름에서 알 수 있듯이 학습 알고리즘 내에서 기능 선택을 통합합니다. 이러한 방법은 모델 최적화 프로세스에 포함되며 목적 함수를 최적화하는 것을 목표로 합니다. 한 가지 예는 트리를 성장시키는 동안 기능이 내부적으로 선택되는 의사 결정 트리입니다. 의사 결정 트리는 각 분할에서 정보 획득을 최대화하는 기능을 선택하여 중요한 기능을 선택합니다. 최종 결정 트리에서 사용되지 않은 기능은 덜 중요하다고 간주될 수 있습니다.

래퍼 방법은 예측 성능을 최적화한다는 목표와 밀접하게 일치합니다. 이러한 방법에는 모델을 다른 기능 하위 집합에 맞추는 것과 모델의 성능에 따라 기능을 선택하거나 제거하는 것이 포함됩니다. 서로 다른 기능 하위 집합에서 훈련된 모델의 성능을 비교하여 각 기능의 중요성을 결정할 수 있습니다. 예를 들어 기능을 제거하면 정확도가 크게 떨어지는 경우 해당 기능이 모델의 성능에 중요함을 나타냅니다. 래퍼 방법은 모델의 정확도를 직접 사용하여 기능 중요도에 대한 귀중한 통찰력을 제공합니다.

래퍼 방법은 정확한 기능 선택을 제공하지만 특히 대규모 기능 집합을 처리할 때 계산 비용이 많이 들 수 있습니다. 모델을 다른 하위 집합에 맞추고 성능을 평가하는 프로세스는 시간이 많이 걸릴 수 있습니다. 반대로 필터 방법은 계산적으로 더 효율적이지만 래퍼 방법만큼 정확한 결과를 제공하지 못할 수 있습니다. 정확도와 계산 효율성 간의 절충은 기능 선택에서 중요한 고려 사항입니다.

다음 동영상에서는 기능 선택 알고리즘의 각 범주에 대해 자세히 알아볼 것입니다. 필터 방법에 대해 자세히 살펴보고 임베디드 방법과 래퍼 방법에 대해 살펴보겠습니다. 이러한 기술을 이해하면 기능 선택에 대한 포괄적인 이해와 기계 학습 모델을 개선하기 위해 적용할 수 있는 방법을 얻을 수 있습니다.

필터 방법에 대해 자세히 논의할 다음 비디오를 기대해 주십시오.

 

13.2 특징 선택을 위한 필터 방법 -- 분산 임계값(L13: 특징 선택)


13.2 특징 선택을 위한 필터 방법 -- 분산 임계값(L13: 특징 선택)

예, 이전 비디오에서 우리는 기능 선택의 세 가지 범주인 필터 방법, 포함된 방법 및 래퍼 방법에 대해 논의했습니다. 이제 범주 중 하나인 필터 방법에 대해 자세히 살펴보겠습니다. 다음 비디오에서는 포함된 메서드와 래퍼 메서드도 살펴보겠습니다. 그러나 지금은 필터 방법을 주요 주제로 집중적으로 살펴보겠습니다.

필터 방법은 기능 자체의 고유 속성을 주로 고려하는 기능 선택 기술입니다. 기능 선택을 위해 특정 모델에 의존하지 않습니다. 필터 방법의 한 예는 분산 임계값입니다. 분산 임계값이 어떻게 작동하는지 자세히 살펴보겠습니다.

기능 선택에 분산 임계값을 사용할 때 각 기능의 분산을 계산합니다. 분산이 더 높은 기능이 분류자 또는 회귀 모델을 교육하는 데 더 유용한 정보를 포함할 수 있다고 가정합니다. 그러나 이것이 사실인 이유는 무엇입니까? 이를 이해하기 위해 X1이라는 기능을 살펴보겠습니다. 왼쪽에는 분산이 높은 특성이 있고 특성 값이 잘 분산되어 있습니다. 오른쪽에는 분산이 낮은 특성이 있고 특성 값이 덜 분산되어 있습니다. 분산이 높을수록 해당 기능을 기반으로 결정 경계를 재구성할 수 있습니다. 이는 정확한 예측을 위해 매우 중요합니다. 클래스가 겹치는 최악의 시나리오에서도 잘 분산된 기능은 여전히 결정 경계를 구성하는 데 도움이 될 수 있습니다.

이 개념을 더 자세히 설명하기 위해 이진 분류 사례를 살펴보겠습니다. class square와 class star라는 두 개의 클래스가 있다고 가정합니다. 최상의 시나리오에서 한 클래스의 모든 데이터 요소는 한쪽에 있고 다른 클래스의 모든 데이터 요소는 다른 쪽에 있습니다. 이렇게 하면 클래스를 완벽하게 구분하는 결정 경계를 쉽게 구성할 수 있습니다. 그러나 실제 시나리오에서는 완벽한 분리가 항상 가능한 것은 아닙니다. 클래스가 겹치는 경우에도 분산이 높은 기능은 여전히 결정 경계를 구성하는 데 도움이 될 수 있습니다. 예를 들어 의사 결정 트리는 코딩 예제에서 설명한 것처럼 잘 분산된 기능을 기반으로 데이터 포인트를 정확하게 분류할 수 있습니다.

이제 분산의 중요성을 이해했으므로 특성 선택을 위한 척도로 분산을 사용하는 방법에 대해 논의해 보겠습니다. 이산 랜덤 변수의 분산은 특정 공식을 사용하여 계산할 수 있지만 실제로는 확률 분포를 모르는 데이터 세트로 작업하는 경우가 많습니다. 따라서 균일한 가중치를 가정하고 관찰된 데이터 포인트를 기반으로 분산을 계산합니다. 예를 들어 범주형 기능을 처리할 때 원-핫 인코딩을 수행하여 이진 변수를 만듭니다. 이 경우 Bernoulli 변수의 분산은 p * (1 - p)로 계산할 수 있습니다. 여기서 p는 값 1을 관찰할 확률입니다. 이 분산 계산은 범주형 기능 시나리오에서 기능 선택에 특히 유용합니다.

분산 기반 기능 선택을 구현하기 위해 Scikit-learn은 VarianceThreshold 클래스를 제공합니다. 이 클래스를 사용하면 분산이 적은 기능을 제거할 수 있습니다. 분산 임계값을 지정하면 레이블의 특정 비율이 동일한 기능 열을 제거할 수 있습니다. 예를 들어 레이블의 80% 이상이 유사한 기능을 제거하려는 경우 분산 임계값을 0.16(0.8 * (1 - 0.8)으로 계산)으로 설정할 수 있습니다. 이 임계값은 판별력이 거의 없는 기능이 폐기되도록 합니다.

요약하면 분산 임계값과 같은 필터 방법은 기능의 고유 속성을 고려하기 때문에 기능 선택에 유용합니다. 기능의 분산을 분석하여 분류 또는 회귀 작업에 제한된 정보를 제공하는 기능을 식별하고 제거할 수 있습니다.

 

13.3.1 포함된 특징 선택으로서의 L1 정규화된 로지스틱 회귀(L13: 특징 선택)


13.3.1 포함된 특징 선택으로서의 L1 정규화된 로지스틱 회귀(L13: 특징 선택)

이전 비디오에서는 기능 선택을 위한 다양한 방법, 특히 기능의 속성을 기반으로 하는 필터 방법에 대해 설명했습니다. 이제 포함된 메서드와 래퍼 메서드라는 두 가지 기능 선택 범주를 자세히 살펴보겠습니다. 이 두 범주 모두 기능 선택을 위해 분류자와 같은 모델을 사용하는 것과 관련됩니다. 이 비디오에서는 기능 선택이 모델 교육 또는 최적화 프로세스의 일부로 암시적으로 발생하는 임베디드 방법에 중점을 둘 것입니다.

임베디드 방법은 기능 선택을 모델 교육 프로세스에 통합합니다. Lasso 회귀라고도 하는 L1 정규화 로지스틱 회귀의 맥락에서 이 개념을 살펴보겠습니다. 계속 진행하기 전에 이 비디오는 로지스틱 회귀에 대한 기본 지식이 있다고 가정한다는 점에 유의해야 합니다. 그러나 너무 곁길로 빠지지 않도록 필수 개념만 다룰 것입니다.

꽃잎 길이와 꽃잎 너비라는 두 가지 기능이 있는 Iris 데이터 세트를 사용하여 두 개의 클래스가 있는 이진 로지스틱 회귀 모델을 고려하는 것으로 시작하겠습니다. 로지스틱 회귀는 선형 결정 경계를 생성하여 두 클래스를 구분합니다. 결정 경계는 비선형 변환을 겪는 입력의 가중 합에 임계값을 적용하여 결정됩니다.

로지스틱 회귀를 더 잘 이해하기 위해 모델의 그래픽 표현을 살펴보겠습니다. 이 다이어그램에서 왼쪽에는 가중치(w)가 있고 w1 및 w2는 두 기능의 가중치를 나타냅니다. 또한 절편 항으로 작용하는 편향 단위(B)가 있습니다. 가중 합계는 각 가중치와 해당 기능의 곱과 편향 항을 더한 값의 합으로 계산됩니다. 그런 다음 이 가중 합계는 0과 1 사이의 값을 출력하는 로지스틱 시그모이드라고도 하는 시그모이드 함수를 통해 전달됩니다. 이 값은 클래스 멤버십 확률을 나타내며, 관찰된 기능이 주어진 경우 데이터 포인트가 클래스 1에 속할 확률을 나타냅니다. . 임계값(일반적으로 0.5)을 적용하여 데이터 포인트를 클래스 0 또는 클래스 1로 분류하여 이진 예측을 수행할 수 있습니다.

이제 로지스틱 회귀에 대한 기본적인 이해가 있으므로 L1 정규화 로지스틱 회귀에 초점을 맞추겠습니다. L1-정규화의 주요 측면은 가중치의 크기를 측정하는 L1 규범 항을 포함한다는 것입니다. 이 항은 손실 함수에 추가되어 가중치가 큰 복잡한 모델에 효과적으로 페널티를 줍니다. 로지스틱 회귀에서는 가중치를 최소화하면서 손실 함수를 최소화하는 것을 목표로 합니다.

이를 시각화하기 위해 손실 함수를 나타내는 등고선을 상상해 보십시오. 외부 윤곽선은 큰 손실 값에 해당하는 반면 중앙에 가까운 윤곽선은 더 작은 손실 값을 나타냅니다. 정규화가 없는 손실 함수의 전역 최소값은 중앙에서 발생하며 손실을 최소화하기 위한 최적의 가중치를 나타냅니다. 그러나 L1 페널티 기간은 더 작은 가중치를 선호하고 단순성을 권장합니다. 이 페널티 기간을 도입하여 손실 최소화와 페널티 최소화 간의 균형을 추구합니다. 놀랍게도 L1 정규화된 로지스틱 회귀는 희소 가중치를 생성하는 경향이 있으며 일부 가중치는 정확히 0입니다. 이 기능 선택 측면은 L1 정규화를 매력적으로 만드는 것입니다.

실제로 L1 정규화된 로지스틱 회귀를 시연하기 위해 와인 데이터 세트를 사용합니다. 이 데이터 세트에는 다양한 와인 특성과 관련된 13가지 기능이 포함되어 있으며 작업은 와인을 여러 유형으로 분류하는 것입니다. 데이터를 기계 학습의 일반적인 관행인 교육 및 테스트 세트로 분할하는 것으로 시작합니다.

자세한 코드 예제와 추가 설명은 아래에 제공될 이 비디오와 함께 제공되는 노트북에서 찾을 수 있습니다.

이제 Lasso라고도 하는 L1 정규화 접근 방식을 사용하여 기능 선택 부분으로 이동하겠습니다. scikit-learn의 로지스틱 회귀 모델을 사용하여 L1 정규화 페널티를 적용할 수 있습니다.

 from sklearn.linear_model import LogisticRegression

# Create a Logistic Regression model with L1 regularization
model = LogisticRegression(penalty= 'l1' , solver= 'liblinear' )

# Fit the model on the training data
model.fit(X_train, y_train)

패널티 매개변수를 'l1'로 설정하여 L1 정규화를 사용하도록 지정합니다. 솔버 매개변수는 'liblinear'로 설정되어 있으며, 이는 작업 중인 것과 같은 작은 데이터 세트에 적합합니다.

교육 데이터에 모델을 맞춘 후 각 기능에 할당된 가중치를 나타내는 학습된 계수에 액세스할 수 있습니다. 계수를 인쇄해 보겠습니다.

# Get the learned coefficients
coefficients = model.coef_

# Print the coefficients
for i, coef in enumerate(coefficients[ 0 ]):
    print(f 'Feature {i+1}: {coef:.4f}' )
모델의 coef_ 속성에는 계수가 포함됩니다. 계수를 반복하고 인쇄하여 각 계수를 해당 기능과 연결합니다.

다음으로 계수가 0이 아닌 특징을 식별할 수 있습니다. 이러한 특징은 선택된 특징입니다. 선택한 기능을 찾아 인쇄해 보겠습니다.

# Find the indices of non-zero coefficients
selected_features = [i for i, coef in enumerate(coefficients[ 0 ]) if coef != 0 ]

# Print the selected features
print( 'Selected features:' )
for feature in selected_features:
    print(f 'Feature {feature+1}' )
계수를 다시 반복하여 이번에는 selected_features 목록에 0이 아닌 계수의 인덱스를 저장합니다. 마지막으로 선택한 기능을 인쇄합니다.

L1 정규화를 적용함으로써 로지스틱 회귀 모델은 일부 계수를 0으로 유도하여 암시적으로 기능 선택을 수행합니다. 계수가 0이 아닌 기능은 모델의 예측에 중요한 것으로 간주됩니다.

정규화 매개변수 C의 선택이 적용되는 정규화 정도에 영향을 미친다는 점에 유의하는 것이 중요합니다. C 값이 작을수록 정규화가 더 강해져 잠재적으로 계수가 0인 더 많은 기능이 생성됩니다.

이제 로지스틱 회귀에서 L1 정규화를 사용하는 임베디드 기능 선택 방법을 이해했습니다. 다음 비디오에서는 결정 트리와 랜덤 포레스트를 사용하여 기능 선택을 살펴보겠습니다.

다음 비디오에서는 결정 트리와 랜덤 포레스트를 사용하여 기능 선택을 살펴보겠습니다. 이러한 방법을 앙상블 방법이라고 하며 분류 및 회귀 문제 모두에 사용할 수 있습니다.

의사결정 트리는 기능 공간을 영역으로 분할하고 각 영역에 레이블을 할당하여 예측을 수행하는 간단하면서도 강력한 모델입니다. 반면 랜덤 포레스트는 각 트리가 데이터 및 기능의 임의 하위 집합에 대해 훈련되는 결정 트리의 앙상블입니다.

기능 선택을 위해 scikit-learn의 Random Forest Classifier를 사용하여 시작하겠습니다.

 from sklearn.ensemble import RandomForestClassifier

# Create a Random Forest Classifier
model = RandomForestClassifier()

# Fit the model on the training data
model.fit(X_train, y_train)

교육 데이터에 모델을 맞춘 후 모델 예측에서 각 기능의 상대적 중요도를 나타내는 기능 중요도에 액세스할 수 있습니다. 기능 중요도를 인쇄해 보겠습니다.

# Get the feature importances
importances = model.feature_importances_

# Print the feature importances
for i, importance in enumerate(importances):
    print(f 'Feature {i+1}: {importance:.4f}' )
모델의 feature_importances_ 속성에는 기능 중요도가 포함됩니다. 중요도를 반복하고 인쇄하여 각 중요도를 해당 기능과 연결합니다.

다음으로 중요도에 따라 기능의 순위를 매기고 상위 k 기능을 선택할 수 있습니다. 상위 k 기능을 찾아 인쇄해 보겠습니다.

# Rank the features based on importances
feature_ranks = sorted(range(len(importances)), key=lambda i: importances[i], reverse=True)

# Select the top k features
k = 5   # Number of top features to select
top_features = feature_ranks[:k]

# Print the top features
print(f 'Top {k} features:' )
for feature in top_features:
    print(f 'Feature {feature+1}' )

중요도에 따라 기능의 인덱스를 내림차순으로 정렬합니다. 그런 다음 feature_ranks 목록을 분할하여 상위 k개의 기능을 선택합니다. 마지막으로 최고의 기능을 인쇄합니다.

랜덤 포레스트는 앙상블의 모든 결정 트리에서 각 기능의 평균 기여도를 고려합니다. 중요도가 높을수록 기능이 예측에 더 큰 영향을 미칩니다.

이러한 방식으로 랜덤 포레스트는 중요도 점수를 기반으로 기능 선택을 수행하는 간단한 방법을 제공합니다.

이제 결정 트리와 랜덤 포레스트를 사용한 기능 선택에 대해 이해했습니다. 다음 비디오에서는 재귀적 특징 제거 방법을 다룹니다.

 

13.3.2 결정 트리 및 랜덤 포레스트 기능 중요도(L13: 기능 선택)


13.3.2 결정 트리 및 랜덤 포레스트 기능 중요도(L13: 기능 선택)

안녕하세요, 시청자 여러분! 이전 동영상에서는 정규화된 로지스틱 회귀의 예에 초점을 맞춰 기능 선택을 위한 내장 방법에 대한 논의를 시작했습니다. 오늘은 결정 트리라는 임베디드 방법의 또 다른 예를 살펴보고 각 노드에서 기능을 선택하는 방법을 살펴보겠습니다. 또한 이미 친숙한 개념인 랜덤 포레스트 기능 중요도와의 관계를 탐구합니다. 자, 바로 들어가 봅시다!

하지만 진행하기 전에 작은 발표가 있습니다. 아쉽게도 제 아이패드 펜슬이나 펜이 더 이상 작동하지 않아 펜 태블릿으로 전환했습니다. 하지만 생각보다 적응하기가 조금 어려웠다는 점을 인정해야 합니다. 진정으로 편안하고 능숙해지려면 동영상이 몇 개 더 필요할 수 있습니다. 또한 새로운 화면 주석 소프트웨어를 시험 중이므로 딸꾹질이 있어도 양해해 주십시오. 다음 동영상에서는 주석 처리가 더 원활해졌으면 합니다. 이제 주제에 다시 초점을 맞추겠습니다.

요약하자면, 기능 선택은 필터 방법, 래퍼 방법 및 내장 방법의 세 가지 주요 방법으로 크게 분류할 수 있습니다. 이전 비디오에서는 포함된 방법의 예로 Lasso 또는 L1 정규화된 로지스틱 회귀를 살펴보았습니다. 오늘은 의사결정 트리와 랜덤 포레스트로 관심을 돌립니다.

먼저 의사결정 트리와 이들이 기능 선택을 수행하는 방법에 대해 논의해 보겠습니다. 이를 설명하기 위해 이전에 조사한 데이터 세트를 살펴보겠습니다. x1과 x2의 두 가지 기능과 사각형(클래스 0)과 삼각형(클래스 1)의 두 클래스로 구성됩니다. 우리의 목표는 데이터 포인트를 분류하는 것이며 결정 경계를 두 클래스를 구분하는 구분선으로 시각화할 수 있습니다. 곧 설명하겠지만 여러 결정 경계를 통해 이를 달성할 수 있습니다.

이제 의사 결정 트리가 데이터 세트를 분할하는 방법을 자세히 살펴보겠습니다. 나는 scikit-learn을 사용하여 의사 결정 트리를 훈련하고 플롯했습니다. 이 트리는 두 개의 분할을 나타냅니다. 첫 번째 분할은 특성 x1에서 컷오프 값 5.5로 발생하여 데이터를 두 그룹으로 나눕니다. 두 번째 분할은 기능 x2에서 컷오프 값 10.5로 발생하여 데이터를 추가로 분할합니다. 이러한 분할을 통해 의사 결정 트리는 데이터 세트를 성공적으로 분류합니다. 클래스의 혼합 또는 무질서 수준을 나타내는 엔트로피를 조사하여 이러한 분할의 효율성을 평가할 수 있습니다. 우리의 목표는 엔트로피를 가능한 한 많이 줄이고 이상적으로는 완벽한 분류를 의미하는 0의 값에 도달하는 것입니다. 이 예에서는 각 분할에서 엔트로피가 감소하여 결국 0에 도달하는 것을 관찰합니다.

흥미로운 점은 결정 트리가 본질적으로 기능 선택을 수행한다는 것입니다. 각 노드에서 트리는 분할에 사용할 기능을 결정합니다. 이 결정은 엔트로피 감소를 최대화하거나 정보 획득을 최대화하는 기능을 기반으로 합니다. 결과적으로 의사 결정 트리는 가장 유용한 기능을 자동으로 선택하여 분류 모델을 구성합니다.

이제 결정 트리의 앙상블인 랜덤 포레스트로 초점을 이동해 보겠습니다. 랜덤 포레스트는 기능 중요도를 추정하는 수단을 제공합니다. 이를 시연하기 위해 알코올 함량, 사과산, 회분 등과 같은 와인의 다양한 특성과 관련된 13가지 기능으로 구성된 와인 데이터 세트를 살펴보겠습니다. 오른쪽에서 랜덤 포레스트에 의해 생성된 기능 중요도 플롯을 볼 수 있습니다. 기능 중요도의 범위는 0에서 1까지이고 합계는 1이며 각 기능의 상대적 중요도를 나타냅니다. 플롯은 내림차순으로 정렬되며 가장 중요한 기능은 왼쪽에 있습니다.

이 플롯을 생성하기 위해 랜덤 포레스트 모델을 기반으로 기능 중요도를 계산하는 scikit-learn의 feature_importances_ 속성을 활용했습니다. 관찰할 수 있듯이 이 데이터 세트에서 가장 중요한 특징은 프롤린이고 그 다음이 플라보노이드 및 색상 강도입니다.

기능 중요도 값은 Random Forest의 모든 결정 트리에서 각 기능에 대한 분할에 의해 달성된 불순도(종종 Gini 불순도 또는 엔트로피로 측정됨)의 총 감소를 측정하여 결정됩니다. 지속적으로 불순물을 더 많이 감소시키는 특성이 더 중요한 것으로 간주됩니다.

기능 중요도는 랜덤 포레스트 모델의 컨텍스트 내에서 상대적인 척도라는 점에 유의해야 합니다. 값은 훈련한 랜덤 포레스트에 따라 다르며 다른 모델이나 데이터 세트에 일반화되지 않을 수 있습니다. 그러나 여전히 예측을 수행하는 데 가장 큰 영향을 미치는 기능에 대한 귀중한 통찰력을 제공할 수 있습니다.

이제 의사 결정 트리와 랜덤 포레스트를 다루었으므로 지금까지 배운 내용을 요약해 보겠습니다. 결정 트리는 엔트로피를 줄이고 분류를 개선하는 것을 목표로 각 분할에서 가장 유익한 기능을 선택하여 암시적으로 기능 선택을 수행합니다. 반면, 랜덤 포레스트는 결정 트리의 앙상블로서 모든 트리에서 각 기능이 달성한 불순도의 총 감소를 평가하여 기능 중요도를 측정합니다.

기능 중요도를 이해하면 다양한 방식으로 도움이 될 수 있습니다. 대상 변수를 예측하는 데 가장 관련성이 높은 기능을 식별하는 데 도움이 되고, 가장 유익한 기능에 집중하여 차원 축소를 허용하고, 기능과 대상 변수 간의 기본 관계에 대한 통찰력을 제공합니다.

이제 랜덤 포레스트에서 기능 중요도를 평가하는 프로세스에 대해 자세히 살펴보겠습니다. 순열 중요도라는 방법을 살펴보겠습니다. 그러나 그 전에 부트스트랩 샘플링과 외부 샘플의 개념을 간단히 다시 살펴보겠습니다.

부트스트랩 샘플링은 원본 데이터 세트를 대체하여 무작위로 샘플링하여 데이터 포인트가 중복되게 합니다. 결과적으로 일부 예제는 부트스트랩 샘플에 포함되지 않아 out-of-bag 샘플을 생성합니다. 이러한 샘플은 훈련 중에 트리에서 볼 수 없기 때문에 유효성 검사 또는 평가 세트로 사용됩니다.

이제 순열 중요도인 방법 B에 초점을 맞추겠습니다. 앞서 논의한 가방 외부 샘플을 활용합니다. 첫째, 학습 중에 랜덤 포레스트에서 의사 결정 트리의 예측 성능을 평가할 수 있습니다. 각 트리에 대해 검증 또는 해당 트리 전용 테스트 데이터 포인트 역할을 하는 out-of-bag 샘플에 대해 예측을 수행할 수 있습니다.

순열 중요도를 계산하기 위해 우리는 out-of-bag 예제에 대한 원래 특성 값을 포함하는 특성 행렬로 시작합니다. 랜덤 포레스트의 각 결정 트리에 대해 out-of-bag 예제에서 기능 J의 값을 치환합니다. 즉, 클래스 레이블을 변경하지 않고 유지하면서 기능 값을 무작위로 섞습니다.

다음으로, 우리는 순열된 특징 행렬을 사용하여 현재 의사 결정 트리를 사용하여 기본 예제를 예측합니다. 이러한 예측은 순열된 특성 값을 기반으로 하므로 특성 J가 무작위화될 때 모델의 성능을 나타냅니다.

순열된 예측을 각 기본 예에 대한 원래 예측과 비교하고 특성 J의 순열로 인해 올바른 클래스 예측이 변경되는 횟수를 계산합니다. 이 수는 특성 J가 모델의 정확도에 미치는 영향을 반영합니다. 특성 J가 중요한 경우 해당 값을 치환하면 예측 정확도가 크게 감소해야 합니다.

데이터 세트의 각 기능에 대해 이 프로세스를 반복하여 각 기능이 모델의 정확도에 미치는 영향을 계산합니다. 기능의 순열이 예측에 더 많은 영향을 미칠수록 더 중요하게 간주됩니다.

기능 중요도를 정량화하기 위해 각 기능을 치환하여 발생하는 정확도 감소를 계산합니다. 이는 원래 정확도에서 순열 정확도를 빼고 랜덤 포레스트의 모든 결정 트리에 대해 이 차이를 평균화하여 수행됩니다.

마지막으로 기능 중요도 값을 정규화하여 합계가 1이 되도록 기능 간의 상대적 중요성 측정을 제공합니다. 이 정규화를 통해 중요도 값을 비교할 수 있고 해석할 수 있습니다.

그러나 순열 중요도 방법에는 몇 가지 제한 사항과 고려 사항이 있음을 인식하는 것이 중요합니다.

첫째, 순열 중요도는 상관된 기능의 중요도를 과소평가할 수 있습니다. 하나의 기능을 치환하면 다른 상관 기능에 대한 예측이 변경될 수 있습니다. 결과적으로 상관 관계가 있는 특성의 중요도가 특성 중요도 플롯에 정확하게 반영되지 않을 수 있습니다. 중요도를 해석할 때 기능 간의 상관 관계를 고려하는 것이 중요합니다.

둘째, 순열 중요도는 기능 중요도가 전적으로 모델의 예측 정확도에 기반한다고 가정합니다. 예측 정확도는 중요한 요소이지만 기능 중요도의 모든 측면을 포착하지 못할 수 있습니다. 기능의 해석 가능성 또는 도메인 지식 관련성과 같은 다른 차원의 중요성이 있을 수 있습니다.

이러한 제한에도 불구하고 순열 중요도는 기능 중요도에 대한 귀중한 양적 측정을 제공합니다. 이를 통해 연구자와 실무자는 어떤 기능이 모델의 예측에 가장 큰 영향을 미치는지 이해할 수 있으며 기능 선택, 모델 해석 및 차원 감소와 관련된 결정을 안내할 수 있습니다.

다음 비디오에서는 래퍼 방법이라는 또 다른 범주의 기능 선택 방법을 살펴보겠습니다. 래퍼 방법에는 특정 기계 학습 모델을 사용하여 기능의 다양한 하위 집합을 평가하는 작업이 포함됩니다. 재귀적 특징 제거와 앞으로/뒤로 특징 선택에 대해 자세히 알아볼 것입니다. 이러한 방법은 기능 수가 많고 가장 관련성이 높은 하위 집합을 선택하는 것이 모델 성능에 중요할 때 특히 유용할 수 있습니다.

요약하자면, 특징 선택을 위한 기술로서 포함된 방법, 특히 결정 트리 및 랜덤 포레스트를 다루었습니다. 결정 트리는 엔트로피를 줄이고 분류를 개선하는 것을 목표로 각 분할에서 가장 유익한 기능을 선택하여 암시적으로 기능 선택을 수행합니다. 결정 트리의 앙상블인 랜덤 포레스트는 모든 트리에서 각 기능이 달성한 불순도의 총 감소를 평가하여 기능 중요도를 측정합니다. 또한 특성 값을 치환하고 모델의 정확도에 미치는 영향을 측정하여 특성 중요도를 정량화하는 순열 중요도 방법에 대해서도 논의했습니다.

기능 중요도를 이해하면 데이터 과학자와 실무자가 기능 선택에 대해 정보에 입각한 결정을 내리고, 모델을 해석하고, 기능과 대상 변수 사이의 기본 관계에 대한 통찰력을 얻을 수 있습니다. 더 나은 모델 성능과 이해에 기여할 수 있는 기계 학습 도구 키트의 귀중한 도구입니다.

이전 동영상에서는 필터 방법, 래퍼 방법 및 포함된 방법을 포함하여 기능 선택을 위한 다양한 방법을 다뤘습니다. 이 비디오에서는 래퍼 방법, 특히 재귀적 특징 제거(RFE) 및 정방향/역방향 특징 선택에 중점을 둘 것입니다.

래퍼 방법은 특정 기계 학습 모델을 사용하여 기능의 다양한 하위 집합을 평가하는 것과 관련된 기능 선택 기술입니다. 통계 측정에 의존하는 필터 방법 및 기능 선택을 모델 교육 프로세스에 통합하는 내장 방법과 달리 래퍼 방법은 모델의 성능을 기능 선택 기준으로 사용합니다.

재귀적 특징 제거(RFE)에 대해 논의하는 것으로 시작하겠습니다. RFE는 기능을 반복적으로 제거하고 나머지 기능에 대한 모델을 구축하여 작동하는 반복 기능 선택 접근 방식입니다. 전체 기능 세트에서 모델을 교육하는 것으로 시작하여 중요도에 따라 기능의 순위를 매깁니다. 그런 다음 가장 중요하지 않은 기능을 제거하고 나머지 기능으로 프로세스를 반복합니다. 이 반복 프로세스는 지정된 기능 수에 도달하거나 미리 정의된 성능 임계값에 도달할 때까지 계속됩니다.

RFE의 기본 아이디어는 덜 중요한 기능을 재귀적으로 제거하여 모델 성능에 가장 많이 기여하는 가장 유익한 기능에 초점을 맞추는 것입니다. RFE는 기능 중요도 또는 기능 가중치를 측정하는 모든 기계 학습 모델과 함께 사용할 수 있습니다. RFE와 함께 사용되는 인기 있는 모델에는 로지스틱 회귀, 지원 벡터 머신 및 랜덤 포레스트가 포함됩니다.

이제 앞으로/뒤로 기능 선택으로 이동하겠습니다. 이들은 모델 성능에 대한 기여도에 따라 기능을 반복적으로 추가하거나 제거하여 기능의 최적 하위 집합을 검색하는 두 가지 관련 래퍼 방법입니다.

전방 기능 선택은 빈 기능 세트로 시작하여 한 번에 하나의 기능을 반복적으로 추가합니다. 각 반복에서 교차 유효성 검사 또는 다른 평가 메트릭을 사용하여 모델의 성능을 평가하고 성능을 가장 향상시키는 기능을 선택합니다. 이 프로세스는 원하는 기능 수에 도달하거나 성능 향상의 정점에 도달하는 것과 같이 미리 정의된 중지 기준이 충족될 때까지 계속됩니다.

반면 역방향 기능 선택은 전체 기능 세트로 시작하여 한 번에 하나의 기능을 반복적으로 제거합니다. 각 반복에서 모델의 성능을 평가하고 성능에 가장 적은 영향을 미치는 기능을 제거합니다. 중지 기준이 충족될 때까지 프로세스가 계속됩니다.

순방향 및 역방향 기능 선택은 특히 많은 수의 기능을 처리할 때 계산 비용이 많이 들 수 있습니다. 이를 완화하기 위해 휴리스틱 또는 근사를 사용하여 검색 프로세스 속도를 높이는 것과 같은 다양한 전략을 사용할 수 있습니다.

RFE, 순방향 선택 및 역방향 선택을 포함한 래퍼 방법은 사용된 평가 메트릭 및 기계 학습 모델의 선택에 민감할 수 있다는 점은 주목할 가치가 있습니다. 다른 평가 메트릭은 선택한 기능의 다른 하위 집합으로 이어질 수 있으며 선택한 기능의 성능은 모델마다 다를 수 있습니다.

실제로 교차 검증을 수행하거나 외부 검증 세트를 사용하여 다양한 기능 하위 집합으로 모델의 성능에 대한 강력한 추정치를 얻는 것이 좋습니다. 이는 과적합을 방지하고 보이지 않는 데이터에 잘 일반화되는 기능을 선택하는 데 도움이 됩니다.

요약하면 RFE(재귀적 특징 제거), 순방향 특징 선택 및 역방향 특징 선택과 같은 래퍼 방법은 모델의 성능을 기반으로 기능의 여러 하위 집합을 평가하는 기능 선택을 위한 반복적인 기술입니다. 이러한 방법은 특정 기계 학습 작업에 가장 관련성이 높은 기능을 식별하고, 모델 해석 가능성을 개선하고, 기능 공간의 차원을 줄이는 데 도움이 될 수 있습니다.

다음 비디오에서는 유전 알고리즘 및 주성분 분석(PCA)을 포함하여 기능 선택을 위한 다른 고급 기술을 살펴보겠습니다. 이러한 방법은 다양한 최적화 원칙과 통계 기법을 기반으로 기능을 선택하기 위한 추가 옵션을 제공합니다. 계속 지켜봐주세요!

기능 선택은 기계 학습 파이프라인의 중요한 단계이며 올바른 기능 선택 방법의 선택은 특정 데이터 세트, 기계 학습 작업 및 모델 성능, 해석 가능성 및 계산 효율성 간의 원하는 절충점에 따라 달라집니다.

13.3.2 Decision Trees & Random Forest Feature Importance (L13: Feature Selection)
13.3.2 Decision Trees & Random Forest Feature Importance (L13: Feature Selection)
  • 2021.12.22
  • www.youtube.com
This video explains how decision trees training can be regarded as an embedded method for feature selection. Then, we will also look at random forest feature...
 

13.4.1 재귀적 특징 제거(L13: 특징 선택)


13.4.1 재귀적 특징 제거(L13: 특징 선택)

이 섹션에서는 필터 방법 및 포함된 방법에 대한 이전 논의를 바탕으로 기능 선택을 위한 래퍼 방법 주제를 살펴보겠습니다. 래퍼 방법은 기능 선택을 위해 명시적으로 모델을 사용합니다. 래퍼 방법의 한 가지 인기 있는 예는 재귀적 특징 제거(RFE)이며, 이 비디오에서 중점적으로 다룰 것입니다. 또한 향후 동영상에서 래퍼 기술을 사용하는 다른 기능 선택 방법에 대해서도 자세히 알아볼 것입니다.

개요를 제공하기 위해 기능 선택을 위한 세 가지 주요 방법인 필터 방법, 내장 방법 및 래퍼 방법이 있습니다. 오늘날 우리의 초점은 래퍼 방법에 있습니다. RFE의 핵심 아이디어는 세 단계로 요약할 수 있습니다.

먼저 선형 회귀 또는 로지스틱 회귀와 같은 선형 모델을 사용하여 모델을 데이터 세트에 적합시킵니다. 이 단계는 평범하지 않습니다.

다음으로, 우리는 모델을 검사하고 구체적으로 모델 계수를 살펴봅니다. 이에 대해서는 곧 자세히 설명하겠습니다. 이러한 계수의 크기에 따라 계수가 가장 작은 특징을 제거합니다. 계수가 가장 작은 특성을 가장 중요하지 않은 것으로 간주하여 추가 고려에서 제거할 수 있습니다. 기능의 정규화 또는 표준화가 이 프로세스에 중요하다는 점은 주목할 가치가 있습니다. 이에 대한 구체적인 예는 나중에 살펴보겠습니다.

마지막 단계는 원하는 기능 수에 도달할 때까지 1단계와 2단계를 반복하는 것입니다. 본질적으로 우리는 원하는 기능 세트를 얻을 때까지 계속해서 모델을 맞추고 가장 중요하지 않은 기능을 제거합니다. 이 간단하면서도 효과적인 방법은 기능 선택에 대한 간단한 접근 방식을 제공합니다.

재귀적 특징 제거의 중요한 측면 중 하나는 모델 계수 또는 가중치를 제거하는 것입니다. 이를 설명하기 위해 선형 회귀 및 로지스틱 회귀 모델을 고려해 보겠습니다. 선형 회귀는 연속 대상을 모델링하는 데 사용되는 반면 로지스틱 회귀는 불연속 또는 범주 레이블에 대한 분류자입니다. 이전 강의에서 다루었으므로 여기서는 이러한 모델에 대해 자세히 다루지 않습니다.

선형 및 로지스틱 회귀 모두에서 모델에는 계수 또는 가중치가 있습니다. 선형 회귀에서 이러한 가중치는 기울기를 나타내는 반면 로지스틱 회귀에서는 분류 결과에 대한 각 기능의 영향과 연관됩니다. 이러한 가중치의 크기를 조사하여 각 기능의 중요성을 결정할 수 있습니다. 가중치나 계수가 가장 작은 특성을 제거하면 고려 대상에서 효과적으로 제거됩니다. 또는 가중치를 0으로 설정하면 가중 합계 계산에서 기능의 기여도가 제외되므로 동일한 결과를 얻을 수 있습니다.

기능 제거가 작동하는 방식을 더 잘 이해하기 위해 로지스틱 회귀를 사용하는 예를 살펴보겠습니다. 우리는 x1과 x2라는 두 가지 특성을 가진 이진 분류 문제가 있고 클래스 소속 확률을 결정하려고 합니다. 특성 값과 모델 가중치를 사용하여 가중 합계를 계산하여 순 입력을 얻습니다. 순수 입력에 로지스틱 시그모이드 함수를 적용하여 클래스 소속 확률을 도출합니다. 이 확률을 임계값(일반적으로 0.5)과 비교하면 클래스 레이블을 할당할 수 있습니다.

중요한 점은 이러한 모델의 가중치가 각 기능의 중요성을 반영한다는 것입니다. 가중치가 클수록 순 입력에 더 크게 기여하고 이후 분류 결과에 영향을 미치므로 더 큰 중요성을 나타냅니다. 가중치를 표준화하거나 정규화하면 가중치가 동일한 척도에 있도록 하여 중요도를 더 잘 해석할 수 있습니다.

계속해서 와인 데이터 세트를 사용하여 scikit-learn에서 재귀적 특징 제거를 사용하는 예를 살펴보겠습니다. 여기에 제시된 코드는 프로세스를 보여줍니다. 먼저 훈련 세트와 테스트 세트로 분할하여 데이터 세트를 준비한 다음 기능을 표준화합니다. 그런 다음 scikit-learn의 RFE 클래스에서 RFE 개체를 인스턴스화합니다. 로지스틱 회귀 추정기를 RFE 개체에 전달하고 선택할 기능의 원하는 수를 지정합니다(예: 이 경우 5).

RFE 개체를 인스턴스화한 후에는 fit 메서드를 사용하여 훈련 데이터에 맞출 수 있습니다. 그러면 재귀 기능 제거 프로세스가 시작됩니다. RFE 개체는 학습 데이터에 대한 로지스틱 회귀 모델을 학습한 다음 계수가 가장 작은 기능을 제거합니다. 원하는 기능 수에 도달할 때까지 이 프로세스를 반복적으로 반복합니다.

RFE 개체를 맞춘 후 support_ 속성을 사용하여 선택한 기능에 액세스할 수 있습니다. 이 속성은 선택된 기능을 나타내는 부울 마스크를 반환합니다. 또한 rank_ 속성을 사용하여 중요도에 따라 기능의 순위를 얻을 수 있습니다. 순위가 낮을수록 기능이 더 중요합니다.

다음 단계에서는 RFE 개체의 변환 방법을 사용하여 선택한 기능만 포함하도록 원본 훈련 데이터와 테스트 데이터를 변환할 수 있습니다. 이렇게 하면 선택한 기능만으로 새 기능 세트가 생성됩니다.

마지막으로 변환된 훈련 데이터에 대한 로지스틱 회귀 모델을 훈련하고 변환된 테스트 데이터에 대한 성능을 평가할 수 있습니다. 이를 통해 기능 선택 프로세스의 효율성을 평가하고 모델의 예측 정확도가 개선되었는지 확인할 수 있습니다.

선택할 기능의 수와 단계 크기는 특정 데이터 세트 및 모델에 대한 최적의 구성을 찾기 위해 조정할 수 있는 하이퍼 매개변수라는 점은 주목할 가치가 있습니다. 그리드 검색 또는 기타 하이퍼파라미터 최적화 기술을 사용하여 이러한 파라미터의 최상의 조합을 찾을 수 있습니다.

전반적으로 재귀적 특징 제거는 모델 교육에 의존하고 가장 중요하지 않은 특징을 반복적으로 제거하는 특징 선택을 위한 래퍼 방법입니다. 회귀 및 분류 문제 모두에 적용할 수 있으며 다양한 유형의 모델과 함께 사용할 수 있습니다. 기능 선택은 모델이 기능에 할당한 계수 또는 가중치를 기반으로 합니다. 가장 중요하지 않은 기능을 반복적으로 제거함으로써 RFE는 가장 유익한 기능에 집중하여 모델 성능을 향상시키는 것을 목표로 합니다.

13.4.1 Recursive Feature Elimination (L13: Feature Selection)
13.4.1 Recursive Feature Elimination (L13: Feature Selection)
  • 2021.12.27
  • www.youtube.com
In this video, we start our discussion of wrapper methods for feature selection. In particular, we cover Recursive Feature Elimination (RFE) and see how we c...
 

13.4.2 특징 순열의 중요성(L13: 특징 선택)


13.4.2 특징 순열의 중요성(L13: 특징 선택)

순열의 중요성에 대해 자세히 알아볼 이 비디오에 오신 것을 환영합니다. 순열 중요도는 이전 비디오에서 간략하게 논의한 기능 선택을 위한 래퍼 방법의 일부입니다. 래퍼 방법에는 모델을 사용하여 기능 선택을 수행하거나 기능 중요도를 추정하는 작업이 포함됩니다. 이전 강의에서 래퍼 방식의 예로 재귀적 특징 제거를 살펴보았습니다. 이제 우리는 순열 중요도로 초점을 옮길 것입니다. 다음 비디오에서는 순차 기능 선택이라는 또 다른 방법도 살펴보겠습니다.

순열 중요도가 작동하는 방식에 대한 핵심 세부 정보를 살펴보기 전에 방법에 대한 간략한 개요를 제공하겠습니다. 본질적으로 순열 중요도에는 데이터 세트의 각 기능 열을 섞는 것이 포함됩니다. 그런 다음 이미 훈련된 모델을 사용하여 섞인 데이터 세트에서 모델의 성능을 평가하고 이를 원래 성능과 비교합니다. 일반적으로 기능 열이 섞일 때 성능 저하가 관찰됩니다. 이러한 성능 저하는 기능의 중요성을 나타내는 지표 역할을 합니다. 물론 방법을 두 단계로 요약하면 다소 복잡해 보일 수 있으므로 다음 슬라이드에서는 프로세스를 보다 자세하고 느리게 안내합니다.

데이터 세트의 각 열에 순열 중요도를 적용하여 각 기능의 중요도를 나타내는 막대 그래프를 생성할 수 있습니다. 또한 플롯에 중요도 값의 표준 편차를 선택적으로 포함할 수 있습니다. 다음 비디오에서는 이러한 플롯을 만드는 방법에 대한 코드 예제를 제공합니다.

이제 순열 중요도와 그 배후의 알고리즘에 대한 자세한 설명을 살펴보기 전에 주목할만한 몇 가지 사실을 살펴보겠습니다. 순열 중요도는 종종 불순도를 기반으로 하는 랜덤 포레스트 기능 중요도와 유사한 결과를 생성합니다. 그러나 순열 중요도의 장점은 모델에 구애받지 않는다는 것입니다. 즉, 모든 유형의 기계 학습 알고리즘 또는 모델과 함께 사용할 수 있습니다. 순열 중요도는 엄격하게 기능 선택 방법이 아니지만 모델이 가장 많이 의존하는 기능에 대한 통찰력을 제공한다는 점에 유의해야 합니다. 결과적으로 기능 중요도 측정을 기능 선택의 기준으로 사용할 수 있습니다.

랜덤 포레스트 기능 중요도에 대한 이전 논의를 기억한다면 순열 중요도를 해당 비디오에서 방법 중 하나, 특히 방법 B의 일반화로 생각할 수 있습니다. 그러나 순열 중요도는 out-of-bag 샘플을 사용하는 대신 홀드아웃 세트를 사용합니다. 기본 예제에 대한 복습이 필요한 경우 이전 비디오를 다시 방문하십시오.

이제 순열 중요도의 단계별 알고리즘에 대해 살펴보겠습니다. 먼저 훈련 세트에 맞는 모델로 시작합니다. 이 모델은 모든 기계 학습 모델 또는 알고리즘이 될 수 있습니다. 예를 들어 랜덤 포레스트 분류기를 생각해 봅시다. 표준 단계인 트레이닝 세트에서 랜덤 포레스트를 트레이닝합니다.

다음으로 검증 세트 또는 테스트 세트와 같은 독립적인 데이터 세트에서 모델의 예측 성능을 추정합니다. 이 성능을 기준 성능으로 기록합니다. 예를 들어, 적합한 랜덤 포레스트 모델을 사용하여 검증 세트에서 99%의 정확도를 달성했다고 가정해 보겠습니다. 우리는 이것을 기본 성능으로 간주합니다.

데이터 세트의 각 기능 열에 대해 다른 열과 클래스 레이블은 변경되지 않은 상태로 유지하면서 해당 특정 열을 무작위로 섞습니다. 이 셔플링 프로세스는 예제 데이터 세트와 함께 설명됩니다. 3개의 특성 열과 4개의 학습 예제가 있는 데이터 세트가 있다고 가정합니다. 예제에서 다른 색으로 표시되는 열 1을 섞는 데 중점을 둡니다. 섞은 후 해당 열의 값 순서가 변경됩니다. 2열과 3열의 원래 값을 유지하면서 임의로 값을 치환합니다.

순열 중요도의 또 다른 장점은 상관 관계가 있는 기능을 잘 처리할 수 있다는 것입니다. 값을 섞음으로써 각 기능의 중요성을 개별적으로 평가하기 때문에 다른 기능과의 상관 관계에 관계없이 모델 성능에 대한 각 기능의 고유한 기여도를 포착합니다. 이는 상호 관련된 기능이 있는 고차원 데이터 세트가 있는 시나리오에서 특히 유용합니다.

순열 중요도는 일부 모델에서 제공하는 고유한 기능 중요도보다 더 신뢰할 수 있는 기능 중요도 측정도 제공합니다. 예를 들어, 의사 결정 트리 또는 랜덤 포레스트에서 기능의 중요성은 데이터를 분할할 때 달성되는 불순도 감소를 기반으로 합니다. 그러나 이 측정은 가능한 많은 분할이 있는 기능 또는 트리 구조에서 더 높게 나타나는 기능으로 편향될 수 있습니다. 순열 중요도는 각 기능 셔플링의 영향을 직접 평가하여 기능 중요도에 대한 보다 직접적이고 편향되지 않은 추정치를 제공합니다.

단점으로, 특히 모델 학습 프로세스에 시간이 많이 걸리거나 많은 수의 기능이 있는 경우 순열 중요도에 계산 비용이 많이 들 수 있습니다. 순열 프로세스는 모델의 성능을 여러 번 재평가해야 하므로 상당한 오버헤드를 추가할 수 있습니다. 그러나 병렬 컴퓨팅을 사용하거나 순열 수를 줄이는 등 이 문제를 완화하는 데 도움이 될 수 있는 최적화 기술 및 병렬화 전략이 있습니다.

순열 중요도가 기능 선택 또는 모델 해석을 위한 묘책이 아니라는 점은 주목할 가치가 있습니다. 개별 기능의 중요성에 대한 귀중한 통찰력을 제공하지만 다른 기술 및 도메인 지식과 함께 사용해야 합니다. 기능 중요도만으로는 기능의 예측력이나 관련성을 보장하지 않습니다. 컨텍스트, 특정 문제 및 모델의 한계를 고려하는 것이 중요합니다.

요약하면 순열 중요도는 기계 학습 모델에서 기능의 중요도를 평가하기 위한 강력하고 모델에 구애받지 않는 방법입니다. 특성 값을 섞고 섞기 전후의 모델 성능을 비교하여 특성 중요도에 대한 신뢰할 수 있는 측정값을 제공합니다. 이해하기 쉽고 상관 관계가 있는 기능을 잘 처리하며 과적합에 취약하지 않습니다. 그러나 계산 비용이 많이 들 수 있으며 포괄적인 기능 선택 및 모델 해석을 위해 다른 기술과 함께 사용해야 합니다.

13.4.2 Feature Permutation Importance (L13: Feature Selection)
13.4.2 Feature Permutation Importance (L13: Feature Selection)
  • 2021.12.29
  • www.youtube.com
This video introduces permutation importance, which is a model-agnostic, versatile way for computing the importance of features based on a machine learning c...
 

13.4.3 특징 순열 중요도 코드 예(L13: 특징 선택)


13.4.3 특징 순열 중요도 코드 예(L13: 특징 선택)

이제 순열 중요도에 대한 기본 소개를 다루었으므로 순열 중요도를 실제로 사용하는 방법을 알아보기 위해 몇 가지 코드 예제를 살펴보겠습니다. 예, 그리고 항상 그렇듯이 비디오 아래에 링크된 Jupyter 노트북의 코드 예제도 있습니다. 또한 언제나와 달리 간단하게 유지하기 위해 바람 데이터 세트로 다시 작업할 것입니다.

따라서 바람 데이터 세트는 다시 13개의 열로 구성된 데이터 세트입니다. 다음은 처음 5개 행이 어떻게 생겼는지에 대한 개요입니다. 따라서 1급, 2급, 3급의 세 가지 등급이 있습니다. 그리고 13개의 열이 있지만 공간 제약으로 인해 여기에 모든 열이 표시되지는 않습니다. 하지만 예, 우리는 이 바람 데이터 세트를 이전에 너무 많이 보았기 때문에 너무 자세하게 논의하지 않을 것입니다.

예, 그리고 항상 그렇듯이 데이터 세트를 훈련 세트와 테스트 세트로 분할할 것입니다. 그래서 여기서 우리가 하는 일은 라벨 열인 첫 번째 열을 제외한 데이터 세트를 가져오는 것입니다. 따라서 데이터 세트를 교육용과 테스트용으로 분할하여 데이터의 30%를 테스트에 사용하고 70%를 교육용으로 사용할 것입니다. 검증 세트를 생성하지 않는다는 점에 유의하십시오. 제 개인적인 의견일 뿐입니다. 하지만 순열 성능을 계산하는 경우 반드시 검증 세트가 필요하다고 생각하지 않습니다. 일반적으로 테스트 세트를 독립적으로 유지해야 하기 때문입니다. 그러나 이전 비디오를 기반으로 순열 성능이 작동하는 방식을 다시 생각해 보면 여기에서는 기능 열을 순열할 때 성능 저하만 보고 있습니다. 따라서 실제로 테스트 정확도를 다시 계산하는 것이 아니라 열을 섞을 경우 성능이 얼마나 떨어질지 확인하기 위해 테스트 세트를 사용하는 것뿐입니다.

예, 여기에서는 아직 설정 단계에 있습니다. 여기 이 슬라이드에서는 모델을 준비하고 있습니다. 그리고 사실, 이것은 랜덤 포레스트 분류기입니다. 그래서 이전 비디오에서 우리는 순열 중요도가 모델에 구애받지 않는 방법이라는 것을 배웠습니다. 즉, 모든 유형의 모델에 대해 계산할 수 있습니다. 그러나 여기서는 랜덤 포레스트를 사용하여 순열 중요도를 랜덤 포레스트 불순도 기반 성능과 비교할 수 있으며 이는 흥미로운 비교가 될 수 있습니다. 그래서 여기서 우리는 100개의 나무를 가진 임의의 숲 분류기를 설정하고 있습니다. 그리고 우리는 그것을 훈련 세트에 맞추고 있습니다. 그리고 여기에 정확도 계산이 있습니다. 훈련 정확도가 100%이고 테스트 정확도도 100%라는 것을 알 수 있습니다. 이는 이것이 실제로 꽤 좋은 모델임을 나타내거나 데이터 세트가 분류하기 매우 쉽다는 것을 나타낼 수도 있습니다.

여기서 주목하고 싶은 한 가지는 순열 중요도를 계산할 때 기능 중요도를 일반적인 기능 중요도로 해석하려면 매우 우수한 성능의 모델을 갖는 것이 중요하다는 것입니다. 잘 수행되는 모델이 없는 경우 모델이 가장 의존하는 기능을 찾을 수 있지만 대상 변수의 컨텍스트에서 기능이 얼마나 중요한지는 실제로 알려주지 않습니다. 모델이 매우 정확하지 않은 경우. 따라서 순열 중요도를 살펴보기 전에 참조용으로 다시 불순물 기반 중요도가 있습니다. 따라서 이것은 이전 비디오에서 이미 논의한 랜덤 포레스트 불순물 기반 중요도입니다. 다시 말하지만 이것은 모델을 피팅한 후 이 기능 중요도 속성에 액세스하는 참조용입니다.

그런 다음 arg_sort를 적용하여 가장 큰 값에서 가장 작은 값으로 중요도 값의 정렬 순서를 얻습니다. 따라서 가장 큰 것부터 가장 작은 것까지. 그리고 우리가 하는 일은 불순도 기반 중요도를 시각화하기 위해 막대 그래프를 만드는 것입니다. 막대 그래프는 x축에 기능 이름을 표시하고 y축에 해당 중요도 값을 표시합니다. 중요도 값을 내림차순으로 정렬하면 가장 중요한 기능이 먼저 표시됩니다.

다음으로 코드는 순열 중요도 계산으로 이동합니다. 순열 중요도는 테스트 세트의 각 기능 값을 무작위로 섞고 모델의 성능 저하를 측정하여 계산됩니다. 성능 저하가 높을수록 기능이 더 중요한 것으로 간주됩니다. 이 코드는 for 루프를 사용하여 데이터 세트의 각 기능을 반복합니다.

루프 내에서 테스트 세트의 기능 값은 np.random.permutation()을 사용하여 섞입니다. 그런 다음 셔플된 테스트 세트는 훈련된 랜덤 포레스트 분류기를 통과하여 예측된 레이블을 얻습니다. 섞인 테스트 세트에 대한 모델의 정확도는 정확도_score() 함수를 사용하여 계산됩니다. 원래 테스트 정확도와 셔플된 테스트 정확도 간의 차이는 기능 순열로 인한 성능 저하를 나타냅니다.

각 기능의 성능 저하가 중요도_값이라는 목록에 저장됩니다. 모든 기능을 반복한 후 Important_vals 목록에는 각 기능에 대한 성능 저하 값이 포함됩니다.

마지막으로 순열 중요도를 시각화하기 위해 막대 그래프가 생성됩니다. 기능 이름은 x축에 표시되고 성능 값의 해당 하락은 y축에 표시됩니다. 다시 말하지만 중요도 값은 내림차순으로 정렬되어 가장 중요한 기능을 강조 표시합니다.

이 코드는 불순물 기반 중요도와 순열 중요도를 비교합니다. 두 플롯을 비교하여 두 방법 사이의 기능 중요도 순위에 차이가 있는지 관찰할 수 있습니다.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Create a random forest classifier
clf = RandomForestClassifier(n_estimators= 100 , random_state= 42 )
clf.fit(X, y)

# Compute impurity-based feature importances
importances = clf.feature_importances_

# Plot impurity-based feature importances
plt.figure(figsize=( 8 , 6 ))
plt.bar(range(X.shape[ 1 ]), importances, align= 'center' )
plt.xticks(range(X.shape[ 1 ]), iris.feature_names, rotation= 90 )
plt.xlabel( 'Features' )
plt.ylabel( 'Importance' )
plt.title( 'Impurity-based Feature Importances' )
plt.show()

# Compute permutation importances
importance_vals = []
for feature in range(X.shape[ 1 ]):
    X_permuted = X.copy()
    np.random.shuffle(X_permuted[:, feature])
    y_pred = clf.predict(X_permuted)
    accuracy = accuracy_score(y, y_pred)
    drop_in_performance = accuracy_score(y, y_pred) - accuracy
    importance_vals.append(drop_in_performance)

# Plot permutation importances
plt.figure(figsize=( 8 , 6 ))
plt.bar(range(X.shape[ 1 ]), importance_vals, align= 'center' )
plt.xticks(range(X.shape[ 1 ]), iris.feature_names, rotation= 90 )
plt.xlabel( 'Features' )
plt.ylabel( 'Drop in Performance' )
plt.title( 'Permutation Importances' )
plt.show()
이 코드는 두 개의 막대 그래프를 나란히 생성합니다. 첫 번째 플롯은 불순물 기반 기능 중요도를 표시하고 두 번째 플롯은 순열 중요도를 표시합니다. 이러한 플롯을 검토하면 이 두 가지 방법에 따라 Iris 데이터 세트에서 서로 다른 기능의 상대적 중요성에 대한 통찰력을 얻을 수 있습니다.

matplotlib, numpy, sklearn.ensemble.RandomForestClassifier, sklearn.datasets.load_iris 및 sklearn.metrics.accuracy_score와 같은 필수 라이브러리를 가져와야 합니다.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.inspection import permutation_importance
from sklearn.model_selection import train_test_split

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2 , random_state= 42 )

# Create a random forest classifier
clf = RandomForestClassifier(n_estimators= 100 , random_state= 42 )
clf.fit(X_train, y_train)

# Perform permutation importances
result = permutation_importance(clf, X_test, y_test, n_repeats= 10 , random_state= 42 , n_jobs=- 1 )

# Get the feature importances and their indices
importances = result.importances_mean
indices = np.argsort(importances)

# Plot permutation importances
plt.figure(figsize=( 8 , 6 ))
plt.barh(range(X.shape[ 1 ]), importances[indices], align= 'center' )
plt.yticks(range(X.shape[ 1 ]), iris.feature_names[indices])
plt.xlabel( 'Importance' )
plt.ylabel( 'Features' )
plt.title( 'Permutation Importances' )
plt.show()
이 코드에서는 sklearn.inspection 모듈의 permutation_importance 함수를 사용하여 순열 중요도를 계산합니다. 데이터 세트는 train_test_split을 사용하여 학습 및 테스트 세트로 분할됩니다. 그런 다음 훈련 데이터에 랜덤 포레스트 분류기를 맞추고 테스트 데이터를 사용하여 순열 중요도를 계산합니다.

결과 순열 중요도는 중요도 변수에 저장됩니다. np.argsort를 사용하여 중요도를 오름차순으로 정렬하는 인덱스를 얻습니다. 이는 중요도를 올바른 순서로 플로팅하는 데 도움이 됩니다.

마지막으로 plt.barh를 사용하여 순열 중요도를 표시하는 가로 막대 그래프를 만듭니다. y축은 기능을 나타내고 x축은 중요도 값을 나타냅니다. plt.xlabel, plt.ylabel 및 plt.title 함수는 플롯에 레이블과 제목을 추가하는 데 사용됩니다.

matplotlib, numpy, sklearn.ensemble.RandomForestClassifier, sklearn.datasets.load_iris, sklearn.inspection.permutation_importance 및 sklearn.model_selection.train_test_split과 같은 필요한 라이브러리를 가져왔는지 확인하세요.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.inspection import permutation_importance
from sklearn.model_selection import train_test_split

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2 , random_state= 42 )

# Create a random forest classifier
clf = RandomForestClassifier(n_estimators= 100 , random_state= 42 )
clf.fit(X_train, y_train)

# Perform permutation importances
result = permutation_importance(clf, X_test, y_test, n_repeats= 10 , random_state= 42 , n_jobs=- 1 )

# Get the feature importances and their indices
importances = result.importances_mean
indices = np.argsort(importances)

# Plot permutation importances
plt.figure(figsize=( 8 , 6 ))
plt.barh(range(X.shape[ 1 ]), importances[indices], align= 'center' )
plt.yticks(range(X.shape[ 1 ]), iris.feature_names[indices])
plt.xlabel( 'Importance' )
plt.ylabel( 'Features' )
plt.title( 'Permutation Importances' )
plt.show()
이 코드에서는 sklearn.inspection 모듈의 permutation_importance 함수를 사용하여 순열 중요도를 계산합니다. 데이터 세트는 train_test_split을 사용하여 학습 및 테스트 세트로 분할됩니다. 그런 다음 훈련 데이터에 랜덤 포레스트 분류기를 맞추고 테스트 데이터를 사용하여 순열 중요도를 계산합니다.

결과 순열 중요도는 중요도 변수에 저장됩니다. np.argsort를 사용하여 중요도를 오름차순으로 정렬하는 인덱스를 얻습니다. 이는 중요도를 올바른 순서로 플로팅하는 데 도움이 됩니다.

마지막으로 plt.barh를 사용하여 순열 중요도를 표시하는 가로 막대 그래프를 만듭니다. y축은 기능을 나타내고 x축은 중요도 값을 나타냅니다. plt.xlabel, plt.ylabel 및 plt.title 함수는 플롯에 레이블과 제목을 추가하는 데 사용됩니다.

matplotlib, numpy, sklearn.ensemble.RandomForestClassifier, sklearn.datasets.load_iris, sklearn.inspection.permutation_importance 및 sklearn.model_selection.train_test_split과 같은 필수 라이브러리를 가져와야 합니다.

13.4.3 Feature Permutation Importance Code Examples (L13: Feature Selection)
13.4.3 Feature Permutation Importance Code Examples (L13: Feature Selection)
  • 2021.12.30
  • www.youtube.com
This video shows code examples for computing permutation importance in mlxtend and scikit-learn. Permutation importance is a model-agnostic, versatile way fo...
사유: