Я пытаюсь написать код, где набор данных делится на обучающий и тестовый. Основная часть поезда будет разделена на поезда и перекрестные проверки. Используя значение 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'