如何在 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 Dataframe 中导入多个 excel 文件