我正在使用scikit-learn在python中创建一个预测模型,我正在尝试交叉验证以获得有效的F1分数。但是,根据我的简历方法,我得到了非常不同的结果。似乎这样的问题通常是由于过度拟合或数据不好,但在这种情况下,不应该解释我的方法即使在不同的分割中如何给出一致的内部结果,但总是彼此不同。 x
是我的数据集,y
是标签,rf_best
是我的分类器。例如:
cv_scores = cross_val_score(rf_best, x, y, cv=5, scoring='f1')
avg_cv_score = np.mean(cv_scores)
print cv_scores
avg_cv_score
返回
Out[227]:
[ 0.39825853 0.55969686 0.58727599 0.64060356 0.41976476]
0.52111993918160837
while(将cv
从5个拆分更改为ShuffleSplit
函数)
cv = ShuffleSplit(len(y), n_iter=5, test_size=0.25, random_state=1)
cv_scores = cross_val_score(rf_best, x, y, cv=cv, scoring='f1')
avg_cv_score = np.mean(cv_scores)
print cv_scores
avg_cv_score
返回
Out[228]:
[ 0.88029259 0.86664242 0.8898564 0.87900669 0.86130213]
0.87542004725953615
我确定分类器并没有很好地表现这一点,而且我也不知道如何使用5个shufflesplits过度拟合,特别是当我反复重复运行时。这个:
scores = []
for train, test in KFold(len(y), n_folds=5): #.25 tt split
xtrain, xtest, ytrain, ytest = x[train], x[test], y[train], y[test]
rf_best.fit(xtrain, ytrain)
scores.append(f1_score(ytest, rf_best.predict(xtest)))
print scores
np.mean(scores)
返回
Out[224]:
[0.3365789517232205, 0.39921963139526107, 0.47179614359341149, .56085913206027882, 0.3765470091576244]
0.42900017358595932
接近同一事物的3种方法怎么能如此一致地返回这样不同的结果?即使我更改随机种子或测试集大小,结果也与上面发布的结果类似。谢谢你的时间。