Ошибка в python train и тестирование: как исправить «TypeError: unhashable type: 'list'» - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь написать код, где набор данных делится на обучающий и тестовый. Основная часть поезда будет разделена на поезда и перекрестные проверки. Используя значение K-fold, я хочу запустить код так, чтобы основной набор поездов был разделен на столько сгибов (или групп, в зависимости от значения сгибов, которые мы упоминаем), сколько мы хотим, и дает (folds-1) группы дляразделенный набор поездов и оставшиеся для перекрестной проверки. Например, если есть 3 сгиба, то основной состав делится на три группы: g1, g2, g3. сначала g1 + g2 берется в качестве поезда, а g3 - перекрестная проверка, затем g2 + g3 - поезд, а g1 - перекрестная проверка и т. д., чтобы найти точность и, следовательно, наилучшее значение K.

Логика, котораяЯ использовал, чтобы разделить основной поезд в зависимости от количества сгибов и использовать случайный выбор на нем. поэтому одна группа выбирается из функции split_list и предоставляется для перекрестной проверки. остальное отдается поезду (валидация главного поезда).

случайный импорт из sklearn.metrics import точность_score

def split_list (x_train, folds):

length = len(x_train)

return  random.choices([ x_train[i*length // folds: (i+1)*length // folds] 
         for i in range(folds) ])
def Random_Search(x_train,y_train,classifier, params, folds):

trainscores = []
cvscores = []

for k in tqdm(params['n_neighbors']):

    trainscores_folds = []
    cvscores_folds = []

    for j in range(0, folds):   

        cv_indices = split_list(list(x_train), folds)
        train_indices = list(set(list(range(1, len(x_train)))) - 
                         set(cv_indices))

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

TypeError                                 Traceback (most recent call last)
<ipython-input-114-808deaf8461e> in <module>

      8 params = {'n_neighbors':sorted(random.sample(range(1,50),10))}

      9 folds = 9

---> 10 trainscores,cvscores = Random_Search(X_train, y_train, neigh, params, folds)

     11 plt.plot(params['n_neighbors'],trainscores, label='train cruve')

     12 plt.plot(params['n_neighbors'],cvscores, label='cv cruve')

<ipython-input-113-fc0b09f4ad82> in Random_Search(x_train, y_train, classifier, params, folds)

     14         for j in range(0, folds):

     15             cv_indices = split_list(list(x_train), folds)

---> 16             train_indices = list(set(list(range(1, len(x_train)))) - set(cv_indices))

     17 # selecting the data points based on the train_indices and test_indices

     18             X_train = x_train[train_indices]

TypeError: unhashable type: 'list'

1 Ответ

0 голосов
/ 09 ноября 2019

Я не знаю, что вы пытаетесь сделать там, но, возможно, проблема в том, что список train_indices показывается как вывод, как список, но у вас есть один список, который содержит список элементов, поэтому он делаетне знаю, как читать этот список. он ожидал, что предметы не являются списком предметов.

Итак, у вас есть основной список, который содержит один список предметов, но он ожидал, что найденные предметы не будут другим списком предметов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...