【问题标题】:Why is the shape different for train,test and cv?为什么 train、test 和 cv 的形状不同?
【发布时间】:2019-12-22 19:08:34
【问题描述】:

我有一个包含 3321 行的数据集,我将它们分为训练测试集和 cv 集。

在划分数据集后,我应用了响应编码和 onehot-encoding,但是在 onehotencoding 之后,列的形状也发生了变化,因此我在预测时会进一步出错

#response coding for the Gene feature
alpha = 1    #Used for laplace smoothing
train_gene_feature_responseCoding = np.array(get_gv_feature(alpha, "Gene", train_df))  #train gene feature
test_gene_feature_responseCoding = np.array(get_gv_feature(alpha, "Gene", test_df))    #test gene feature
cv_gene_feature_responseCoding = np.array(get_gv_feature(alpha, "Gene", cv_df))      #cv gene feature

#one-hot encoding of Gene Feature
gene_vectorizer = CountVectorizer()
train_gene_feature_onehotCoding = gene_vectorizer.fit_transform(train_df['Gene'])
test_gene_feature_onehotCoding = gene_vectorizer.fit_transform(test_df['Gene'])
cv_gene_feature_onehotCoding = gene_vectorizer.fit_transform(cv_df['Gene'])


train_gene_feature_responseCoding.shape - (2124, 9)

test_gene_feature_responseCoding.shape - (665, 9)

cv_gene_feature_responseCoding.shape - (532, 9)

train_gene_feature_onehotCoding.shape - (2124, 228)

test_gene_feature_onehotCoding.shape - (665, 158)

cv_gene_feature_onehotCoding.shape - (532, 144)

【问题讨论】:

  • 你需要使用gene_vectorizer.transform(test_df['Gene']) and gene_vectorizer.transform(cv_df['Gene'])
  • 非常感谢,从过去 6 小时以来一直在努力解决这个问题,您几秒钟内就解决了。
  • 顺便说一句,你能解释一下当我从 fit_transform 更改为 transform 时发生了什么,为什么它只在 test 和 cv set 中更改?
  • 当您在 tran_df 上使用 fit_tranform 时,它会根据特征生成 m * n 矩阵。现在你训练模型。现在测试数据必须是相同的形状,所以只需使用 transform() 将测试数据集转换为 m * n 形状。
  • @Vishal 我建议您将此作为答案发布,以便 OP 接受

标签: python machine-learning scikit-learn one-hot-encoding


【解决方案1】:

您只需要在测试和 cv 数据帧上使用gene_vectorizer.transform()。

gene_vectorizer.transform(test_df['Gene'])
gene_vectorizer.transform(cv_df['Gene'])

在 scikit-learn 估算器 api 中,

fit():用于从训练数据生成学习模型参数

transform() : fit() 方法生成的参数,应用于模型以生成转换后的数据集。

fit_transform() : fit() 和 transform() api 在同一数据集上的组合

所以在测试数据集上,您只需使用 transform() 将测试数据集转换为模型可以接受的形状。

参考:what is the difference between 'transform' and 'fit_transform' in sklearn

【讨论】:

    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多