혼동 행렬 생성

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 분류 모델의 성능을 평가하는 데 필수적인 도구인 혼동 행렬 (confusion matrix) 을 구현하는 방법을 배우게 됩니다. 혼동 행렬은 모델의 예측에 대한 상세한 분석을 제공하여 개선이 필요한 부분을 식별하고 모델의 강점과 약점에 대한 귀중한 통찰력을 얻을 수 있도록 합니다.

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • 분류 문제에 대한 혼동 행렬을 계산하기 위해 confusion_matrix 함수를 구현하는 방법
  • 엣지 케이스를 처리하고 견고성을 향상시키기 위해 confusion_matrix 함수를 테스트하고 개선하는 방법
  • confusion_matrix 함수를 사용자 친화적이고 이해하기 쉽게 문서화하는 방법
  • confusion_matrix 함수를 더 큰 머신 러닝 프로젝트에 통합하고 이를 사용하여 분류 모델의 성능을 평가하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • 분류 문제에 대한 혼동 행렬을 계산하고 해석할 수 있습니다.
  • 엣지 케이스를 처리하고 함수의 견고성을 향상시키기 위한 기술을 적용할 수 있습니다.
  • 코드를 사용자 친화적으로 만들기 위한 문서화 모범 사례를 구현할 수 있습니다.
  • 더 큰 머신 러닝 프로젝트의 맥락에서 혼동 행렬을 적용할 수 있습니다.

혼동 행렬 함수 구현

이 단계에서는 confusion_matrix.py 파일에 confusion_matrix 함수를 구현합니다. 이 함수는 분류 문제에 대한 혼동 행렬을 계산합니다.

confusion_matrix 함수는 세 가지 입력을 받습니다:

  1. labels: 서로 다른 클래스를 나타내는 레이블 목록입니다.
  2. preds: 예측 목록으로, 각 예측은 labels 목록의 클래스에 해당하는 확률 목록입니다.
  3. ground_truth: 실제 레이블 목록입니다.

이 함수는 혼동 행렬을 목록의 목록으로 반환해야 하며, 각 내부 목록은 행렬의 행을 나타냅니다.

다음은 confusion_matrix 함수의 시작 코드입니다:

def confusion_matrix(
    labels: List, preds: List[List[float]], ground_truth: List
) -> List[List[int]]:
    """
    분류 문제에 대한 혼동 행렬을 계산합니다.

    이 함수는 레이블 목록, 예측 목록 (각 클래스에 대한 확률 목록), 실제 레이블 목록을 입력으로 받아 혼동 행렬을 반환합니다.
    혼동 행렬은 정사각 행렬이며, (i, j) 항목은 실제 클래스가 j 일 때 클래스 i 가 예측된 횟수를 나타냅니다.

    매개변수:
    labels (List): 서로 다른 클래스를 나타내는 레이블 목록입니다.
    preds (List[List[float]]): 각 예측이 labels 목록의 클래스에 해당하는 확률 목록인 예측 목록입니다.
    ground_truth (List): 실제 레이블 목록입니다.

    반환값:
    List[List[int]]: 각 목록이 행렬의 행을 나타내는 목록의 목록으로 표현된 혼동 행렬입니다.
    """
    ## 이 코드는 모든 요소를 0 으로 초기화하여 클래스 수와 동일한 차원을 가진 정사각 행렬을 생성합니다. 각 행과 열은 클래스 레이블에 해당합니다.
    matrix = [[0 for _ in range(len(labels))] for _ in range(len(labels))]

    ## 이 루프는 각 예측을 해당 실제 레이블과 쌍으로 묶어 하나씩 처리합니다.
    for pred, truth in zip(preds, ground_truth):
        ## NumPy 를 사용하여 예측 목록에서 가장 높은 확률의 인덱스를 찾습니다. 이는 예측된 클래스에 해당합니다.
        pred_index = np.argmax(pred)
        ## `labels` 목록에서 실제 클래스 레이블의 인덱스를 찾습니다.
        truth_index = labels.index(truth)
        ## 이 줄은 혼동 행렬에서 예측된 클래스 행과 실제 클래스 열의 교차점에 있는 셀을 증가시켜 이 특정 예측 - 실제 쌍의 발생 횟수를 효과적으로 계산합니다.
        matrix[pred_index][truth_index] += 1

    ## 모든 예측을 처리한 후, 함수는 계산된 혼동 행렬을 반환합니다.
    return matrix

confusion_matrix 함수에서 분류 문제에 대한 혼동 행렬을 계산하는 로직을 구현합니다.

✨ 솔루션 확인 및 연습

혼동 행렬 함수 테스트

이 단계에서는 제공된 예제를 사용하여 confusion_matrix 함수를 테스트합니다.

confusion_matrix.py 파일에 다음 코드를 추가합니다:

if __name__ == "__main__":
    labels = ["Python", "Java", "C++"]
    preds = [
        [0.66528198, 0.21971853, 0.11499949],
        [0.34275858, 0.05847305, 0.59876836],
        [0.47650585, 0.26353373, 0.25996042],
        [0.76153846, 0.15384615, 0.08461538],
        [0.04691943, 0.9478673, 0.00521327],
    ]
    ground_truth = ["Python", "C++", "Java", "C++", "Java"]
    matrix = confusion_matrix(labels, preds, ground_truth)
    print(matrix)

예제를 실행하려면 confusion_matrix.py 파일을 실행합니다:

python confusion_matrix.py

출력 결과는 다음과 같아야 합니다:

[[1, 1, 1],
 [0, 1, 0],
 [0, 0, 1]]

출력이 예상된 혼동 행렬과 일치하는지 확인합니다.

출력이 예상과 다를 경우, confusion_matrix 함수의 구현을 검토하고 필요한 수정을 수행합니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.