Python 如何在使用make_csv_dataset创建的数据集上进行train_test_分割
对于一个小数据集,我在整个数据集的数据帧上使用了scikit learnPython 如何在使用make_csv_dataset创建的数据集上进行train_test_分割,python,tensorflow,machine-learning,scikit-learn,Python,Tensorflow,Machine Learning,Scikit Learn,对于一个小数据集,我在整个数据集的数据帧上使用了scikit learntest\u train\u split from sklearn.model_selection import train_test_split train, test = train_test_split(features_dataframe, test_size=0.2) train, test = train_test_split(train, test_size=0.2) train, val = train_t
test\u train\u split
from sklearn.model_selection import train_test_split
train, test = train_test_split(features_dataframe, test_size=0.2)
train, test = train_test_split(train, test_size=0.2)
train, val = train_test_split(train, test_size=0.2)
它只是在我的数据集上创建一个测试、训练和验证分割。
现在,我想从磁盘(即我的csv文件)加载数据。所以,我使用的是实验性的tf.data函数。我所做的是
import tensorflow as tf
defaults=[float()]*len(selected_columns)
data_set=tf.data.experimental.make_csv_dataset(
file_pattern = "./processed/*/*/*.csv",
column_names=all_columns, # array with all columns labels
select_columns=selected_columns, # array with desired column labels
column_defaults=defaults, # default column values
label_name="Target",
batch_size=10,
num_epochs=1,
num_parallel_reads=20,
shuffle_buffer_size=10000,
ignore_errors=True)
据我猜测,我有数据集,但当我尝试执行scikit learn的训练测试\u split
时,它不起作用,原因很明显,数据集尚未加载,只是配置为加载
如何对这些数据进行培训、测试和验证拆分
我已经阅读了一些指南,每个人(据我所知)都在加载培训数据:
首先,为了更好地控制我的数据集,我使用了一个较低级别的类似API,即。然后,我手动将数据集放入两个不同的文件夹中,用于测试和训练拆分,并分别加载为
import pathlib
training_csvs = sorted(str(p) for p in pathlib.Path('./../Datasets/path-to-dataset/Train').glob("*/*.csv"))
testing_csvs = sorted(str(p) for p in pathlib.Path('./../Datasets//path-to-dataset/Test').glob("*/*.csv"))
training_dataset=tf.data.experimental.CsvDataset(
training_csvs,
record_defaults=defaults,
compression_type=None,
buffer_size=None,
header=True,
field_delim=',',
use_quote_delim=True,
na_value="",
select_cols=selected_indices
)
print(type(training_dataset))
testing_dataset=tf.data.experimental.CsvDataset(
testing_csvs,
record_defaults=defaults,
compression_type=None,
buffer_size=None,
header=True,
field_delim=',',
use_quote_delim=True,
na_value="",
select_cols=selected_indices
)
print(training_dataset.element_spec)
print(testing_dataset.element_spec)
training_dataset= training_dataset.shuffle(50000)
validate_ds = training_dataset.batch(300).take(100)
train_ds = training_dataset.batch(300, drop_remainder=True).skip(100)
test_ds = testing_dataset.batch(300, drop_remainder=True)
现在,它正在工作,但还有一个问题,那就是验证数据集。理想情况下,每个历元的验证数据集应该不同,但在本例中是相同的,因此,多个历元的培训并不能提高性能。如果有人能帮助解决这个问题,我将不胜感激。首先,为了更好地控制我的数据集,我使用了一个较低级别的类似API,即。然后,我手动将数据集放入两个不同的文件夹中,用于测试和训练拆分,并分别加载为
import pathlib
training_csvs = sorted(str(p) for p in pathlib.Path('./../Datasets/path-to-dataset/Train').glob("*/*.csv"))
testing_csvs = sorted(str(p) for p in pathlib.Path('./../Datasets//path-to-dataset/Test').glob("*/*.csv"))
training_dataset=tf.data.experimental.CsvDataset(
training_csvs,
record_defaults=defaults,
compression_type=None,
buffer_size=None,
header=True,
field_delim=',',
use_quote_delim=True,
na_value="",
select_cols=selected_indices
)
print(type(training_dataset))
testing_dataset=tf.data.experimental.CsvDataset(
testing_csvs,
record_defaults=defaults,
compression_type=None,
buffer_size=None,
header=True,
field_delim=',',
use_quote_delim=True,
na_value="",
select_cols=selected_indices
)
print(training_dataset.element_spec)
print(testing_dataset.element_spec)
training_dataset= training_dataset.shuffle(50000)
validate_ds = training_dataset.batch(300).take(100)
train_ds = training_dataset.batch(300, drop_remainder=True).skip(100)
test_ds = testing_dataset.batch(300, drop_remainder=True)
现在,它正在工作,但还有一个问题,那就是验证数据集。理想情况下,每个历元的验证数据集应该不同,但在本例中是相同的,因此,多个历元的培训并不能提高性能。如果有人能帮我解决这个问题,我将不胜感激。但我现在没有数据帧,是DataSetDo帮助了你吗?@TFer2检查我的答案,看看到目前为止什么对我有效,但我现在没有数据帧,是DataSetDo帮助了你?@TFer2检查我的答案,看看到目前为止什么对我有效