Разделение поезда / теста только по конкретному идентификатору / предмету - PullRequest
0 голосов
/ 14 июня 2019

Я хочу разделить свой набор данных на разделы по поездам / тестам. Однако вместо обычного процентного разделения я хочу сделать, например, "subject01.dat" данные теста, а другие предметы - данные обучения. Как я могу это сделать?

Если это имеет значение, набор данных представляет собой 3D-данные временного ряда. Но после моей предварительной обработки он превратился в двумерный массив.

Я думал об использовании sklearn.test_train_split, но какие параметры я могу установить, чтобы он сохранял "subject01.dat" в качестве набора тестовых данных?

import pandas as pd
import tensorflow as tf
import numpy as np
from sklearn.model_selection import train_test_split

dir = '/home/hanna/Documents/_DDA_Lab/Exercise6/PAMAP2_Dataset/Protocol/'
filelist = ['subject101.dat','subject102.dat','subject103.dat','subject104.dat','subject105.dat','subject106.dat','subject107.dat']

# Required columns
columns = [1,2,4,5,6,7,8,9,10,11,12,13,14,15,20,21,22,23,24,25,26,27,28,29,30,31,32,37,38,39,40,41,42,43,44,45,46,47,48,49]
# Required rows
ID_rows = [3,4,12,13]

for file in filelist:
    input = dir + file
    df = pd.read_csv(input, header=None, delim_whitespace=True)
    print('Done reading data file ', input)
    df = df[columns] # Keep only the required columns & drop the rest
    df = df[df[1].isin(ID_rows)] # Keep only the required rows & drop the rest
    df=df.fillna(0) # Replace NaNs with zeros
    df = (df - df.mean()) / df.std() # Normalize data
    data.append(df)


df = pd.concat(data) # Merge into one dataframe
print(df.shape)


# Convert dataframe into tensor
x_data = df.drop(1, axis=1).values
y_data = df[[1]].values


# Train / Test split
xTrain, xTest, yTrain, yTest = train_test_split(x_data, y_data, test_size=0.15, random_state=0)

1 Ответ

2 голосов
/ 14 июня 2019

Я не совсем уверен, правильно ли я понял, но я думаю, что вы могли бы просто создать отдельный DataFrame для каждого файла, который вы хотите в вашем обучающем наборе, и отдельный для ваших файлов test_set.

Например, предположим, что subject101.dat будет вашим тестовым набором:

filelist_test = ['subject101.dat']
filelist_train = ['subject102.dat','subject103.dat','subject104.dat','subject105.dat','subject106.dat','subject107.dat']

for train_file in filelist_train:
    # Do the same

train_df = pd.concat(data)

for test_file in filelist_test:
    # Do the same

test_df = pd.concat(data)

После этого вы можете удалить желаемый столбец метки и сделать то же самое, что вы делали раньше.Надеюсь, это было полезно.

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