Im, использующий реализацию Xgboost на sklearn для соревнования kaggle. Однако им получать это сообщение 'предупреждение':XgBoost: наименее населенный класс в y имеет только 1 члена, которого слишком мало
$ питон 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. % (min_labels, self.n_folds)), предупреждение)
Согласно еще одному вопросу на StackOverflow: «Убедитесь, что у вас есть по крайней мере 3 образцов в классе, чтобы иметь возможность сделать перекрестную проверку StratifiedKFold с к == 3 (Я думаю, что это CV по умолчанию, используемое GridSearchCV для классификации). "
И хорошо, у меня нет как минимум 3 образцов на класс.
Так что мои вопросы:
а) каковы альтернативы?
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, вам нужно сделать этот простой анализ (проверьте, сколько выборок включено в каждую цель). Просто подсчитайте целевой вектор/столбец или используйте матрицу замешательства, тогда вы сможете иметь эти числа. Наконец, вы можете использовать Stratified K-fold CV, которое сохраняет исходную балансировку набора данных. Это решает проблему для CV, но у вас может быть очень искаженный/неуравновешенный набор, который ущемляет ваши модели. Вот функция SKlearn для Stratified K-fold CV: [link] (http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.StratifiedKFold.html) – Rabbit