#python #machine-learning
Вопрос:
Мне нужно разделить набор данных на обучение тестированию без использования sklearn.model_selection.train_test_split.
Я хочу, чтобы подход был следующим:
- Чтение набора данных из excel со 100 строками (ГОТОВО):
data = pd.read_excel('file.xlsx')
- Из 100 строк выберите 75% случайных строк в качестве данных тестирования (ГОТОВО):
random_training = dataset.sample(75)
- Используйте цикл for, чтобы проверить, какие индексы существуют в списке данных, но не существуют в списке random_training. Если в списке random_training его нет, то добавьте в список список random_testing. Вот где мне трудно это выполнить. Есть какие-нибудь идеи?
Комментарии:
1. Почему вы не хотите использовать train_test_split? Вы можете преобразовать свой файл excel в фрейм данных pandas, а затем легко работать с ним.
2. Вероятно, правила домашних заданий.. @hyper-cookie
3. Почему бы сначала не рандомизировать ваш кадр, а затем использовать 75 из них в качестве тренировки, а остальные или 25% — для тестирования?
4. Я буду использовать
data.sample(frac=1)
сначала рандомизацию набора данных, а затем выберу первые 75 строк для обучения и последние 25 для тестирования.
Ответ №1:
Вы можете использовать DataLoader
и SubsetRandomSampler
и random.sample
:
from torch.utils.data import DataLoader,SubsetRandomSampler import random indices = random.sample(range(1, len(dataset)), (int)(len(dataset)*0.75)) missing_indices = [index for index in range(0, len(dataset)) if index not in indices] dl_valid = DataLoader(dataset,batch_size,sampler=SubsetRandomSampler(indices.astype("int")),num_workers = num_workers) dl_train = DataLoader(dataset,batch_size,sampler=SubsetRandomSampler(missing_indices.astype("int")),num_workers = num_workers)
Ответ №2:
tr=list(random_training.index) testing=data.loc[data.index.drop(tr)]