kaggleの競争のためにsklearnのXgboost実装を使用しています。 しかし、この '警告' メッセージを取得イム:XgBoost:yの人口が最も少ないクラスはメンバーが1人しかなく、少なすぎる
を$ pythonのScript1.py /home/sky/private/virtualenv15.0.1dev/myVE/local/lib/python2.7/site-packages/sklearn/cross_validation .py:516:
警告:yの少なくとも人口クラスが少なすぎる場合にのみ1メンバーを有しています。任意のクラスの最小ラベル数は、n_folds = 3より小さくできません。 stackoverflowの上の別の質問によると %(min_labels、self.n_folds))、警告)
: は「k個の== 3でStratifiedKFoldクロスバリデーションを行うことができるようにあなたは、クラスごとに少なくとも3つのサンプルを持っていることを確認してください(これは、分類のためにGridSearchCVによって使用されるデフォルトのCVだと思います)。
、よく、私はクラスごとに少なくとも3つのサンプルを持っていけません。
は、だから私の質問は以下のとおりです。
a)の選択肢は何ですか?
b)は、なぜ私は、クロス検証を使用することはできませんか?
C)私が代わりに何を使用することができますか?
...
param_test1 = {
'max_depth': range(3, 10, 2),
'min_child_weight': range(1, 6, 2)
}
grid_search = GridSearchCV(
estimator=
XGBClassifier(
learning_rate=0.1,
n_estimators=3000,
max_depth=15,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
objective='multi:softmax',
nthread=42,
scale_pos_weight=1,
seed=27),
param_grid=param_test1, scoring='roc_auc', n_jobs=42, iid=False, cv=None, verbose=1)
...
grid_search.fit(train_x, place_id)
参考文献:
One-shot learning with scikit-learn
Using a support vector classifier with polynomial kernel in scikit-learn
Kaggleの競争のため、新しいデータセットを取得できません。 – KenobiShan
だから私はちょうどその孤独なターゲットを持っているサンプルを削除します...私はcv = 3を使用する場合..どのような場合、私はサンプルの量<3、右のターゲット/クラスを削除しますか? – KenobiShan
CVを使用しているので、この簡単な分析を行う必要があります(各ターゲットにサンプルがいくつあるかチェックしてください)。ベクトル/コラムのターゲットを数えたり、混乱マトリクスを使用すれば、これらの数値を持つことができます。最後に、データセットの元のバランスを維持する層別K倍CVを使用できます。これはCVの問題を解決しますが、あなたのモデルを傷つける非常に歪んだ/アンバランスなセットがまだあるかもしれません。ここでSKlearn機能は、層状K倍のCVのためである:[リンク](http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.StratifiedKFold.html)ターゲットを分析する – Rabbit