【问题标题】:scikit overfitting all the timescikit一直过拟合
【发布时间】:2015-07-31 23:43:08
【问题描述】:

Scikit 在我将其用于机器学习时过度拟合。例如,我使用decisiontree 进行回归。

r_value 的训练集给了我 0.9998; r_value 的测试集给了我 0.3134; 经过交叉验证,测试集给了我 0.1695 的 r_value

如果我使用cross_val_predict 函数,我是否必须添加测试集目标值?或者它会给我一个错误?我想知道如何避免输入测试集目标值?

dt=tree.DecisionTreeRegressor().fit(feature,target)

slope,intercept,r_value,p_value,std_err=stats.linregress(target,dt.predict(feature))
print r_value
slope,intercept,r_value,p_value,std_err=stats.linregress(target_test,dt.predict(feature_test))
print r_value

predicted=cross_validation.cross_val_predict(dt,     feature_test,target_test,cv=5)
slope,intercept,r_value,p_value,std_err=stats.linregress(target_test,predicted)
print r_value

【问题讨论】:

  • 有什么奇怪的?您所做的只是调用库函数并打印答案。为什么你认为你有问题?
  • 因为训练集给了我高 r_value 而测试集给了我低 r_value。如何获得训练集和测试集的相似 r_values?

标签: python machine-learning scikit-learn


【解决方案1】:

默认情况下,DecisionTrees 会构建到所有叶子都是纯的,所以这是完全可以预料的。您应该尝试设置 max_depth 或其他正则化参数,并使用 GridSearchCV 进行设置。 此外,您可能希望使用 RandomForestRegressor 或 ExtraTreeRegressor 而不是单个树,这基本上每次都会为您提供更好的性能。 看看user guide,,尤其是实用技巧。

【讨论】:

  • 谢谢!我会尝试网格参数。此外,我很好奇如果我使用 'cross_val_predict' 方法,为什么我的结果在测试集上会变得更糟?它尝试了 10 次。
  • 你想做什么?请查看交叉验证文档。 scikit-learn.org/dev/modules/cross_validation.html你现在做的事情没有多大意义。
猜你喜欢
  • 2013-12-19
  • 2015-03-25
  • 2015-11-04
  • 2015-08-11
  • 1970-01-01
  • 2015-10-25
  • 2019-04-01
  • 2017-06-17
  • 2015-05-29
相关资源
最近更新 更多