gpt4 book ai didi

python - 使用 train_test_split 拆分数据时与之后加载 csv 文件时的精度不同

转载 作者:行者123 更新时间:2023-12-04 03:51:48 27 4
gpt4 key购买 nike

我建立了一个模型来预测客户是企业客户还是私有(private)客户。训练模型后,我预测了 1000 个我没有用于训练的数据集的类别。此预测将保存在 csv 文件中。现在我有两种不同的行为:

  1. 在程序中拆分样本数据

当我使用 train, sample = train_test_split(train, test_size=1000, random_state=seed) 创建样本时,预测在训练期间获得相同的准确度(与验证的值相同)。

  1. 提前拆分样本数据再加载

但是当我在学习之前通过获取原始 csv 文件的 1000 个数据集并将其复制到我在学习后进行预测之前加载的新样本 csv 文件中手动拆分数据时,我得到了更糟糕的结果(例如 76 % 而不是 90%)。这种行为在我看来没有意义,因为原始数据(用于训练的 csv 文件)也被提前打乱了顺序,因此我应该得到相同的结果。下面是上述案例区分的相关代码:

1。程序中拆分示例数据

split

def getPreProcessedDatasetsWithSamples(filepath, batch_size):
path = filepath
data = __getPreprocessedDataFromPath(path)

train, test = train_test_split(data, test_size=0.2, random_state=42)
train, val = train_test_split(train, test_size=0.2, random_state=42)
train, sample = train_test_split(train, test_size=1000, random_state=seed)

train_ds = __df_to_dataset(train, shuffle=False, batch_size=batch_size)
val_ds = __df_to_dataset(val, shuffle=False, batch_size=batch_size)
test_ds = __df_to_dataset(test, shuffle=False, batch_size=batch_size)
sample_ds = __df_to_dataset(sample, shuffle=False, batch_size=batch_size)

return (train_ds, val_ds, test_ds, sample, sample_ds)

使用样本 sample_ds 进行预测

def savePredictionWithSampleToFileKeras(model, outputName, sample, sample_ds):
predictions = model.predict(sample_ds)
loss, accuracy = model.evaluate(sample_ds)


print("Accuracy of sample", accuracy)


sample['prediction'] = predictions
sample.to_csv("./saved_samples/" + outputName + ".csv")

样本准确率:90%

2。预先拆分样本数据,然后加载

通过加载csv文件进行预测

def savePredictionToFileKeras(model, sampleFilePath, outputName, batch_size):
sample_ds = preprocessing.getPreProcessedSampleDataSets(sampleFilePath, batch_size)
sample = preprocessing.getPreProcessedSampleDataFrames(sampleFilePath)

predictions = model.predict(sample_ds)
loss, accuracy = model.evaluate(sample_ds)

print("Accuracy of sample", accuracy)

sample['prediction'] = predictions
sample.to_csv("./saved_samples/" + outputName + ".csv")

样本准确率:77%

编辑

观察:当我加载整个数据作为样本数据时,我得到的值与预期的验证值相同(大约 90%),但是当我只是随机化同一文件的行顺序时,我得到的值为82%。据我了解,准确性应该是相同的,因为文件是相等的。

一些附加信息:我已将实现形式从顺序更改为功能 API。我在预处理中使用了嵌入(我也尝试过 One-Hot-Encoding 但没有成功)。

最佳答案

最后我发现了问题所在:我使用 Tokenizer 预处理 NAME 和 STREET 列,将每个词转换为一个值,该值指示该词出现的频率。在我使用 train_test_split 的情况下,我使用所有数据的相同整体词来转换词,但是当我之后加载样本数据集时,我只使用样本数据集中出现的词。例如,“family”这个词可能是总体上使用最多的词,但在样本数据集中仅排在第三位,因此编码将完全错误。在对所有数据使用相同的分词器实例后,我对所有数据都获得了相同的高精度。

关于python - 使用 train_test_split 拆分数据时与之后加载 csv 文件时的精度不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64352102/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com