python - 如何修复Python中的 "IndexError: tuple index out of range"?

标签 python numpy scikit-learn grid-search

我正在使用 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))

所需输出:

如果有办法解决上述错误,我希望能找到最适合的参数模型,然后用它来进行估计。有什么想法可以改进上述尝试吗?谢谢

最佳答案

当你定义

cv = [[] for _ in range(len(models))]

每个模型都有一个空列表。 然而,在循环中,您会遍历 enumerate(zip(models, params))其中只有两个元素,因为您的 params list 有两个元素(因为 list(zip(x,y)) has length 等于 min(len(x),len(y) )。

因此,您会得到 IndexError因为 cv 中的一些列表当您使用 np.mean 计算平均值时,它们都是空的(除了前两个) .

解决方案: 如果不需要使用GridSearchCV在其余型号上,您只需扩展 params包含空字典的列表:

params = [{'C': [0.01, 1]}, {'n_estimators': [10, 20]}, {}, {}, {}, {}]

关于python - 如何修复Python中的 "IndexError: tuple index out of range"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57060964/

相关文章:

python - 选择 numpy 数组中特定维度的索引

Python NumPy 将列转换为行

python - typeError 帮助,plt.scatter 将我的 .csv 读取为真/假而不是数值

machine-learning - 降低 FP 率 scikit-learn 随机森林

python-3.x - 使用 pandas 进行多类分类的总体准确性

python - 删除长子命令帮助输出?

python - 这是对 python 内置哈希函数的适当使用吗?

python - 如何将 numpy 数组 View 转换为 opencv 矩阵?

python - 列中的条件格式单元格基于它在另一列中的对应值

python - 如何永久修改python中的字典?