如何对两个独立文本列分别应用TF-IDF向量化完成分类(无需拼接特征)
双列独立TF-IDF向量化实现方案
调整数据集拆分逻辑
原拆分仅传入单列文本作为特征,现在需要将两个待处理的文本列组成DataFrame后再传入拆分逻辑,标签列无需修改,stratify等原有参数保持不变。
假设你需要处理的第二个文本列名为YOUR_SECOND_COL,使用时替换为实际列名即可。
独立初始化向量化器
为保证两列的特征空间完全独立、不合并业务语义,需要为每个文本列单独创建TfidfVectorizer实例,不可共用同一个实例拟合两列语料。两个向量器的参数可根据各自列的文本分布单独调整,无需保持一致。
分别完成拟合与转换
每个向量器仅使用对应列的训练集语料完成fit,再分别转换对应列的训练集、测试集数据,最终得到4个互不干扰的独立特征矩阵。
完整可运行代码:
# 拆分数据集:特征为包含两个文本列的DataFrame,标签沿用原category_id Train_X, Test_X, Train_Y, Test_Y = model_selection.train_test_split( Corpus[['VLOB_D&B', 'YOUR_SECOND_COL']], # 替换为实际的两个文本列名 Corpus['category_id'], test_size=0.3, stratify=Corpus['category_id'] ) # 为两列分别初始化独立的TF-IDF向量器 # 第一列VLOB_D&B的向量器,沿用原有参数 Tfidf_vect_vlob = TfidfVectorizer(sublinear_tf=True, min_df=2, ngram_range=(1, 2)) # 第二列的向量器,可单独调整参数,例如修改min_df、ngram_range等 Tfidf_vect_second = TfidfVectorizer(sublinear_tf=True, min_df=2, ngram_range=(1, 2)) # 处理第一列的训练、测试集 Tfidf_vect_vlob.fit(Train_X['VLOB_D&B']) Train_X_Tfidf_vlob = Tfidf_vect_vlob.transform(Train_X['VLOB_D&B']) Test_X_Tfidf_vlob = Tfidf_vect_vlob.transform(Test_X['VLOB_D&B']) # 处理第二列的训练、测试集 Tfidf_vect_second.fit(Train_X['YOUR_SECOND_COL']) Train_X_Tfidf_second = Tfidf_vect_second.transform(Train_X['YOUR_SECOND_COL']) Test_X_Tfidf_second = Tfidf_vect_second.transform(Test_X['YOUR_SECOND_COL'])
注意事项
- 上述流程未对两列的向量化结果做任何拼接,最终得到的
Train_X_Tfidf_vlob、Train_X_Tfidf_second为完全独立的特征矩阵,分别对应两列的专属特征空间 - 两个向量器的参数完全独立,可根据每列的文本长度、词汇量分布单独调整,无需保持一致
- 后续可根据模型要求直接使用这两个独立矩阵:如果使用支持多输入的模型(如多分支神经网络、自定义多输入树模型),可直接传入双特征;如果需要分别验证两列的分类效果,也可单独调用对应矩阵训练模型
内容的提问来源于stack exchange,提问作者Isha
相关产品推荐
相关产品推荐

