首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sklearn过拟合

Sklearn过拟合
EN

Stack Overflow用户
提问于 2016-09-19 13:22:34
回答 3查看 3.6K关注 0票数 0

我有一个包含1000个点的数据集,每个点有2个输入和1个输出。它分为80%用于培训,20%用于测试目的。我正在使用sklearn支持向量回归器对其进行训练。我用训练集得到了100%的准确率,但用测试集得到的结果并不好。我认为这可能是因为过度拟合。你能给我一些解决这个问题的建议吗?

EN

回答 3

Stack Overflow用户

发布于 2016-09-21 09:21:12

你可能是对的:如果你的模型在训练数据上得分很高,但在测试数据上表现不佳,这通常是过度拟合的症状。你需要在不同的情况下重新训练你的模型。我假设你使用的是sklearn中提供的train_test_split,或者一个类似的机制来保证你的拆分是公平和随机的。因此,您将需要调整SVR的超参数并创建几个模型,看看哪一个在测试数据上表现最好。

如果您查看SVR文档,您将看到可以使用几个输入参数来初始化它,每个输入参数都可以设置为许多不同的值。为简单起见,假设您只处理两个要调整的参数:' kernel‘和' C ',同时将第三个参数'degree’设置为4。您正在考虑'rbf‘和'linear’作为内核,0.1,1,10作为C。一个简单的解决方案是:

代码语言:javascript
运行
复制
for kernel in ('rbf', 'linear'):
    for c in (0.1, 1, 10):
        svr = SVR(kernel=kernel, C=c, degree=4)
        svr.fit(train_features, train_target)
        score = svr.score(test_features, test_target)
        print kernel, c, score

这样,您可以生成6个模型,并查看哪些参数导致最佳得分,在给定这些参数的情况下,哪个模型将是最好的选择。

一种更简单的方法是让sklearn使用GridSearchCV (或RandomizedSearchCV)为您完成大部分工作:

代码语言:javascript
运行
复制
parameters = {'kernel':('linear', 'rbf'), 'C':(0.1, 1, 10)}
clf = GridSearchCV(SVC(degree=4), parameters)
clf.fit(train_features, train_target)
print clf.best_score_
print clf.best_params_
model = clf.best_estimator_ # This is your model

我正在开发一个小工具来简化对小项目的sklearn的使用,让它成为一个配置yaml文件的问题,并让这个工具为你做所有的工作。它可以在我的github帐户上使用。你可能想看一下,看看它是否有帮助。

最后,您的数据可能不是线性的。在这种情况下,您可能希望尝试使用PolynomialFeatures之类的工具在现有非线性特征的基础上生成新的非线性特征,并查看它是否提高了模型质量。

票数 2
EN

Stack Overflow用户

发布于 2016-11-20 20:14:37

尝试使用training data split Sklearn K-Fold交叉验证拟合您的数据,这为您提供了公平的数据拆分和更好的模型,但代价是性能,这对于小型数据集和准确性是非常重要的。

票数 1
EN

Stack Overflow用户

发布于 2017-05-02 01:48:43

以下是一些提示:

  • 由于您只有两个输入,如果您绘制您的数据将是非常好的。尝试alpha = 0.3的散点或热图。
  • 尝试GridSearchCV,正如@shahins提到的那样。尤其是
    • ,请为C参数尝试不同的值。正如在docs中提到的,如果你有很多嘈杂的观察,你应该减少它。它对应于regularize more the estimation.
    • If it's long long,你也可以尝试在@shahins answer中添加一个旁注(我不被允许添加评论),这两种实现是不等价的。GridSearchCV更好,因为它在训练集中执行交叉验证来调整超参数。不要使用测试集来调优超参数!

  • 别忘了扩展您的data
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39565885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档