from sklearn import cross_validation model = RandomForestClassifier(n_estimators=100) #Simple K-Fold cross validation. 5 folds. #(Note: in older scikit-learn versions the "n_folds" argument is named "k".) cv = cross_validation.KFold(len(train), n_folds=5, indices=False) results = [] # "model" can be replaced by your model object # "Error_function" can be replaced by the error function of your analysis for traincv, testcv in cv: probas = model.fit(train[traincv], target[traincv]).predict_proba(train[testcv]) results.append( Error_function ) #print out the mean of the cross-validated results print "Results: " + str( np.array(results).mean() )
复制代码
但是我们如何选择k呢?
这是棘手的部分。我们需要权衡选择k。
对于小k,我们有更高的选择偏差但性能差异很小。
对于大k,我们有一个小的选择偏差但性能差异很大。
想想极端情况:
k = 2:我们只有2个样本类似于我们的50-50个例子。在这里,我们每次仅在50%的人口中建立模型。但由于验证是一个重要的人口,验证性能的差异是最小的。
k =观察次数(n):这也称为“留一个”。我们有n次样本和建模重复n次,只留下一个观察结果进行交叉验证。因此,选择偏差很小,但验证性能的差异非常大。