Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在使用make_csv_dataset创建的数据集上进行train_test_分割_Python_Tensorflow_Machine Learning_Scikit Learn - Fatal编程技术网

Python 如何在使用make_csv_dataset创建的数据集上进行train_test_分割

Python 如何在使用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

对于一个小数据集,我在整个数据集的数据帧上使用了scikit learn
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检查我的答案,看看到目前为止什么对我有效