我尝试用Scikit Learn在Python中创建一个预测模型。我有一个大约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)
我不确定我是否理解了警告信息。
正如David在评论中建议的那样,听起来您的输出是连续的,而不是分类的。如果是这种情况,您几乎肯定不想执行分类,而不是回归。
该警告源于这样一个事实,即(至少)一个被视为分类的目标值未被充分表示。如果你确实想要进行分类,那么首先要做的一件好事就是计算每个类在整个训练集中出现的次数。
当你做k
折叠交叉验证时,min_labels
<k
,交叉验证的一个运行保证不会看到min_labels
类的>任何示例,无论是在训练时间还是在测试时间(更频繁地发生在测试时间,因为测试集更小)。如果您只有一个特定类的实例,那么进一步,您将保证得到一个训练运行,它没有看到该类的任何示例(它位于其中一个折叠中,将被用作一次测试集)