【发布时间】: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