Python: разбить набор данных в соответствии с конкретным столбцом - PullRequest
0 голосов
/ 05 декабря 2018

В настоящее время я пытаюсь построить модель классификации, для которой я использую этот набор данных для обучения и тестирования.Он извлечен из базы данных TIMIT и содержит оцифрованные частоты пяти различных классов фонем.Частоты находятся под 256 столбцами, помеченными «x.1» - «x.256», в то время как сам класс фонем обозначен «g».Кроме того, есть также колонка «докладчики», в которой указаны разные докладчики.

Мой вопрос: возможно ли разделить этот набор данных на соотношение тренировочных и тестовых данных 50:50 с учетом столбца динамиков?На самом деле, я хочу разделить данные так, чтобы ни один из выступавших не входил в оба набора, чтобы я не проверял обученную модель с помощью тестовых данных, содержащих те же самые говорящие, которые уже есть в обучающих данных.

Myподход заключался в том, чтобы извлечь все динамики из исходного набора данных с помощью NumPy и использовать параметр stratify train_test_split:

X_train, X_test, y_train, y_test = train_test_split(input_data, phonemes, random_state=42, test_size=0.5, stratify=speakers)

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

1 Ответ

0 голосов
/ 05 декабря 2018

Привет, вы можете использовать библиотеку pandas для Python, чтобы загрузить csv в dataframe, используя

import pandas as pd

df = pd.read_csv(path_to_csv)

, тогда вы можете получить все уникальныезначения колонки колонки с помощью

arrayOfSpeaker = df['speaker'].unique()

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

, и я обычно делю данные на соотношение 70:20:10 для поезда: проверки: теста.Я не получил точку разделения 50:50!

...