如何将doc2vec模型infer_vector生成的数组与额外特征结合用于下游模型
Doc2Vec向量与额外特征拼接的实现方案
你提到的两种方式都可以实现特征拼接,具体可以根据你的使用场景选择:
- 直接数组拼接(适合快速建模,无需额外存储)
首先将X_train_doc从数组元组转为二维Numpy数组:
import numpy as np # 转换后形状为(样本数量, 300),对应你设置的vector_size=300 doc2vec_features = np.array(X_train_doc)
再将你的额外特征(比如Income)整理为形状为(样本数量, 额外特征数)的数组,直接用水平拼接得到完整的训练特征:
# 假设extra_features是已整理好的额外特征数组 X_train_total = np.hstack([doc2vec_features, extra_features])
得到的X_train_total可以直接输入逻辑回归等模型使用,不需要额外转成DataFrame。
- 拆分存入DataFrame列(适合需要做特征分析、后续二次加工的场景)
如果你需要保留结构化的特征表方便后续处理,就可以按你示例的方式拆分为多列,参考代码如下:
import pandas as pd # 生成doc2vec特征的列名 doc_feature_cols = [f"doc_feature{i+1}" for i in range(doc2vec_features.shape[1])] # 假设你原有包含Income等特征的DataFrame为train_df train_df[doc_feature_cols] = pd.DataFrame(doc2vec_features, index=train_df.index)
处理后就可以得到你示例中的表结构,后续提取全量特征时直接取对应列即可。
额外注意事项
- 你当前训练Doc2Vec时设置的
epochs=1过小,通常推荐设置为10~20轮,否则生成的向量表征质量会较差,直接影响下游模型效果。 - 逻辑回归对特征尺度敏感,拼接完成后建议对全量特征做标准化处理,避免收入这类数值跨度大的特征权重过高。
- 如果使用Scikit-learn的建模流程,也可以用ColumnTransformer分别处理不同类型的特征,无需提前手动拼接,能更好避免交叉验证时的数据泄露问题。
内容的提问来源于stack exchange,提问作者123456
相关产品推荐
相关产品推荐

