2017-10-29 96 views
0

현재 ROC 곡선을 그릴 때 임의의 포리스트 분류 기준을 변경하려고합니다. 랜덤 포레스트에 대해 이렇게하는 유일한 방법은 class_weight 매개 변수를 사용하는 것입니다. 나는 이것을 성공적으로 수행 할 수 있었고 정밀도, 회수율, 진정한 양성률 및 위양성율을 높이거나 낮추었습니다. 그러나, 내가 실제로하고있는 것이 확실하지 않습니다. 현재 나는 다음과 같은 것을 가지고있다;Class_Weight in Random Forest Python

rfc = RandomForestClassifier(n_jobs=-1, oob_score=True, n_estimators=50,max_depth=40,min_samples_split=100,min_samples_leaf=80, class_weight={0:.4, 1:.9}) 

.4와 .9는 실제로 참조하는 부분이 무엇입니까? 나는 데이터 세트의 40 %가 0과 90 % 1이라고 생각했지만, 분명히 의미가 없습니다 (% 100 이상). 실제로 무엇을하고 있습니까? 감사!

답변

1

클래스 가중치는 일반적으로 1로 정규화 할 필요가 없습니다 (중요한 클래스 가중치의 비율 일 뿐이므로 클래스의 가중치를 1로 제한하면 실제로 제한되지 않습니다).

그래서 클래스 가중치를 0.4와 0.9로 설정하면 데이터가 0.4/(0.4 + 0.9)에서 0.9/(0.4 + 0.9) [클래스 0에 속하는 대략 30 % 및 ~ 70 % 클래스 1에 속함].

다른 클래스 가중치를 볼 수있는 또 다른 방법은 한 클래스의 실수를 다른 클래스에 비해 더 강하게 페널티하는 방법이지만 데이터의 레이블이 균형 잡힌 숫자라고 가정합니다. 귀하의 예에서는 0을 1로 오 분류하는 것보다 1을 오 분류하는 것이 9/4 배 더 나을 것입니다.

+0

당신이 말한 것은 완벽한 의미를 가지며 실제로 이해하게되었습니다. 그러나, 내 데이터 세트는 실제로 당신이 말한 것과는 정반대입니다. 따라서 70 % 0과 30 % 1이 더 중요합니다. 두 번째 설명의 반대 즉 9/4 시간이 오히려 0을 1로 잘못 분류하고 싶습니다. 나는 churn 예측을하고있다). 그러나 내가 위에 보여준 것을 해냈고 그것은 환상적인 결과를 낳습니다. 혹시 당신의 설명이 반대입니까? 즉 70 % 0과 30 % 1입니까? – Cameron