我尝试用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)
我不确定我是否理解了警告信息。我以为我只会在小样本上使用它。
答案 0 :(得分:0)
正如大卫在评论中所建议的,听起来你的输出是连续的而不是分类的。如果是这种情况,你几乎肯定不想进行分类,而不是回归。
警告源于这样一个事实,即(至少)目标中的一个值被视为分类,但代表性不足。如果你确实想要进行分类,首先要做的好事就是计算整个训练集中每个类的出现次数。
进行k
折叠交叉验证时,min_labels
< k
,交叉验证的其中一个运行保证不会在火车或测试时间看到具有min_labels
的类的任何示例(更频繁地发生在测试时间因为测试集较小)。如果您只有一个特定类的实例,那么您将获得 training 运行,但没有看到该类的任何示例(它位于一个折叠,将用作测试集一次)