scikit-learn의 class_weight 매개변수는 어떻게 작동합니까?

Python functions

scikit-learn의 Logistic Regression에서 class_weight 매개변수가 작동하는 방식을 이해하는 데 많은 어려움을 겪고 있습니다.

상황

매우 불균형한 데이터 세트에 대해 이진 분류를 수행하기 위해 로지스틱 회귀를 사용하고 싶습니다.클래스에는 0(음수) 및 1(양수)로 레이블이 지정되고 관찰된 데이터는 대부분의 샘플은 부정적인 결과를 나타냅니다.

첫 번째 시도: 수동으로 훈련 데이터 준비

나는 훈련과 테스트를 위해 가지고 있던 데이터를 분리된 세트로 나눴습니다(약 80/20). 그런 다음 19:1과 다른 비율(2:1 -> 16:1)로 훈련 데이터를 얻기 위해 수동으로 훈련 데이터를 무작위로 샘플링했습니다.

나는 이것들에 대해 로지스틱 회귀를 훈련했습니다 다른 훈련 데이터 하위 집합과 다른 훈련 비율의 함수로 표시된 재현율(= TP/(TP+FN)) 물론 재현율은 관찰된 비율이 19:1인 분리된 TEST 샘플에서 계산되었습니다. 참고, 서로 다른 교육 데이터에 대해 서로 다른 모델을 교육했지만 동일한(분리된) 테스트 데이터에서 모든 모델에 대한 재현율을 계산했습니다.

결과는 예상대로였습니다. 재현율은 2에서 약 60%였습니다. :1 훈련 비율과 16:1에 도달할 즈음에는 오히려 빨리 떨어졌습니다. 2:1 -> 6:1의 여러 비율이 있었는데 회상률이 5%를 훨씬 넘었습니다.

두 번째 시도: 그리드 검색

다음으로 저는 다른 정규화 매개변수를 테스트하고 싶었기 때문에 GridSearchCV를 사용하고 C 매개변수와 class_weight 매개변수의 여러 값으로 그리드를 만들었습니다. 네거티브:포지티브 훈련 샘플의 n:m 비율을 class_weight 사전 언어로 번역하려면 다음과 같이 여러 사전을 지정하면 된다고 생각했습니다.

{ 0: 0.67, 1:0.33 } #예상 2:1 { 0:0.75, 1:0.25 } #예상 3:1 { 0:0.8, 1:0.2 } #예상 4:1 

또한 Noneauto도 포함했습니다.

이번에는 결과가 완전히 엉망이었습니다. 내 모든 리콜은 auto를 제외한 class_weight의 모든 값에 대해 아주 작게 나왔습니다(< 0.05). 따라서 class_weight 사전을 설정하는 방법에 대한 나의 이해가 잘못되었다고 가정할 수 있습니다. 흥미롭게도 그리드 검색에서 "auto"의 class_weight 값은 C의 모든 값에 대해 약 59%였으며 균형이 1:1이라고 추측했습니다.

내 질문

  1. class_weight를 적절하게 사용하여 실제 데이터와 훈련 데이터의 균형을 다르게 맞추는 방법 그것을 제공? 특히, n:m 비율의 음수:양성 훈련 샘플을 사용하려면 어떤 사전을 class_weight에 전달해야 하나요?

  2. 다양한 class_weight 사전을 GridSearchCV에 추가하면 교차 검증 중에 사전에 따라 훈련 폴드 데이터의 균형을 재조정하지만 테스트 폴드에서 내 점수 함수를 계산하기 위해 주어진 실제 샘플 비율을 사용합니까? 모든 측정항목이 관찰된 비율의 데이터에서 나온 경우에만 나에게 유용하기 때문에 이것은 매우 중요합니다.

  3. auto 값은 class_weight 비율만큼 합니까? 나는 문서를 읽고 "주파수에 반비례하는 데이터 균형"이 1:1로 만든다는 것을 의미한다고 가정합니다. 이 올바른지? 그렇지 않다면 누군가 명확히 할 수 있습니까?

Shop

Gifts for programmers

Best Python online courses for 2022

$FREE
Gifts for programmers

Best laptop for Excel

$
Gifts for programmers

Best laptop for Solidworks

$399+
Gifts for programmers

Best laptop for Roblox

$399+
Gifts for programmers

Best computer for crypto mining

$499+
Gifts for programmers

Best laptop for Sims 4

$
Gifts for programmers

Best laptop for Zoom

$499
Gifts for programmers

Best laptop for Minecraft

$590

Latest questions

PythonStackOverflow

Common xlabel/ylabel for matplotlib subplots

1947 answers

PythonStackOverflow

Check if one list is a subset of another in Python

1173 answers

PythonStackOverflow

How to specify multiple return types using type-hints

1002 answers

PythonStackOverflow

Printing words vertically in Python

909 answers

PythonStackOverflow

Python Extract words from a given string

798 answers

PythonStackOverflow

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

606 answers

PythonStackOverflow

Python os.path.join () method

384 answers

PythonStackOverflow

Flake8: Ignore specific warning for entire file

360 answers

News


Wiki

Python | How to copy data from one Excel sheet to another

Common xlabel/ylabel for matplotlib subplots

Check if one list is a subset of another in Python

How to specify multiple return types using type-hints

Printing words vertically in Python

Python Extract words from a given string

Cyclic redundancy check in Python

Finding mean, median, mode in Python without libraries

Python add suffix / add prefix to strings in a list

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

Python - Move item to the end of the list

Python - Print list vertically