2013-05-16 2 views
0

확률 적으로 변화하는 부스트를 구현하기 위해 Python 용 Scikit 모듈을 사용하고 있습니다. 내 데이터 세트에는 2700 개의 인스턴스와 1700 개의 기능 (x)이 있으며 이진 데이터가 들어 있습니다. 내 출력 벡터가 'y'이고 0 또는 1 (이진 분류)이 포함되어 있습니다. 내 코드입니다예측 불가능한 결과를주는 확률 적 변화 부스트

gb = GradientBoostingClassifier(n_estimators=1000,learn_rate=1,subsample=0.5) gb.fit(x,y)

print gb.score(x,y)

내가 그것을 실행, 1.0 (100 %)의 정확도를 가지고하면, 때때로 나는 (약 0.46의 정확도를 얻을 수 46 %). 성능에 큰 차이가있는 이유는 무엇입니까?

답변

4

첫째, 발언의 몇 :

  • 알고리즘의 이름은 그라데이션 (회귀 나무 또는 기계) 증폭되고 직접

  • 당신은 평가해서는 안 확률 그라데이션 하강과 관련이 없습니다 데이터를 학습하는 기계 학습 알고리즘의 정확도. 그렇지 않으면 모델의 초과 피팅을 감지 할 수 없습니다. 사용 : sklearn.cross_validation.train_test_splitXyX_train, y_train 끼우기 및 X_test, y_test 득점으로 나눕니다.

이제 GBRT 모델은 실제로 결정적이지 않은 모델입니다. 결정 성/재현성있는 실행을 얻으려면 random_state=0을 전달하여 의사 난수 생성기를 시드 (또는 max_features=None을 전달하지만 권장하지 않음).

당신이 훈련 오류의 큰 변화를 관찰한다는 사실은 이상합니다. 아주 작은 수의 유익한 기능과 대부분의 다른 기능과 매우 관련이있는 경우 출력 신호가 잡음 일 수 있습니까?

당신은 당신의 데이터에 RandomForestClassifier 모델에 맞게 시끄러운 기능을 무시하고 GBRT 모델을 안정화하는 데 도움이 계산 feature_importance_ 배열을 사용을 시도 할 수 있습니다.

1

당신은 각 반복에서 훈련 손실 보라,이 수치 어려움을 :: 나타낼 수있는 손실이 갑자기 "점프"여부를 나타낼 수있는 결과 플롯은 점차 파란색처럼 많이 감소한다

import pylab as plt 
train_scores = gb.train_score_ 
plt.plot(np.arange(train_scores.shape[0]), train_scores, 'b-') 

왼쪽 그림의 라인은 http://scikit-learn.org/dev/auto_examples/ensemble/plot_gradient_boosting_regression.html입니다.

점차적으로 감소하지만 갑자기 점프하는 경우 숫자 안정성 문제를 나타낼 수 있습니다.이를 방지하려면 학습 속도를 낮추어야합니다 (예 : 0.1).

급격한 점프가 표시되지 않고 상당한 감소가없는 경우 먼저 서브 샘플링을 끄고 학습 속도를 조정하는 것이 좋습니다.

+0

감사합니다. 나는 그것을 시도 할 것이다. –