XGBoost 및 우승자 인터뷰 소개, 부스팅 알고리즘으로 점수 올리기

XGBoost: A Scalable Tree Boosting System

Mac OSX에서 XGBoost 설치하기

import xgboost as xgb

dtrain = xgb.DMatrix(X_train_tfidf_vector, label=train['sentiment'])
# 멀티프로세싱은 nthread 였는데 n_jobs로 변경되었다고 한다.
# 설치 된 xgboost버전에 따라 파라메터가 다를 수 있으니 
# 이 코드를 돌리고 터미널에서 $ top -o cpu 로 CPU자원을 100%넘게 사용하고 있는지 확인해 본다.
params = {
    'booster': 'gblinear',
    'objective': 'multi:softmax',
    'eval_metric': 'merror',
    'eta' : 0.02,
    'lambda': 2.0,
    'alpha': 1.0,
    'lambda_bias': 6.0,
    'num_class': 5,
    'n_jobs' : 4,
    'silent': 1,
}

%time booster = xgb.train(params, dtrain, num_boost_round=100)

CPU times: user 24.2 s, sys: 1.19 s, total: 25.4 s
Wall time: 18.9 s

dtest = xgb.DMatrix(X_test_tfidf_vector)

result = booster.predict(dtest)

print(result.shape)
result[0:10]

(25000,)

array([1., 0., 1., 1., 1., 1., 0., 0., 0., 1.], dtype=float32)

result = result.astype(int)
output = pd.DataFrame(data={'id':test['id'], 'sentiment':result})
output.head()
id sentiment
0 12311\_10 1
1 8348\_2 0
2 5828\_4 1
3 7186\_2 1
4 12128\_7 1
output_sentiment = output['sentiment'].value_counts()
print(output_sentiment[0] - output_sentiment[1])
output_sentiment

-704

1 12852
0 12148
Name: sentiment, dtype: int64

output.to_csv("data/tutorial_4_tfidf_xgboost.csv", index=False, quoting=3)

Kaggle API를 통해 서브미션이 가능하다.

# !kaggle competitions submit -c word2vec-nlp-tutorial -f data/tutorial_4_tfidf_xgboost.csv -m 'num_boost_round=300'

Successfully submitted to Bag of Words Meets Bags of Popcorn

# !kaggle competitions submissions -c word2vec-nlp-tutorial
# 캐글 스코어 0.86560
286/578

0.49480968858131485