2015-02-02 1 views
3

나는 두 개의 스플릿과 무작위 포리스트 분류기를 사용하여 scikit learn의 데이터 세트를 가지고 있습니다.Scickit-learn RandomForestClassifier의 predict_proba 출력물

나는 87 개의 클래스와 344 개의 샘플을 가지고 있습니다. predict_proba의 출력은 대개의 경우 3 차원 배열 (87, 344, 2)입니다 (실제로는 list은 87 numpy.ndarrays이고 (344, 2) 요소입니다).

때때로 훈련 및 테스트를 위해 샘플의 다른 하위 집합을 선택하면 2 차원 배열 (87, 344) 만 표시됩니다 (어떤 경우에는 해결할 수 없지만).

내 두 가지 질문은 다음과 같습니다

  • 이러한 차원은 무엇을 상징 하는가? ROC AUC 점수를 얻으려고 노력했는데 출력의 절반을 가져 가야합니다 (즉, (87, 344, 2)[:,:,1], 트랜스 포즈 한 후 본질적으로 내 진실 (roc_auc_score(ground_truth, output_of_predict_proba[:,:,1].T))과 비교하십시오. 그러나 실제로 그것이 무엇인지 이해하지 못합니다. 의미한다.
  • 왜? 나는 그것이 3 차원 배열을 반환하는 경우에이 2D 하나.

답변

0

classifier.predict_proba() 클래스의 확률을 반환하는 경우에 다른 데이터 집합으로 출력 변화를 이해할 수 없다 않습니다. 배열의 n 차원은 열차 하위 집합에있는 클래스 수에 따라 달라집니다.

0

정말 확실합니까? 당신은 RF에 맞게 사용하고 있습니까? 올바른 모양입니까? (n_samples, n_features) 및 대상 클래스에 대한 (n_samples)를 지정합니다. 당신의 경우에 배열 (n_samples, n_classes)의 배열 Y_pred (344,87)가 있어야합니다. 여기서 행 r의 항목 i는 샘플 X [r ::]에 대한 클래스 i의 예상 확률입니다. sum(Y_pred[r,:]) = 1에 유의하십시오.

그러나 만약 당신의 대상 배열 Y 모양 (n_samples, n_classes), 각 행을 하나의 샘플 클래스에 해당하는 제외한 모든 0이 될 것이라고 생각 sklearn 다중 출력 예측 문제로 간주하십시오 (고려하십시오 각각의 클래스는 독립적으로)하지만 나는 그것이 당신이하고 싶은 것을 생각하지 않습니다. 이 경우 각 클래스와 각 샘플에 대해이 클래스에 속할 확률을 예측할 수 있습니다.

마지막으로 출력은 훈련 세트의 클래스 수에 따라 다르므로 실제로 훈련 세트에 따라 달라집니다. n_classes 속성을 사용하여 가져올 수 있으며 (수동으로 설정하여 클래스 수를 강제 할 수도 있음) 속성 값이 classes 인 클래스 값을 가져올 수도 있습니다. documentation을 참조하십시오.

희망이 있습니다.