我有一个数据集,其中包含1000个点,每个点有2个输入和1个输出。它已被分为80%的培训和20%的测试目的。我正在使用sklearn支持向量回归器来训练它。训练集的准确率达到了100%,但测试集的结果并不理想。我认为这可能是因为过度配合。请你能建议我解决问题。Sklearn过度拟合
-2
A
回答
2
您可能是对的:如果您的模型在训练数据上得分非常高,但对测试数据表现不佳,通常是过度拟合的症状。你需要在不同的情况下重新训练你的模型。我假设你正在使用sklearn提供的train_test_split,或者类似的机制来保证你的分裂是公平和随机的。因此,您需要调整SVR的超参数并创建多个模型,并查看哪个模型在您的测试数据上表现最佳。
如果您看一下SVR文档,您会发现它可以使用多个输入参数启动,每个输入参数可以设置为多个不同的值。为简单起见,让我们假设你只处理两个你想要调整的参数:'kernel'和'C',同时保持第三个参数'degree'为4.你正在考虑'rbf'和'linear'内核和0.1,1,10 C.一个简单的解决办法是这样的:
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):
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的东西来生成基于现有非线性特征的新非线性特征,并查看它是否可以提高模型质量。
1
尝试使用训练数据拆分Sklearn K-Fold交叉验证,这将为您提供公平的数据拆分和更好的模型,尽管以性能为代价,这对小数据集和优先级应该很重要是准确的。
1
一些提示:
- 因为你只有两个输入,它会如果你绘制你的数据是巨大的。尝试使用alpha = 0.3的散点图或热图。
- 尝试GridSearchCV,如@shahins所述。
- 特别是,为
C
参数尝试不同的值。正如在docs中所提到的,如果你有很多噪音观察,你应该减少它。它对应于更多的预测。 - 如果时间太长,您也可以尝试RandomizedSearchCV
- 作为@shahins回答(我不允许添加注释)的一个注意事项,两种实现方式都不相同。 GridSearchCV更好,因为它在用于调整超参数的训练集中执行交叉验证。不要使用测试集来调整超参数!
- 特别是,为
- 不要忘了扩展您的数据
相关问题
- 1. sklearn feature_extraction拟合并行
- 2. 顺序拟合随机森林sklearn
- 3. 线性回归的过度拟合
- 4. 过度拟合和ROC曲线
- 5. 梯度Sklearn
- 6. 如何将不同的输入拟合到sklearn管道中?
- 7. 使用sklearn cross_val_score和kfolds来拟合和帮助预测模型
- 8. 使用Python/Sklearn创建并拟合乘法线性回归
- 9. Css宽度拟合内容
- 10. 拟合Div的对宽度
- 11. JSlider拟合JPanel的宽度
- 12. 拟合调度系统
- 13. SKlearn SGD部分适合
- 14. sklearn DecisionTreeClassifier更深度精度更低?
- 15. C# - 通过二次拟合
- 16. 为什么我的CNN模型过度拟合?
- 17. 通过使用R Langauge的Kolmogorov-Smirnov测试的拟合优度
- 18. 支持向量机过度拟合我的数据
- 19. 识别SVM中可能的过度拟合
- 20. 如何检测文本编辑是否过度拟合?
- 21. 是什么原因导致的算法过度拟合
- 22. R HoltWinters预测软件包 - 避免过度拟合数据
- 23. Autoencoder和神经网络过度拟合的参数号?
- 24. 过度拟合,梯度消失和局部最小值之间的关系?
- 25. 为什么sklearn LatentDirichletAllocation的拟合和partial_fit返回不同的结果?
- 26. 功能选择sklearn - ValueError:X有一个不同的形状比拟合
- 27. 拟合角度数据的策略
- 28. 每行data.frame内的拟合优度
- 29. 6度曲线拟合与numpy/scipy
- 30. sklearn
是否有任何理由SVR的选择呢? – LouisBBBB
这是因为它有各种数量的内核,可以用来适当地适应非线性数据。 –
机器学习算法背后的主要思想是创建非线性模型。 SVR收敛速度很慢。 SVR有很多内核,每一个都有不同的参数,这使得它更慢(因为你没有真正的选择,只能做一个网格搜索,测试所有参数组合)。这就是为什么我问你这个选择背后的想法。 – LouisBBBB