我目前正在构建一个分类模型,并使用这个数据集进行训练和测试。该数据集是从TIMIT数据库中提取的,包含五个不同音素类别的数字化频率。频率位于标注为“x.1”至“x.256”的256列之下,而音素类别本身标注为“g”。此外,还有一个标注为“speakers”的列,用于识别不同的说话者。
我的问题是,是否可以根据说话者列将数据集按50:50的比例拆分为训练和测试数据?实际上,我希望将数据分开,以便任何说话者都不在两个集合中,这样我就可以避免用包含与训练数据中相同说话者的测试数据来验证训练模型。
我的方法是使用NumPy从原始数据集中提取所有说话者,并利用train_test_split
的stratify
参数:
X_train, X_test, y_train, y_test = train_test_split(input_data, phonemes, random_state=42, test_size=0.5, stratify=speakers)
但这很可能不是解决方案。我非常感谢任何帮助解决这个问题的建议!
回答:
你可以使用Python的pandas库将CSV文件加载到数据框中,方法如下:
df = pd.read_csv(path_to_csv)
然后,你可以使用以下方法获取speaker列的所有唯一值:
arrayOfSpeaker = df['speaker'].unique()
现在,你可以轻松地使用arrayOfSpeaker将数据拆分为训练和测试集。我建议在切片数组之前先对arrayOfSpeaker进行随机化处理。
我通常按70:20:10的比例将数据拆分为训练:验证:测试。我不明白50:50拆分的意义!