Developer/AI

[Package][오류] scikit-learn의 compute_class_weight() 사용 시 발생하는 TypeError 해결 (부제: 인자 3개인데 왜 자꾸 1개만 넣으라 그래요?)

마크 주쿼버그 2023. 4. 28. 19:54

Summary

- 문제 상황: scikit-learn의 compute_class_weight() 사용 시 인자 개수가 다르다는 오류 발생

- 해결 방안: 명시적으로 파라미터명을 매칭해주기

- 주의: 쉽게 패키지 버전의 문제라고 판단하지 말 것 (패키지 버전 꼬이면 최악의 경우 환경 구축을 다시 해야 할 수도 있음!)

 


Contents

Background

scikit-learn 라이브러리의 compute_class_weight 메소드를 사용하는 중 들어가야 할 인자는 3개인데, 3개를 넣었더니 1개만 넣어야 한다는 오류가 발생했다.

[TypeError] scikit-learn compute_class_weight() - 인자 개수 오류

오류 메시지: TypeError: compute_class_weight() takes 1 positional argument but 3 were given

 

scikit-learn 공식 문서에서도 들어가야 할 인자가 3개로 지정되어 있어 버전 문제인가 한참을 헤매었다.

scikit-learn 공식 문서 (https://scikit-learn.org/stable/modules/generated/sklearn.utils.class_weight.compute_class_weight.html)

 

sklearn.utils.class_weight.compute_class_weight

 

scikit-learn.org

 

 

그러나 이 문제는 아주 간단하게 해결이 가능하다.

인자를 명시적으로 매칭해주면 된다.

 


Solution

scikit-learn compute_class_weight() 실행 화면

위와 같이 기존에 값만 넣었던 코드에 변수명을 맵핑해주자 잘 작동함을 확인할 수 있었다.

 

이전 코드

class_wts = compute_class_weight('balanced', np.unique(train_labels), train_labels)

변경된 코드

class_wts = compute_class_weight(class_weight='balanced', classes=np.unique(train_labels), y=train_labels)

 

이 문제로 패키지 설치했다 지웠다 하면서 오히려 설정해둔 환경이 꼬이는 바람에 고생을 꽤 했는데, 이 글을 보는 사람들은 빠르고 간편하게 잘 해결하기를 바란다.

 

 

 


Conclusion

1. 구글링을 충분히 하면서 패키지 버전 변경은 마지노선으로 수행하기!

  - 패키지 충돌이 자주 일어나는 문제이다 보니 버전 문제인가 하고 계획없이 버전을 바꿔 설치하면 패키지간 꼬일 수 있음

2. 인자 개수가 잘 안 맞을 때에는 대입할 변수명을 명시적으로 매칭해보기

 

 

그럼 끝!