如何在 Pandas 中加入 2 列词嵌入

Posted

技术标签:

【中文标题】如何在 Pandas 中加入 2 列词嵌入【英文标题】:How to join 2 columns of word embeddings in Pandas 【发布时间】:2021-11-17 14:21:42 【问题描述】:

我已经提取了 2 个不同文本(标题和描述)的词嵌入,并希望在这两个嵌入上训练一个 XGBoost 模型。每个嵌入的维度为200,如下所示:

现在我能够在 1 个嵌入数据上训练模型,并且效果非常好:

x=df['FastText']  #training features
y=df['Category'] # target variable

#Defining Model
model = XGBClassifier(objective='multi:softprob')

#Evaluation metrics
score=['accuracy','precision_macro','recall_macro','f1_macro']

#Model training with 5 Fold Cross Validation
scores = cross_validate(model,  np.vstack(x), y, cv=5, scoring=score)

现在我想同时使用这两个功能进行训练,但如果我像这样传递 2 列 df 则会出现错误:

x=df[['FastText_Title','FastText']]

我尝试的一个解决方案是添加两个嵌入,例如 x1+x2,但它会显着降低准确性。如何在cross_validate 函数中同时使用这两个功能?

【问题讨论】:

【参考方案1】:

过去对于多个输入,我是这样做的:

features = ['FastText_Title', 'FastText']
x = df[features]
y = df['Category']

它正在创建一个包含两个数据集的数组。 制作新数组后,我通常还需要使用 MinMaxScaler 缩放数据。

【讨论】:

它给出了这个错误:ValueError: DataFrame.dtypes for data must be int, float or bool。没想到FastText_Title、FastText字段中的数据类型 嗯,这很有趣,可能是因为这些df列中的数据本身就是列表,它不喜欢这样【参考方案2】:

根据你得到的错误,似乎类型有问题。试试这个,它会将你的特征转换为数字,它应该可以工作:

df['FastText'] = pd.to_numeric(df['FastText'])
df['FastText_Title'] = pd.to_numeric(df['FastText_Title'])

【讨论】:

以上是关于如何在 Pandas 中加入 2 列词嵌入的主要内容,如果未能解决你的问题,请参考以下文章

在 pandas 中加入数据帧时的内存问题(时间索引)

如何在2016 excel中嵌入excel表格

如何在 Pandas Dataframe 中导入多个 excel 文件

如何在 pyspark 中加入带有熊猫数据框的配置单元表?

如何访问 Pandas DataFrame 中嵌入的 json 对象?

python 在Pandas中加入多个列