【发布时间】:2019-11-25 09:48:44
【问题描述】:
我正在使用sklearn 模块来寻找最佳拟合模型和模型参数。但是,我在下面遇到了意外的索引错误:
> IndexError Traceback (most recent call
> last) <ipython-input-38-ea3f99e30226> in <module>
> 22 s = mean_squared_error(y[ts], best_m.predict(X[ts]))
> 23 cv[i].append(s)
> ---> 24 print(np.mean(cv, 1))
> IndexError: tuple index out of range
我想做的是找到最合适的回归器及其参数,但我得到了上述错误。我查看了SO 并尝试了this solution,但仍然出现同样的错误。任何想法来修复这个错误?谁能指出我为什么会发生这个错误?有什么想法吗?
我的代码:
from sklearn.model_selection import KFold
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from xgboost.sklearn import XGBRegressor
from sklearn.datasets import make_regression
models = [SVR(), RandomForestRegressor(), LinearRegression(), Ridge(), Lasso(), XGBRegressor()]
params = [{'C': [0.01, 1]}, {'n_estimators': [10, 20]}]
X, y = make_regression(n_samples=10000, n_features=20)
with warnings.catch_warnings():
warnings.filterwarnings("ignore")
cv = [[] for _ in range(len(models))]
fold = KFold(5,shuffle=False)
for tr, ts in fold.split(X):
for i, (model, param) in enumerate(zip(models, params)):
best_m = GridSearchCV(model, param)
best_m.fit(X[tr], y[tr])
s = mean_squared_error(y[ts], best_m.predict(X[ts]))
cv[i].append(s)
print(np.mean(cv, 1))
想要的输出:
如果有办法解决上述错误,我希望能挑选出带有参数的最佳拟合模型,然后将其用于估计。有什么想法可以改进上述尝试吗?谢谢
【问题讨论】:
-
@desertnaut 你认为我该如何优化这段代码?有更好的主意吗?
-
这是一个非常笼统的问题,但是在 每个 中的 5 个折叠之一中进行网格搜索听起来有点矫枉过正。我建议您打开另一个问题寻求建议(确保您的代码完全可重现,包括所有相关的导入)。
-
这个错误可以用
np.mean([],1)复现,支持cv是[]的想法,或者包含[]列表。
标签: python numpy scikit-learn grid-search