来自Scikit Learn的CrossValidation上的折叠不够

时间:2015-10-06 11:25:52

标签: python machine-learning scikit-learn cross-validation

我尝试用Python中的Scikit Learn创建预测模型。我有一个大约850k行和17列的数据帧。最后一列是我的标签,其他列是我的标签。

from sklearn import cross_validation
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics

predictors = [a list of my predictors columns]

alg = RandomForestClassifier(random_state=1, n_estimators=150, min_samples_split=8, min_samples_leaf=4)

scores = cross_validation.cross_val_score(alg, train[predictors],train["Sales"], cv=5)

print(scores.mean())

但是,当我运行代码时,我有以下警告:

/Users/.../anaconda/lib/python2.7/site-packages/sklearn/cross_validation.py:417: Warning: The least populated class in y has only 1 members, which is too few. The minimum number of labels for any class cannot be less than n_folds=5.
  % (min_labels, self.n_folds)), Warning)

我不确定我是否理解了警告信息。我以为我只会在小样本上使用它。

1 个答案:

答案 0 :(得分:0)

正如大卫在评论中所建议的,听起来你的输出是连续的而不是分类的。如果是这种情况,你几乎肯定不想进行分类,而不是回归。

警告源于这样一个事实,即(至少)目标中的一个值被视为分类,但代表性不足。如果你确实想要进行分类,首先要做的好事就是计算整个训练集中每个类的出现次数。

进行k折叠交叉验证时,min_labels< k,交叉验证的其中一个运行保证不会在火车或测试时间看到具有min_labels的类的任何示例(更频繁地发生在测试时间因为测试集较小)。如果您只有一个特定类的实例,那么您将获得 training 运行,但没有看到该类的任何示例(它位于一个折叠,将用作测试集一次)