1

이것은 내가 this thread의 후속 조치인데 GaussianNB 분류기로 잘못된 결과를 얻었습니다. 리눅스 VM에서 scikit-learn v0.10을 실험했다. Bernoulli와 Multinomial NB 분류자를 대신 사용했지만, 마침내 맥북에 scipy가 설치되었을 때, 내가 쓰는 scikit-learn 버전은이 글의 최신판 인 0.13이었다.Scikit-learn : BernoulliNB, v0.10 vs v0.13 : 매우 다른 결과

v0.10에
  • 가, 내가 들어 왔 유일한 주목할만한 개선 내 기능 세트 중 하나에 BernoulliNB 분류와 90 %의 정확도를 얻고있다 : 나는 이제 새로운 문제를 제시했다 지금까지. V0.13에
  • , 그것은 정확히 같은 코드를 사용하여 약 67 %로오고

사람이 버전 사이에 변경 알고 있나요? 레포 역사를 살펴 봤지만 이런 종류의 정확성에 대한 설명은 볼 수 없었습니다. BernoulliNB v0.10을 사용하여 정말 좋은 결과를 얻었으므로 분명히 사용하고 싶지만 버전 간 충돌 결과를 조금 더 이해하지 않고서는 주저합니다.

(최신) class_prior 속성을 설정했지만 0.13에 대한 결과가 변경되지 않았습니다.

편집 : 작업 한 예제 (내가 잘 작업 할 것입니다)가 부족하여 0.13 결과가 많이 편향되어 있습니다. 이는 베이지안 분류 자의 기대만큼 큰 것이 아니며, 비록 그것을 아직 추적하지는 못했지만, 그것은 클래스 계산에 대한 회귀 였을지 모른다고 믿습니다.

0.10: 
T\P F M 
F 120 18 
M 19 175 

0.13: 
T\P F M 
F 119 19 
M 59 135 

편집 : 2 : 예를 들어

나는 손으로 몇 가지 예를 통해했다. 0.13 버전은 확실히 정확하고 0.10 버전은 분명히 아닙니다. 이는 내가 의심스럽고 두려워했던 것입니다. 0.10의 오류는 이전에 계산 한 클래스에있는 것으로 보입니다. _count 함수는 도청됩니다. 특히 this line of the file에 클래스 카운트가 단순히 잘못되었습니다. the 0.13 branch과 비교하여 두 지점이 다른 위치의 평활화 요인을 가져 오는 것을 무시합니다.

필자는이 문제에 대해 좀 더 생각해보아야합니다. 왜이 기능을 사용하지 않으면 내 데이터에서 좋은 성능을 얻을 수 있는지, 그리고 클래스 사전 설정이 작동하지 않는 이유는 아직 확실하지 않습니다. 이미 원본 문서에있는 남성 편견에 대해 불이익을 줄 가능성이 있습니까?

편집 3 :

나는 그게이 일을 정확히 믿습니다. _count 함수와 그에 따른 fit 내의 피쳐 사전 계산은이 매개 변수를 적용하지 않으므로, class_priors가 predict에서 고려되지만,이 매개 변수는 학습 중에 모델을 작성하는 데 사용되지 않습니다. 이것이 의도적인지 확실하지 않은 경우 - 테스트 할 때 모델을 작성하는 데 사용 된 사전을 무시 하시겠습니까?

+0

최소 회귀 스크립트 + 회귀를 나타내는 데이터를 포함시켜주십시오. – ogrisel

+0

@ogrisel : 확실히 시도해 볼 수는 있지만 현재 프레임 워크를 벗어난 회귀를 재현 할 수 있도록 코드와 테스트 데이터를 모두 얻으려면 약간의 작업이 필요합니다. 이것은 내가 지금까지 문제를 디버깅하는 데 드는 것보다 조금 더 노력할 것입니다. 그래서 내가 함께 놓을 수있는 것을 보게 될 것입니다. 아무도 알지 못하면 시간 프레임에 따라 포스트 또는 재 게시를 업데이트 할 것입니다. 버전 간 행동에 예상되는 변화 – flatline

답변

0

제 결과를 요약하면, 베르누이 NB 분류기의 0.10 버전에서 버그가 발생했습니다. 베르누이 NB 분류기는 피쳐 프리 어를 계산할 때 클래스 수를 왜곡하고 우수한 결과를 내기 위해 결과 모델을 바이어스하는 것 같습니다. 나는이 작업이 무엇을하고 있었는지에 적응하여 궁극적으로 0.13 버전의 (수정) MultinomialNB에서 동일한 성능을 얻었습니다.