关于 k 折交叉验证的建议

Posted

技术标签:

【中文标题】关于 k 折交叉验证的建议【英文标题】:Advice on k fold cross validation 【发布时间】:2016-02-17 19:02:05 【问题描述】:

我目前正在使用代码对dicom图像进行支持向量机分类的交叉验证方法:

    #Cross Validation using k-folds
    clf = svm.SVC(kernel='linear')
    scores = cross_validation.cross_val_score(clf,X,Y,cv=16))
    print scores
    print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(),scores.std()*2))

如您所见,我目前正在使用 16 次折叠,我如何找出最佳使用次数?是不是越多越好?

另外,我发现在使用交叉验证时,我的准确度分数从 66% 到 100% 变化很大,通常平均准确率为 82% 到 85%。关于如何改进这一点,或者确保分类器从每个类中挑选相同数量的图像,有什么建议吗?

抱歉,我对 Python 很陌生!

感谢您的建议!

【问题讨论】:

【参考方案1】:

尝试使用 GridSearchCV。例如,我可以创建一个管道,例如

pipeline = Pipeline([

    ('clf', LogisticRegression())
    ])

    parameters = 

        'clf__C': (0.1, 1, 10, 20, 30)
    

所以,我在这里为我的 LogisticRegression() 分类器的 C 参数提供 5 个不同的选项,在我的管道中由 clf 表示

当然,您可以使用 SVC 代替 LogisticRegression()。那么

grid_search = GridSearchCV(pipeline, parameters, n_jobs=3, verbose=1, scoring='accuracy')

然后就像

bestParameters = grid_search.best_estimator_.get_params()
    for param_name in sorted(parameters.keys()):
        print ('\t %s: %r' % (param_name, bestParameters[param_name]))

会给你最好的一组选项来指定

【讨论】:

以上是关于关于 k 折交叉验证的建议的主要内容,如果未能解决你的问题,请参考以下文章

交叉验证(cross validation)是什么?K折交叉验证(k-fold crossValidation)是什么?

K折交叉验证实现python

机器学习100天(二十九):029 K折交叉验证

机器学习100天(二十九):029 K折交叉验证

机器学习100天(二十九):029 K折交叉验证

如何在朴素贝叶斯分类器中使用 k 折交叉验证?