Перебирайте каждый элемент и используйте элемент в качестве имени выходного столбца в GBM

#python

#python

Вопрос:

Я хочу просмотреть список параметров в gbm и сгенерировать фрейм данных, который записывает результаты каждой комбинации параметров.

Ниже приведен мой код:

 from sklearn.ensemble import GradientBoostingRegressor
import pandas as pd

totalreturn_annual = []
params = {'n_estimators': [1, 10, 50, 100, 200], 'max_depth': [1,3,5,7,9],
        'learning_rate': [0.01,0.05,0.1,0.2,0.3], 'min_samples_split ':[0.1,0.3,0.5,0.7,0.9]}

params = pd.Dataframe(params)

for p in range(16):

        model_cape = GradientBoostingRegressor(random_state = 10, max_features = 'sqrt',
                                               n_estimators = params.iloc[p,0], learning_rate = params.iloc[p,2], 
                                            alpha = params.iloc[p,3], max_depth = params.iloc[p,1],).fit(xs, ys_cape)
totalreturn_annual[p] = np.append(totalreturn_annual, totalreturn_annual_temp)
  

Это ошибка, которую я получил:

     totalreturn_annual[p] = totalreturn_annual.append(totalreturn_annual)

IndexError: list assignment index out of range
  

Интересно, почему я получил ошибку.

Комментарии:

1. totalreturn_annual пусто. Вы пытаетесь присвоить результат np.append позиции в нем, которая не существует. Вы, вероятно, хотите totalreturn_annual.append(...) .

2. Можем ли мы выполнить индексацию такого типа (totalreturn_annual[p] ) в списке? Я знаю, что мы можем сделать это в словаре. Когда я пытаюсь его протестировать, я получаю ту же ошибку. Есть мнения экспертов? Я думаю, если вы удалите [p] с левой стороны, это сработает?

Ответ №1:

Вы инициализируете totalreturn_annual как пустой список в первой строке вашего кода, таким образом, он не будет принимать индекс. Это приводит к ошибке индекса. Это должно сработать:

 np.append(totalreturn_annual, totalreturn_annual_temp)
  

вместо:

 totalreturn_annual[p] = np.append(totalreturn_annual, totalreturn_annual_temp)
  

Функция np.append (a,b) добавляет b к a; a изменяется на месте.