keras - 训练测试拆分之前或之后的处理

标签 keras scikit-learn nlp tokenize train-test-split

我正在使用这篇优秀的文章来学习机器学习。

https://stackabuse.com/python-for-nlp-multi-label-text-classification-with-keras/

作者将 X 和 y 数据拆分后对其进行了标记。

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.20, random_state=42
)

tokenizer = Tokenizer(num_words=5000)
tokenizer.fit_on_texts(X_train)

X_train = tokenizer.texts_to_sequences(X_train)
X_test = tokenizer.texts_to_sequences(X_test)

vocab_size = len(tokenizer.word_index) + 1

maxlen = 200

X_train = pad_sequences(X_train, padding="post", maxlen=maxlen)
X_test = pad_sequences(X_test, padding="post", maxlen=maxlen)

如果我在使用 train_test_split 类之前标记它,我可以节省几行代码。
tokenizer = Tokenizer(num_words=5000)
tokenizer.fit_on_texts(X)

X_t = tokenizer.texts_to_sequences(X)
vocab_size = len(tokenizer.word_index) + 1
maxlen = 200

X = pad_sequences(X_t, padding="post", maxlen=maxlen)

我只是想确认我的方法是正确的,我不希望脚本后面有任何惊喜。

最佳答案

这两种方法都将在实践中起作用。但是在训练集上拟合分词器并将其应用于训练和测试集比在整个数据集上拟合要好。实际上,使用第一种方法,您正在模仿这样一个事实,即在部署模型后的某个时间点,模型会出现看不见的词。因此,您的模型评估将更接近生产环境中将发生的情况。

关于keras - 训练测试拆分之前或之后的处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57693333/

相关文章:

python - 在 Keras 中将多个输入样本映射到单个输出样本

python - 向多项式朴素贝叶斯分类器添加特征 - Python

python - 对 GridSearchCV 的工作感到困惑

math - 评估者间协议(protocol)(Fleiss 的 Kappa、Krippendorff 的 Alpha 等) Java API?

python - 定义单词的上下文 - Python

java - 使用标准 corenlp 包获取 corefrences

python - 密集层中的多个 Softmax

python - Keras 中的输入形状和 Conv1d

python - 为什么我的 CNN 总是输出正值,即使在训练集图像上也是如此?

python - 如何使用 Python 从最高到最低设置 k-Means 聚类标签?